Einführung in die Wirtschaftsinformatik WS 2008/2009 SQL - Abfragen und Joins Agenda Alternative Ausdrücke Daten aus mehreren Tabellen SQL - Abfragen und Joins Datenauswahl mit Joins Einführung in die Wirtschaftsinformatik Universität Potsdam Lehrstuhl für Wirtschaftsinformatik und Electronic Government Univ.-Prof. Dr.-Ing. Norbert Gronau August-Bebel-Str. 89 14482 Potsdam Tel. (0331) 977-3379 Fax (0331) 977-3406 http://wi.uni-potsdam.de Teil 13 © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam SQL - Abfragen und Joins Alternative Ausdrücke Bedingte Ausdrücke Bereitstellen von IF-THEN-ELSE-Logik innerhalb der SQL-Anweisung Verwendung von zwei Methoden CASE-Ausdrücke Funktion DECODE CASE ausdruck WHEN comp_ausdruck1 THEN return_ausdruck1 [WHEN comp_ausdruck2 THEN return_ausdruck2 WHEN comp_ausdruckn THEN return_ausdruckn ELSE else_ausdruck] END Alternative Ausdrücke DECODE(col|ausdruck, such1, ergebnis1 [, such2, ergebnis2,...,] [, default]) © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam 1-4 Einführung in die Wirtschaftsinformatik WS 2008/2009 Alternative Ausdrücke Alternative Ausdrücke Anwendung von CASE-Ausdrücken Anwendung der Funktion DECODE Bedingte Abfragen in der Form von IF-THEN-ELSE-Anweisung Wirkung der Anweisung ähnlich der IF-THEN-ELSE-Anweisung SELECT name, position, gehalt, CASE position WHEN 'Konstrukteur' THEN gehalt*1.10 WHEN 'Monteur' THEN gehalt*1.15 WHEN 'Meister' THEN gehalt*1.05 ELSE gehalt END Gehaltserhöhung FROM mitarbeiter ORDER BY position; NAME ..... Klein Plenk ..... Krause Tänzer Schulz-Niemeyer Fritzsche ..... POSITION ..... Konstrukteur Konstrukteur ..... Meister Meister Monteur Monteur ..... GEHALT ..... 5400 5200 ..... 4500 4400 3800 3750 ..... SELECT name, position, gehalt, DECODE(position, 'Konstrukteur', gehalt*1.10, 'Monteur', gehalt*1.15, 'Meister', gehalt*1.20, gehalt) Gehaltserhöhung FROM mitarbeiter ORDER BY position; GEHALTSERHÖHUNG ..... 5940 5720 ..... 4725 4620 4370 4312,5 ..... © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam NAME ..... Klein Plenk ..... Krause Tänzer Schulz-Niemeyer Fritzsche ..... POSITION ..... Konstrukteur Konstrukteur ..... Meister Meister Monteur Monteur ..... GEHALT ..... 5400 5200 ..... 4500 4400 3800 3750 ..... GEHALTSERHÖHUNG ..... 5940 5720 ..... 4725 4620 4370 4312,5 ..... © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Greenberg 2002, S. 176 Alternative Ausdrücke Greenberg 2002, S. 178 SQL - Abfragen und Joins Abfragereihen mit der Funktion DECODE Anzeige des Steuersatzes für jeden Angestellten der Abteilung 30 SELECT 0, 1, 2, 3, 4, 5, name, gehalt, DECODE (TRUNC(gehalt/1000, 0), 0.00, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45) Steuersatz FROM mitarbeiter WHERE abt_nr = 30; NAME Hunger Dost Hein Petersen Heine POSITION Abteilungsleiterin Einkäufer Einkäufer Einkäufer Sekretärin Daten aus mehreren Tabellen GEHALT STEUERSATZ 6200 6 4600 4 4600 4 4400 4 3200 3 © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Greenberg 2002, S. 179 5-8 Einführung in die Wirtschaftsinformatik WS 2008/2009 Daten aus mehreren Tabellen Daten aus mehreren Tabellen Fähigkeiten der Anweisung SELECT Projektion Daten abfragen - Verbinden von Tabellen Direkte Verknüpfung mehrerer Tabellen Auswahl Verknüpfung erfolgt in Ausgabeliste durch kartesisches Produkt (Kreuzprodukt) Grundprinzip Verknüpfung jeder Zeile einer Tabelle mit jeder Zeile der anderen Tabelle(n) Beispiel auf den folgenden Seiten - kartesisches Produkt aus Tabellen mitarbeiter x abteilung --> 50 Zeilen x 9 Zeilen --> 450 Zeilen --> 12 Spalten x 3 Spalten --> 15 Spalten Join - Verbinden von Tabellen Ergebnistabelle --> Ergebnis unsinnig --> logischer Zusammenhang nur zwischen einzelnen Datenfeldern Das formale Vorgehen beim Kreuzprodukt entspricht dem beim Vektorprodukt in der Mathematik. © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Daten aus mehreren Tabellen Daten aus mehreren Tabellen Kartesische Produkte Kreuzprodukt aus mehreren Tabellen - Struktur mitarbeiter Bildung eines kartesischen Produktes, wenn... ... alle Zeilen aus der ersten Tabelle mit allen Zeilen aus der zweiten Tabelle verknüpft werden ... eine Join-Bedingung fehlt ... eine Join-Bedingung ungültig ist PERS_NR NAME VORNAME ANREDE LEITER POSITION GEBURTSTAG EINSTELLUNG GEHALT ABT_NR PROJ_NR PROVISION Vermeidung kartesischer Produkte WHERE-Klausel enthält gültige Join-Bedingung Voraussetzung - Beziehung über Fremd- und Primärschlüssel bzw. Felder mit identischen Datentypen X abteilung ABT_NR ABT_NAME BETR_TEIL = Ergebnis der Abfrage PERS_NR NAME VORNAME ANREDE LEITER POSITION GEBURTSTAG EINSTELLUNG GEHALT ABT_NR PROJ_NR PROVISION ABT_NR ABT_NAME BETR_TEIL Bei einem Kreuzprodukt werden alle Spalten der betreffenden Tabellen miteinander "gekreuzt". © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam 9-12 Einführung in die Wirtschaftsinformatik WS 2008/2009 Daten aus mehreren Tabellen Daten aus mehreren Tabellen Kreuzprodukt aus mehreren Tabellen - Inhalt PERS_NR NAME 101004Kettler 101004Kettler 101004Kettler 101004Kettler 101004Kettler 450 101004Kettler 101004Kettler Zei101004Kettler len 101004Kettler 101012Michalke 101036Eckert VORNAME Gunter Gunter Gunter Gunter Gunter Gunter Gunter Gunter Gunter Max Hans Kreuzprodukt - Problemstellung Namensgleichheit ABT_NR PROJ_NR PROVISION ABT_NR ABT_NAME BETR_TEIL 90 130 10Geschäftsleitung B 90 130 20Vertrieb W 90 130 30Einkauf B 90 130 40Fertigung P 90 130 50Konstruktion P 90 130 60Produktion P 90 130 70Personal B 90 130 80Buchhaltung B 90 130 90Datenverarbeitung W 20 140 10Geschäftsleitung B 3100 40 SELECT pers_nr, name, abt_nr, abt_name FROM mitarbeiter, abteilung; Spalte "abt_nr" - keine Zuordnung möglich (willkürliche Zuordnung durch Oracle verhindert) B SELECT pers_nr, name, m.abt_nr, abt_name FROM mitarbeiter m, abteilung a; Zuordnung der Spalte "abt_nr" erfolgt aus Tabelle "mitarbeiter" C SELECT pers_nr, name, a.abt_nr, abt_name FROM mitarbeiter m, abteilung a; Zuordnung der Spalte "abt_nr" erfolgt aus Tabelle "abteilung" Angabe des Tabellennamens bei Spalten mit demselben Namen 90Datenverarbeitung W Die umrahmten Felder beinhalten Ergebnisse des Kreuzproduktes ohne logischen Zusammenhang A Problemstellung: Ausgabe der Ergebnistabelle --> Unterschied zwischen Beispiel 12 Spalten A , Ein kartesisches Produkt mehrerer Tabellen erzeugt (in der Regel) keine sinnvolle Ergebnistabelle. © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam B und C Ergebnistabellen (Ausgabe) für Beispiel B und C sind gleich ? © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam SQL - Abfragen und Joins Datenauswahl mit Joins Arten von Joins Datenauswahl mit Joins Oracle-spezifische Joins SQL: 1999-kompatible Joins Equi-Join Non-Equi-Join Outer-Join Self-Join Cross-Joins Natural-Joins USING-Klausel Vollständige (zweiseitige) Outer-Joins Beliebige Join-Bedingungen für Outer-Joins © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam 13-16 Greenberg 2002, S. 194 Einführung in die Wirtschaftsinformatik WS 2008/2009 Datenauswahl mit Joins Datenauswahl mit Joins Verknüpfung von Tabellen - Grundlagen, Syntax Voraussetzungen für Verknüpfung von Tabellen Daten aus mehreren Tabellen abfragen mit Join Join-Bedingung in der WHERE-Klausel Tabellenname steht vor Spaltennamen durch Punkt getrennt Tabelle 1 -> Fremdschlüssel = Primärschlüssel <- Tabelle 2 Notwendig - Identische Eigenschaften (Datentyp) der Spalten Sinnvoll - Identische Spaltennamen Syntax: tabellenname.spaltenname Kann - unterschiedliche Spaltennamen in den Tabellen Muss - dieselben Spaltennamen in verschiedenen Tabellen SELECT tabelle1.spalte, tabelle2.spalte FROM tabelle1, tabelle2 WHERE tabelle1.spalte1 = tabelle2.spalte2; © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam abteilung mitarbeiter ABT_NR ABT_NAME BETR_TEIL PERS_NR NAME VORNAME ANREDE LEITER POSITION GEBURTSTAG EINSTELLUNG GEHALT ABT_NR PROJ_NR PROVISION projekt PROJ_NR PROJ_NAME PROJ_LEITER © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Greenberg 2002, S. 195 Datenauswahl mit Joins Datenauswahl mit Joins Equi-Joins (einfache Joins, Inner-Joins, Inner-Equi-Joins) Tabelle "mitarbeiter" PERS_NR ABT_NR 101004 90 101012 20 101020 40 101021 50 101006 80 101018 30 101032 70 101026 40 101001 10 ..... ..... Fremdschlüssel Aufruf von Datensätzen über Equi-Joins SELECT ma.pers_nr, ma.name, ma.abt_nr, abt.abt_nr, abt.abt_name FROM mitarbeiter ma, abteilung abt WHERE ma.abt_nr = abt.abt_nr; Tabelle "abteilung" ABT_NR 10 20 30 40 50 60 70 80 90 ABT_NAME Geschäftsleitung Vertrieb Einkauf Fertigung Konstruktion Produktion Personal Buchhaltung Datenverarbeitung Primärschlüssel PERS_NR 101004 101012 101020 101021 101006 101018 101032 101026 101001 Beispiele für die Übereinstimung NAME Kettler Michalke Köhler Genz Grauer Hunger Schmiedel Schulze Schulze ABT_NR 90 20 40 50 80 30 70 40 10 ABT_NR 90 20 40 50 80 30 70 40 10 ABT_NAME Datenverarbeitung Vertrieb Fertigung Konstruktion Buchhaltung Einkauf Personal Fertigung Geschäftsleitung Die WHERE-Klausel verknüpft die Tabellen sinnvoll. © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Elmasri 2002, S. 251 17-20 Greenberg 2002, S. 197 Einführung in die Wirtschaftsinformatik WS 2008/2009 Datenauswahl mit Joins Datenauswahl mit Joins Übersicht: Mehrdeutige Spaltennamen Vereinfachung von Abfragen - Aliasnamen Zuordnung zu Tabellen Eindeutige Kennzeichnung von Spaltennamen bei mitarbeiter.name Vorkommen in mehreren Tabellen --> Einsatz von abteilung.name Präfixen . Kürzen Kürzen langer und zusammengesetzter Tabellennamen Beispiele FROM artikelstammdaten artikel FROM abteilung a, mitarbeiter m Zeitliche Anforderungen von Anfragen Performance-Verbesserung durch Angabe von Präfixen Verlängern . Eindeutigkeit der Zuordnung Unterscheidung der Spalten mit identischem Namen in Name AS unterschiedlichen Tabellen über Spalten-Aliasnamen mfg Mitarbeitername © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Lesbarmachen kryptischer oder missverständlicher Tabellenkürzel Beispiel FROM abt abteilung, ma mitarbeiter FROM btl betriebsteil © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Datenauswahl mit Joins Datenauswahl mit Joins Erweiterung der Suchkriterien Verknüpfung - mehrere Tabellen Einschränkungen von Datensätzen in der Abfrage Verwendung des Operators AND Zusätzliche Suchkriterien in WHERE-Klausel Verknüpfung von n Tabellen - mindestens n-1 Join-Bedingungen mitarbeiter SELECT ma.pers_nr, ma.name, ma.abt_nr, ma.position, abt.abt_name FROM mitarbeiter ma, abteilung abt WHERE ma.abt_nr = abt.abt_nr AND position = 'Sekretärin'; PERS_NR 101003 101047 101022 101038 NAME Metz Fuchs Heine Groß ABT_NR 10 90 30 40 POSITION Sekretärin Sekretärin Sekretärin Sekretärin PERS_NR ABT_NR Schulze 10 Lange 10 Metz 10 Kettler 90 Beyerke 80 Grauer 80 Engel 80 Büchner 60 Köhler 40 Genz 50 ….. ….. ABT_NAME Geschäftsleitung Datenverarbeitung Einkauf Fertigung abteilung ABT_NR 10 20 30 40 50 60 70 80 90 BETR_TEIL B W B P P P B B W ... WHERE m.abt_nr = a.abt_nr AND a.betr_teil = b.betr_teil; © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam 21-24 betriebsteil BETR_TEIL B P W PLZ 10247 14473 15745 BETR_ORT Berlin Potsdam Wildau Einführung in die Wirtschaftsinformatik WS 2008/2009 Datenauswahl mit Joins Datenauswahl mit Joins Non-Equi-Joins Aufruf eines Non-Equi-Joins SELECT m.name, m.gehalt, g.gratif FROM mitarbeiter m, gratifikation g WHERE m.gehalt BETWEEN g.mingehalt AND g.gehalt; Join-Bedingung, die nicht den Gleich-Operator verwendet Beispiel: Ungleichheitszeichen (<> oder !=) gratifikation mitarbeiter NAME Schulze Lange Metz Kettler Beyerke Grauer Engel Adler Göbel ….. GEHALT 4500 7600 4000 6500 4800 6600 5000 4500 4800 ….. MINGEHALT MAXGEHALT 0 2500 2501 3500 3501 5000 5001 7500 7501 19999 GRATIF NAME Schulze Lange Metz Kettler Beyerke Grauer Engel Adler Göbel ….. 65 55 45 35 25 Vergleich der einzelnen Gehälter in Tabelle "mitarbeiter" mit dem niedrigsten Gehalt und dem höchsten Gehalt der einzelnen Prozentsätze der Tabelle "gratifikation" © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam GEHALT 4500 7600 4000 6500 4800 6600 5000 4500 4800 ….. GRATIF 45 25 45 35 45 35 45 45 45 ….. Die Verwendung der Tabellen-Aliasnamen erfolgt oft aus Performance-Gründen. © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Greenberg 2002, S. 202 Datenauswahl mit Joins Datenauswahl mit Joins Outer-Joins Outer-Joins - Syntax RIGHT: Aufruf aller Zeilen der rechten Tabelle nach ON Anzeige der in direkter Beziehung stehenden Datensätze und Anzeige von Datensätzen, ohne direkten Bezug zu Datensätzen anderer Tabellen mitarbeiter abteilung ABT_NR 10 20 30 ..... 80 90 25 55 SELECT tabelle1.spalte, tabelle2.spalte, ... FROM tabelle1 RIGHT OUTER JOIN tabelle2 ON tabelle1.spalte = tabelle2.spalte; ABT_NAME Geschäftsleitung Vertrieb Einkauf ..... Buchhaltung Datenverarbeitung Marketing Forschung Abteilungen 25 und 55 noch ohne Mitarbeiter PERS_NR 101001 101002 101003 101012 101013 101014 101015 101044 ….. 101011 101046 101047 © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam NAME Schulze Lange Metz Michalke Probst Gast Engel Koch ….. Kern Adam Fuchs ABT_NR 10 10 10 20 20 20 20 ….. 90 90 90 LEFT: Aufruf aller Zeilen der linken Tabelle nach ON SELECT tabelle1.spalte, tabelle2.spalte, ... FROM tabelle1, LEFT OUTER JOIN tabelle2 ON tabelle1.spalte = tabelle2.spalte; noch keiner Abteilung zugeordnet Mit einem Right- bzw. Left-Outer-Join wird eine sogenannte rechte bzw. linke Inklusionsverknüpfung erstellt. © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Greenberg 2002, S. 204 25-28 Einführung in die Wirtschaftsinformatik WS 2008/2009 Datenauswahl mit Joins Datenauswahl mit Joins Aufruf eines Outer-Joins Übersicht: Inner- und Outer-Joins Inner-Join (Equi-Join) Verknüpfung zwischen zwei Tabellen - Rückgabe nur von übereinstimmenden Zeilen SELECT m.name, m.abt_nr, a.abt_name FROM mitarbeiter m RIGHT OUTER JOIN abteilung a ON m.abt_id = a.abt_id; NAME Schulze Lange Metz Kettler ABT_NR 10 10 10 90 ABT_NAME Geschäftsleitung Geschäftsleitung Geschäftsleitung Datenverarbeitung 80 80 80 90 Buchhaltung Buchhaltung Buchhaltung Datenverarbeitung Beyerke Grauer Engel Adler ….. ….. Left-Outer-Join (Right-Outer-Join) Verknüpfung zwischen zwei Tabellen - Rückgabe des Ergebnisses des Inner-Joins sowie Zeilen ohne Übereinstimmungen in der linken (bzw. rechten) Tabelle Vollständiger Outer-Join Verknüpfung zwischen zwei Tabellen - Rückgabe des Ergebnisses eines Inner-Joins sowie eines Left-Outer-Joins und Right-Outer-Joins ….. Marketing Forschung keine Daten in Tabelle "mitarbeiter" © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Kemper 2000, S. 90 f. © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Datenauswahl mit Joins Datenauswahl mit Joins Full-Outer-Join Self-Joins Tabelle wird mit sich selbst verbunden Zusätzliche Bezeichner/Alias-Namen in der FROM-Klausel zur Unterscheidung Kombination von Left-Outer-Join und Right-Outer-Join Anzeige aller in den verknüpften Basistabellen vorhandenen Zeilen SELECT m.name, m.abt_nr, a.abt_name FROM mitarbeiter m FULL OUTER JOIN abteilung a ON m.abt_nr = a.abt_nr; NAME Schulze Lange ..... Schulz-Niemeyer Schmidt ..... Fritzsche Junge Altermann ABT_NR ..... © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam PERS_NR 101001 101002 101003 101004 101005 101006 101007 101008 ….. ABT_NAME 10 Geschäftsleitung 10 Geschäftsleitung ..... 40 Fertigung ..... 40 40 50 25 55 mitarbeiter (leiter) mitarbeiter (angestellte) ..... Fertigung Fertigung Konstruktion Marketing Forschung NAME Schulze Lange Metz Kettler Beyerke Grauer Engel Adler ….. LEITER 1002 1002 1002 1006 1002 1006 1004 ….. PERS_NR 101001 101002 101003 101004 101005 101006 101007 101008 ….. NAME Schulze Lange Metz Kettler Beyerke Grauer Engel Adler ….. Ein Self-Join ermöglicht die Herstellung von Verbindungen innerhalb einer Tabelle mit einer einzigen Abfrage. © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Elmasri 2002, S.258 29-32 Einführung in die Wirtschaftsinformatik WS 2008/2009 Datenauswahl mit Joins Datenauswahl mit Joins Syntax für Self-Joins Kreuzprodukt aus zwei Tabellen SELECT tab1.spalte, ..., tab2.spalte FROM tabelle1 tab1, tabelle1 tab2 WHERE tab1.spalte1 = tab2.spalte1; Entspricht kartesischem Produkt Verbinden mehrerer Tabellen ohne Verknüpfungskriterium Liefert meist sinnlose Ergebnisse Wer ist der/die Vorgesetzte von Mitarbeiter x? SELECT angestellte.name || ' ist Untergebene/r von ' || leiter.name FROM mitarbeiter angestellte, mitarbeiter leiter WHERE angestellte.pers_nr = leiter.pers_nr AND angestellte.name = 'Beyerke'; Vorteil für Test von Datenbanken - Einfaches Erzeugen großer Datenmengen SELECT spalte1, spalte2, ... FROM tabelle1 CROSS JOIN tabelle2; ANGESTELLTE.NAME ist Untergebene/r von LEITER.NAME Beyerke ist Untergebene/r von Grauer entspricht der Syntax SELECT spalte1, spalte2, ... FROM tabelle1, tabelle2; © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Datenauswahl mit Joins Datenauswahl mit Joins Natural-Join Datensatzaufruf über Natural-Joins NATURAL JOIN-Klausel - basiert auf allen Spalten mit demselben Namen in beiden Tabellen SELECT abt_nr, abt_name, betr_teil, plz, betr_ort FROM abteilung NATURAL JOIN betriebsteil; Auswahl der Zeilen mit übereinstimmenden Werten in allen gemeinsamen Spalten Rückgabe einer Fehlermeldung bei Namensgleichheit aber unterschiedlichen Datentypen der Spalten ABT_NR 10 20 30 40 50 60 70 80 90 25 55 Verknüpfung über NATURAL JOIN - automatisches Einbinden aller Spalten mit gleichen Namen und gleichem Datentyp Einsatz eines Präfix vor verknüpften Spaltennamen nicht zulässig Fehlermeldung © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam ABT_NAME Geschäftsleitung Vertrieb Einkauf Fertigung Konstruktion Produktion Personal Buchhaltung Datenverarbeitung Marketing Forschung BETR_TEIL B W B P P P B B W W P © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam Greenberg 2002, S. 212 33-36 PLZ 10247 15745 10247 14473 14473 14473 10247 10247 15745 15745 14473 BERTR_ORT Berlin Wildau Berlin Potsdam Potsdam Potsdam Berlin Berlin Wildau Wildau Potsdam Greenberg 2002, S. 213 Einführung in die Wirtschaftsinformatik WS 2008/2009 Datenauswahl mit Joins SQL - Abfragen und Joins Selektion, Projektion und Join - Fazit Kontrollfragen Zusammenfassung SELECT mitarbeiter.name, abteilung.name Wann werden CASE-Ausdrücke in SQL-Anweisungen verwendet? Nach der Normalisierung sind ursprüngliche Tabellen oftmals in mehrere neue Tabellen aufgeteilt. Mit welcher Funktion können die Daten daraus wieder miteinander verbunden werden? Unter welchen Bedingungen wird ein kartesisches Produkt erzeugt? Was bewirkt die Verwendung eines LEFT OUTER JOIN in einer Anweisung? Projektion FROM mitarbeiter, abteilung Join* WHERE mitarbeiter.abt_nr = abteilung.abt_nr AND abteilung.abt_nr = XXX ** Selektion * Verbund (Kreuz-, Kartesisches Produkt) ** Konkreter Wert © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam SQL - Abfragen und Joins Literatur Kemper, A./Eickler, A.: Datenbanksysteme; 6. Auflage, 2006, Oldenbourg Verlag Elmazri, R./Navathe, S. B.: Grundlagen von Datenbanksystemen; 3. Auflage, 2002, Addison-Wesley Greenberg, N./Nathan, P: Professioneller Einstieg in Oracle9i SQL Band 1; 2002, Oracle © Prof. Dr.-Ing. Norbert Gronau, Dipl.-Ing. Andreas Gäbler, Universität Potsdam 37-40