37
Auf einen Blick 1 Vorwort ........................................................................ 9 2 Einleitung..................................................................... 11 3 Datenbankentwurf ....................................................... 17 4 Datenbankdefinition .................................................... 33 5 Datensätze einfügen (INSERT INTO)............................ 83 6 Daten abfragen (SELECT) ............................................. 87 7 Daten aus mehreren Tabelle abfragen (JOIN) .............. 129 8 Unterabfragen (Sub-Selects) ........................................ 141 9 Datensätze ändern (UPDATE) ...................................... 153 10 Datensätze löschen (DELETE FROM) ........................... 159 11 Datensichten................................................................ 165 12 Transaktionen .............................................................. 175 13 Routinen und Trigger ................................................... 185 14 Zeichensätze und Lokalisierung ................................... 195 15 Benutzer, Privilegien und Sicherheit ............................ 201 16 Lösungen zu den Aufgaben .......................................... 209 17 Beispieldatenbank........................................................ 231 18 SQL-Syntax gängiger Datenbanken ............................. 239 www.galileocomputing.de - Einstieg in SQL - Leseprobe

Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

Embed Size (px)

Citation preview

Page 1: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

Auf einen Blick

1 Vorwort........................................................................ 9

2 Einleitung..................................................................... 11

3 Datenbankentwurf ....................................................... 17

4 Datenbankdefinition .................................................... 33

5 Datensätze einfügen (INSERT INTO)............................ 83

6 Daten abfragen (SELECT) ............................................. 87

7 Daten aus mehreren Tabelle abfragen (JOIN) .............. 129

8 Unterabfragen (Sub-Selects) ........................................ 141

9 Datensätze ändern (UPDATE) ...................................... 153

10 Datensätze löschen (DELETE FROM)........................... 159

11 Datensichten................................................................ 165

12 Transaktionen .............................................................. 175

13 Routinen und Trigger ................................................... 185

14 Zeichensätze und Lokalisierung ................................... 195

15 Benutzer, Privilegien und Sicherheit ............................ 201

16 Lösungen zu den Aufgaben .......................................... 209

17 Beispieldatenbank........................................................ 231

18 SQL-Syntax gängiger Datenbanken ............................. 239

www.galileocomputing.de - Einstieg in SQL - Leseprobe

Page 2: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

I

www.galileocomputing.de - Einstieg in SQL - Leseprobe

2.1 Zielsetzung und Buchaufbau ................................................................. 11

2.2 Das durchgehende Datenbankbeispiel ................................................. 11

2.3 Die SQL-Übungen ................................................................................. 13

2.4 Übungssoftware SQL-Teacher ............................................................... 13

2.5 Notationen ............................................................................................ 16

3.1 Was ist SQL? ......................................................................................... 17

3.2 Phasen der Datenbankentwicklung ...................................................... 193.2.1 Datenmodell ............................................................................ 203.2.2 ER-Modell ................................................................................ 213.2.3 Relationales Datenmodell ......................................................... 233.2.4 Primärschlüssel ......................................................................... 243.2.5 Fremdschlüssel und referenzielle Integrität ............................... 243.2.6 Optimierung des Datenmodells (Normalisierung) ..................... 26

4.1 Einführung ............................................................................................ 33

4.2 Tabellen und Datentypen ...................................................................... 354.2.1 Text ......................................................................................... 374.2.2 Zahlen ...................................................................................... 394.2.3 Zeiten ...................................................................................... 414.2.4 Bits .......................................................................................... 434.2.5 Logische Werte ........................................................................ 44

4.3 Tabellen anlegen (CREATE TABLE) ........................................................ 44

4.4 Integritätsregeln ................................................................................... 454.4.1 Primärschlüssel (PRIMARY KEY) ............................................... 464.4.2 Fremdschlüssel (FOREIGN KEY) ............................................... 494.4.3 Doppelte Werte verhindern (UNIQUE) .................................... 55

nhalt

1 Vorwort 9

2 Einleitung 11

3 Datenbankentwurf 17

4 Datenbankdefinition 33

Inhalt 5

Page 3: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

6

www.galileocomputing.de - Einstieg in SQL - Leseprobe

4.4.4 Nur bestimmte Werte zulassen (CHECK) ................................. 564.4.5 Standardwerte (DEFAULT) ....................................................... 61

4.5 Domänen .............................................................................................. 634.5.1 Domänen erstellen (CREATE DOMAIN) ................................... 634.5.2 Domänendefinition ändern (ALTER DOMAIN) ......................... 684.5.3 Domänendefinition löschen (DROP DOMAIN) ........................ 70

4.6 Tabellendefinitionen verändern (ALTER TABLE) ................................... 72

4.7 Tabellen löschen (DROP TABLE) ........................................................... 76

4.8 Indices .................................................................................................. 784.8.1 Was sind Indices? .................................................................... 784.8.2 Index bei der Tabellenanlage definieren ................................... 794.8.3 Index nach Tabellendefinition definieren (CREATE INDEX) ....... 804.8.4 Wann sollte ein Index angelegt werden? .................................. 814.8.5 Index löschen (DROP INDEX) .................................................. 82

6.1 Aufbau des SELECT-Befehls .................................................................. 896.1.1 Alle Spalten einer Tabelle ausgeben ......................................... 906.1.2 Spalten auswählen ................................................................... 91

6.2 SELECT mit Bedingung (WHERE) ......................................................... 936.2.1 Vergleichsoperatoren ............................................................... 97

6.3 Ausgabe sortieren (ORDER BY) ............................................................ 99

6.4 SELECT mit Gruppenbildung (GROUP BY) ............................................ 104

6.5 Mengenoperationen (UNION, INTERSECT, EXCEPT/MINUS) ............... 108

6.6 Funktionen für SELECT-Befehle ............................................................ 1136.6.1 Aggregatfunktionen ................................................................. 1136.6.2 Mathematische Funktionen ..................................................... 1186.6.3 Datumsfunktionen ................................................................... 1226.6.4 Typumwandlung ...................................................................... 1246.6.5 Zeichenkettenfunktionen ......................................................... 124

6.7 NULL-Werte in Abfragen ...................................................................... 127

7.1 Relationenalgebra ................................................................................. 132

7.2 Der innere Verbund (INNER JOIN) ....................................................... 1327.2.1 Varianten des INNER JOIN ...................................................... 135

7.3 Der äußere Verbund (LEFT JOIN/RIGHT JOIN) ..................................... 138

5 Datensätze einfügen (INSERT INTO) 83

6 Daten abfragen (SELECT) 87

7 Daten aus mehreren Tabelle abfragen (JOIN) 129

Inhalt

Page 4: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

8.1 Unterabfragen, die eine Zeile zurückgeben ........................................... 143

8.2 Unterabfragen, die mehr als eine Zeile zurückgeben ............................ 146

8.3 Regeln für die Verwendung von Unterabfragen .................................... 151

9.1 Unterabfragen in UPDATE-Befehlen ..................................................... 156

10.1 Unterabfragen in DELETE-Befehlen ...................................................... 162

11.1 Datensicht erstellen (CREATE VIEW) .................................................... 165

11.2 Verhalten von Datensichten beim Aktualisieren ................................... 168

11.3 Aktualisieren mit Prüfoption ................................................................. 171

11.4 Views ändern und löschen (DROP VIEW) ............................................. 172

12.1 Eigenschaften von Transaktionen .......................................................... 17612.1.1 Transaktionen mit SQL definieren ............................................. 179

12.2 Isolationsebenen bei Transaktionen ...................................................... 182

13.1 Funktionen und Prozeduren .................................................................. 18513.1.1 Prozeduren und Funktionen löschen ........................................ 189

13.2 Trigger (CREATE TRIGGER) ................................................................... 189

8 Unterabfragen (Sub-Selects) 141

9 Datensätze ändern (UPDATE) 153

10 Datensätze löschen (DELETE FROM) 159

11 Datensichten 165

12 Transaktionen 175

13 Routinen und Trigger 185

14 Zeichensätze und Lokalisierung 195

Inhalt 7

Page 5: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

8

www.galileocomputing.de - Einstieg in SQL - Leseprobe

15.1 Überblick .............................................................................................. 201

15.2 Benutzer und Rollen ............................................................................. 202

15.3 Benutzerprivilegien einrichten (GRANT) ............................................... 203

15.4 Benutzerrechte und Views .................................................................... 206

15.5 Benutzerprivilegien löschen (REVOKE) ................................................. 206

18.1 Die ausgewählten Datenbanken ........................................................... 239

18.2 Datentypen ........................................................................................... 239

18.3 Tabellen anlegen, ändern, löschen ........................................................ 242

18.4 Domänen anlegen, ändern, löschen ...................................................... 248

18.5 Indices anlegen, ändern, löschen .......................................................... 249

18.6 Datensätze einfügen, ändern, löschen .................................................. 251

18.7 Daten abfragen (SELECT) ...................................................................... 253

18.8 Datensichten (VIEWS) .......................................................................... 258

18.9 Transaktionen ....................................................................................... 259

18.10 Prozeduren/Funktionen/Trigger ............................................................ 260

18.11 Benutzer, Privilegien, Sicherheit ........................................................... 264

15 Benutzer, Privilegien und Sicherheit 201

16 Lösungen zu den Aufgaben 209

17 Beispieldatenbank 231

18 SQL-Syntax gängiger Datenbanken 239

Index 267

Inhalt

Page 6: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

1 Vorwort

Datenbanken bilden die Grundlage nahezu aller Informa-tionssysteme. Und wer Datenbank sagt, muss SQL sprechen. Dieses Buch unterstützt Sie dabei, den Sprachumfang von SQL zu verstehen, und vermittelt Ihnen das »Sprachgefühl«, mit dem Sie das Instrumentarium SQL richtig nutzen können.

Wenn man alle Datenbanken gleichzeitig abschaltete, würde auch auto-matisch ein Großteil des wirtschaftlichen Lebens zusammenbrechen.Inzwischen hängen die meisten Wirtschaftsprozesse direkt oder indi-rekt mit der Speicherung von Informationen in Datenbanken zusam-men.

Ohne Datenbanken kann man heute praktisch kein Geld vom Geld-automaten abheben, keine Reise buchen und kein Buch bei der Büche-rei ausleihen.

Offensichtlich wird die Abhängigkeit von Datenbanken im E-Com-merce. eBay, Amazon oder Otto-Online funktionieren ohne Daten-banken, in denen praktisch die gesamte Datenhaltung von der Produkt-information bis zur Bestellabwicklung gespeichert wird.

Weitaus am häufigsten sind dabei relationale Datenbanken vertreten,deren Grundprinzip es ist, die Daten in Tabellen mit einzelnen Daten-sätzen und Feldern zu speichern.

Die verbreitesten Produkte wie Oracle, DB2 von IBM, der SQL Servervon Microsoft und MySQL gehören in diese Kategorie der relationalenDatenbanken. Relationale Datenbanken existieren bereits seit über 20Jahren. Sie gehören damit zu den Technologien in der Informations-technologie, die sich dauerhaft durchgesetzt haben.

Und alle diese relationalen Datenbanken verwenden mit der StructuredQuery Language (SQL) eine in großen Teilen standardisierte Sprachezur Speicherung, Abfrage und Veränderung der Informationen, die inder Datenbank gespeichert sind. Wer also SQL beherrscht, ist auch inder Lage, diese heute so wichtige Datenverwaltung zu beherrschen.

Wer SQL erlernen möchte, hat die Aufgabe vor sich, den Sprachumfangvon SQL zu verstehen und anwenden zu können. Im Vergleich zu ande-ren Programmiersprachen wie Basic, Pascal oder C hat aber SQL einen

9Vorwort

Page 7: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

geringeren Sprachumfang. Die Hürde, SQL zu beherrschen, ist alsogeringer als bei Programmiersprachen.

Aber wie in anderen Lebensbereichen auch, macht bei SQL auch nurdie Übung den Meister.

Dieses Buch soll Ihnen eine Hilfestellung sein, SQL zu verstehen, zuüben und anzuwenden. Aus diesem Grund folgen die einzelnen Kapitelfolgendem Aufbau:

� Erläuterung des SQL-Befehls: Im ersten Schritt erfolgt die Erläute-rung des SQL-Befehls.

� Einführendes Beispiel: In einem Einführungsbeispiel können Sie denSQL-Befehl anhand seines praktischen Einsatzes kennenlernen.

� Syntax des SQL-Befehls: Nachfolgend wird die Syntax des Befehls ge-nauer erläutert.

� Weiterführende Beispiele: Ein oder mehrere weiterführende Bei-spiele sollen Ihnen den Umgang mit dem SQL-Befehl weiter erläu-tern und vertiefen.

� Übungen: Anhand von Übungsbeispielen können Sie eigenständigdie Befehle üben.

Damit Sie SQL auch praktisch üben können, liegt diesem Buch eineÜbungssoftware bei, die einfach zu installieren ist. Diese Übungssoft-ware enthält eine komplette SQL-Engine, mit der Sie alle Befehle nach-vollziehen, wiederholen und üben können. Bei der SQL-Engine han-delt es sich um die Embedded Version von FireBird 1.5.

FireBird ist der Open Source-Ableger von Borland InterBase und bietetdadurch zwei Vorteile: Alle Befehle orientieren sich sehr nahe am SQL-Standard, und die Datenbank ist sehr bewährt.

Vorwort10

Page 8: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

2 Einleitung

In diesem Kapitel erhalten Sie einen Überblick über die Inhalte dieses Buches. Dabei wird auch das durchgehende Datenbankbeispiel und die eigens für das Buch entwickelte Übungssoftware SQL-Teacher vorgestellt.

2.1 Zielsetzung und Buchaufbau

Dieses Buch ist für Leser gedacht, die den Befehlsumfang von SQLerlernen und üben wollen. Das Buch richtet sich sowohl an Anfängerals auch an Leser mit SQL-Erfahrung. Für den Anfänger sind alle Be-fehle mit einem einfachen Einführungsbeispiel erläutert, um möglichstschnell den jeweiligen Befehl zu verstehen. Für Leser mit SQL-Erfah-rung werden die Inhalte durch weiterführende Beispiele vertieft.

Die SQL-Befehle sind in der Reihenfolge Ihrer der Besprechung am Ab-lauf der Arbeit mit einer Datenbank orientiert. Im ersten Schritt wer-den die Datenbankgrundlagen erläutert, damit Sie verstehen, wieDatenbanken entworfen und Daten in der Datenbank gespeichert wer-den. Anschließend lernen Sie die Befehle kennen, um Daten zu spei-chern oder zu verändern.

Die folgenden Kapitel bringen Ihnen die umfangreichen Möglichkeitennahe, Daten aus der Datenbank zu selektieren. Hier werden vom einfa-chen Selektionsbefehl bis zu komplexen Join-Abfragen und Unterabfra-gen alle notwendigen Befehle erklärt und anhand von Beispielen ge-zeigt. Anschließend folgen die fortgeschrittenen Datenbanktechnikenwie Transaktionen, Prozeduren und Trigger.

Um Ihnen einen möglichst nahen Praxisbezug zu liefern, haben wir imAnhang einen Syntaxvergleich zwischen den Datenbanken Inter-Base/FireBird, DB2, MySQL, MS Access, MaxDB, Oracle und SQL Ser-ver aufgelistet. Sie können so sehr schnell die Inhalte dieses Buches aufentsprechende Datenbanksysteme übertragen.

2.2 Das durchgehende Datenbankbeispiel

Um Ihnen den Inhalt dieses Buches möglichst gut zu vermitteln, sindnahezu alle Beispiele und Übungen an einem durchgängigen Daten-bankbeispiel erläutert. So können Sie die verschiedenen Befehle undBeispiele leichter nachvollziehen, weil sich diese immer wieder auf die

11Zielsetzung und Buchaufbau

Page 9: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

gleiche Datenstruktur beziehen. Die Datenbank unseres Buchbeispielsbildet ein Vertriebsunternehmen für Hard- und Software nach. DasDatenmodell sieht dabei wie in Abbildung 2.1 aus.

Abbildung 2.1 Datenmodell der Beispieldatenbank

Im Überblick verfügt die Beispieldatenbank über folgende Strukturen:

� In der Tabelle mitarbeiter werden alle relevanten Daten wieName, Adresse und Kontaktdaten zu den Mitarbeitern gespeichert.

� Jeder Mitarbeiter gehört einer Abteilung an. Diese Abteilungen ge-ben mit Vertrieb, Support, Rechnungswesen, Einkauf und Verwal-tung typische Strukturen eines Unternehmens wieder und sind inder Tabelle abteilung gespeichert.

� Unser Beispielunternehmen vertreibt Hard- und Software. DieseArtikel werden in der Tabelle artikel gespeichert. Jeder Artikel ge-hört einer Kategorie an (z.B. Monitor, Scanner etc.). Diese verschie-denen Kategorien werden in der Tabelle kategorie gespeichert.

� Der Vertrieb erfolgt direkt an Kunden, deren Daten in der Tabellekunde verwaltet werden.

� Sobald ein Kunde Artikel bestellt, wird eine entsprechende Bestel-lung erzeugt. Bestellungen werden einzeln mit Bestelldatum undBestellnummer in der Tabelle bestellung gespeichert.

� Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelleposten), die sich aus Artikeln zusammensetzen (Tabelle artikel).

Einleitung12

Page 10: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

2.3 Die SQL-Übungen

Am Ende eines Kapitels finden Sie Übungsbeispiele. Hier können Sieden Inhalt des jeweiligen Kapitels noch einmal anhand von Fragestel-lungen wiederholen und insbesondere überprüfen, ob Sie die Befehleauch eigenständig nachvollziehen können. Die Übungen sind so aufge-baut, dass Sie diese mit den Informationen des Kapitels lösen können.Die Lösungen zu den Aufgaben finden Sie in Kapitel 16.

2.4 Übungssoftware SQL-Teacher

Speziell für dieses Buch stellen wir Ihnen mit SQL-Teacher eineÜbungssoftware zur Verfügung. Sie können mit dieser Übungssoftwarenahezu alle Beispiele und Übungen dieses Buches nachvollziehen. Indie Übungssoftware ist eine komplette SQL-Datenbank integriert. Siehaben also so die Möglichkeit, SQL kennen zu lernen, ohne sonst einDatenbanksystem installiert zu haben.

Wenn Sie im Buch am Rand den Hinweis SQL-Teacher sehen, handeltes sich um Schritt-für-Schritt-Beispiele, die Sie mit der Übungssoftwarenachvollziehen können.

Systemvoraussetzung ist ein Windows-Betriebssystem. Zum Installierenführen Sie bitte das Installationsprogramm aus (sqlteacher_setup.exe).

Abbildung 2.2 Die Buchsoftware

13Die SQL-Übungen

Page 11: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

Die Übungssoftware hat zwei Tab-Reiter im Hauptfenster. Unter Daten-bank haben Sie die Möglichkeit, SQL-Befehle einzugeben und auszu-probieren. Sie geben den gewünschten Befehl in das Eingabefenster un-ter Datenbank ein und führen den Befehl mit STRG+R oder dementsprechenden Menübutton aus. Im unteren Fenster der rechten Pro-grammseite werden die Ergebnisse des ausgeführten Befehls angezeigt,soweit der Befehl Informationen zurückgibt (z.B. Selektionsbefehle).Über den Button DDL (für Data Definition Language) können Sie sichdie Definition der einzelnen Datenbankobjekte (z.B. Tabellen) ansehen.

Auf der linken Seite sehen Sie die Datenbankstruktur. Die Beispiel-datenbank ist bereits in die Übungssoftware integriert, so dass Sie na-hezu alle Beispiele gleich ausprobieren können, ohne Tabellen anlegenund Daten speichern zu müssen.

Um Ihnen die Eingabe von SQL-Befehlen zu erleichtern steht einAbfrage-Assistent zur Verfügung. Sie finden diesen unter dem Tab-ReiterAbfrage-Assistent. Sie ziehen die gewünschten Tabellen mit gedrückterlinker Maustaste aus dem linken Menübaum in das Fenster. Sie könnenanschließend den Selektionsbefehl einfach zusammenbauen. Felderwählen Sie durch Anklicken der Checkbox links neben dem Feldnamenaus. Im unteren Teil des Fensters können Selektionsbedingungen(WHERE), Gruppierungen (GROUP BY) und Sortierungen (ORDER BY) vorge-nommen werden. Verknüpfungen zwischen Tabellen erreichen Siedurch Verbinden der Zielfelder mit gedrückter linker Maustaste. Um ei-nen SQL-Befehl auszuführen, klicken Sie auf den Button SQL einfügen.Der Befehl wird dann in das Abfragefenster übernommen.

Unter SQL-Erklärungen finden Sie die wichtigsten Befehle und Inhaltedes Buches in Kurzform. Sie können also dort schnell nachschlagen,falls Ihnen ein Befehl entfallen ist. Sie können auch Befehle direkt überdie Zwischenablage kopieren, dann in den Tab-Reiter Datenbankwechseln, den Befehl dort einfügen und dann ausführen.

Die Übungssoftware basiert auf auf dem Embedded FireBird SQL-Ser-ver. FireBird ist der Open-Source-Ableger von Borlands InterBase. Fire-Bird gehört zu den Datenbanken, deren SQL-Befehlsumfang nahe amANSI-SQL-Standard angelehnt ist. Sie haben dadurch mehrere Vorteile:

� Die Software ist leicht zu installieren. Die aufwändige Installation ei-nes kompletten Datenbankservers entfällt.

� Die Befehle und Übungen können an einem ausgereiften und markt-gängigen Datenbanksystem erlernt und geübt werden.

Einleitung14

Page 12: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

� Alle erlernten Inhalte lassen sich leicht auf andere Datenbankserverübertragen.

Abbildung 2.3 Abfrage-Assistent

Wenn Sie weitere Informationen zu FireBird suchen, können Sie unterwww.firebirdsql.org oder www.ibphoenix.com entsprechende Informatio-nen abrufen.

Alle Daten der Beispieldatenbank werden in der Datei teacher.gdb imUnterverzeichnis /data des Installationsverzeichnisses gespeichert. Imgleichen Verzeichnis finden Sie eine Kopie der Datenbank mit dem Na-men teacher_org.gdb. Falls Sie den ursprünglichen, von uns eingerich-teten Datenbestand der Übungsdatenbank wieder herstellen wollen,gehen Sie wie folgt vor:

� Schließen Sie den SQL-Teacher.

� Wechseln Sie in das Datenverzeichnis der Übungssoftware (in derRegel c:\programm\sqlteacher\data).

� Löschen Sie die Datei teacher.gdb.

� Kopieren Sie die Datei teacher_org.gdb und benennen Sie die Kopiein teacher.gdb um.

� Starten Sie den SQL-Teacher wieder. Sie haben jetzt den Ausgangs-datenbestand, den wir mitgeliefert haben.

15Übungssoftware SQL-Teacher

Page 13: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

2.5 Notationen

Im Folgenden sind die in diesem Buch verwendeten Notationen aufge-listet.

tabellenname

Bezeichnet eine Tabelle mit variablen Namen.

spaltenname

Bezeichnet einen Spaltennamen mit variablen Namen. Wenn mehrereSpaltennamen in der Syntax benötigt werden, werden diese mit einemIndex versehen, z.B. spaltenname1, spaltenname2 usw. Es handeltsich dann um mehrere verschiedene Spaltennamen.

spaltenliste

Bezeichnet einen oder mehrere variable Spaltennamen in der Formspaltenname1, spaltenname2, spaltenname3 usw. Währendspaltenname nur einen bestimmten Spaltennamen benennt, werdenmit spaltenliste in der Regel mehrere aneinander gereihte Spalten,die mit Komma getrennt werden, bezeichnet.

[...]

Bezeichnet optionale Befehlsbestandteile.

{ ... | ... }

Bezeichnet alternative Befehlsbestandteile.

SQL kennt als Abschluss eines Befehls das Semikolon.

Einleitung16

Page 14: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

SELECT name, vorname, strasse, plz, ortFROM kunde k;

SELECT DISTINCT plz FROM kunde;

Aliase auf Spaltennamen

Aliase können nicht nur auf Tabellen, sondern für Spaltennamen ver-wendet werden. Dies ist praktisch, wenn Sie bei der Ausgabe das Feldumbenennen wollen. Dies wird vor allem dann der Fall sein, wenn SieFelder bei der Ausgabe durch Funktionen erzeugen. Solche Funktionenwerden in Abschnitt 6.6 besprochen. Das folgende Beispiel benenntdie Spalte name bei der Ausgabe in Nachname um.

SELECT name AS Nachname FROM kunde;

DISTINCTSie können durch die Angabe von DISTINCT identische Zeilen in derAusgabe zusammenfassen. Zwei Zeilen sind dann identisch, wenn siein allen Spalten denselben Wert besitzen. Das folgende Beispiel fasstalle gleichen Postleitzahlen aus der Tabelle kunde zusammen:

Übungen

Übung 6.1Fragen Sie aus der Tabelle kunde die Kundennummer (kundennr) unddie Zahlungsart (zahlungsart) ab.

Übung 6.2Listen Sie aus der Tabelle artikel die Bezeichnungen und den Preisaus.

Übung 6.3Suchen Sie aus der Tabelle mitarbeiter die Namen und die jeweiligeAbteilungsnummer heraus.

Übung 6.4Lassen Sie sich die Namen der Hersteller aus der gleichnamigen Tabelleausgeben.

6.2 SELECT mit Bedingung (WHERE)

Sie werden auch nicht immer alle Datensätze einer Tabelle benötigen.Im Einführungsbeispiel wurden zuerst die Namen und Vornamen allerKunden angezeigt. Dann haben Sie die Suche auf die Kunden aus Bonneingeschränkt.

Der Befehl bestand zuerst nur aus zwei Zeilen, dem Sie eine weiterehinzugefügt haben.

SELECT name, vornameFROM kundeWHERE ort = 'Bonn';

93SELECT mit Bedingung (WHERE)

Page 15: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

SQL-Syntax Die Einschränkungen werden an dritter Stelle aufgelistet.

SELECT spaltenlisteFROM tabellennameWHERE auswahlbedingungen;

Das WHERE ist immer das nächste Element nach FROM.

Verschiedene Anforderungen können durch AND beziehungsweise ORverknüpft werden. AND (und) sorgt dafür, dass alle so miteinander ver-knüpften Anweisungen zutreffen müssen. OR (oder) achtet darauf, dasseine der Bedingungen zutrifft. Eine Bedingung kann mit NOT verneintwerden, also wird darauf geachtet, dass sie nicht zutrifft, damit diebetreffenden Daten ausgegeben werden.

Sie können in der Bedingung auf exakte Übereinstimmung oder aufMindest- beziehungsweise Höchstwerte prüfen. Dabei verwenden Siedie Vergleichsoperatoren (=, >, < und ihre Kombinationen) oder Funk-tionen, die in den Abschnitten 6.2.1 und 6.6 noch genauer vorgestelltwerden. Sie können natürlich auch die Vergleichsoperatoren mit Funk-tionen kombinieren.

WeiterführendesBeispiel

Nach weiteren Überlegungen möchte man auch die Kunden in Ham-burg erreichen. Die WHERE-Bedingung muss dafür angepasst werden.Um Kunden sowohl aus Hamburg als auch aus Bonn anzuzeigen, wer-den beide Werte mit OR verknüpft.

SELECT name, vorname, strasse, plz, ortFROM kundeWHERE ort = 'Hamburg' OR ort = 'Bonn';

SQL-Teacher Vollziehen Sie das Beispiel in der beiliegenden Datenbank nach.

� Geben Sie den SELECT-Befehl ein, und führen Sie ihn aus.

In der Ausgabe werden die gesuchten Daten aller Kunden, die inHamburg oder Bonn wohnen, ausgegeben.

Da die Firma demnächst 25 Jahre besteht, will die Geschäftsleitungwissen, ob es Kunden gibt, die genauso wie der Firmengründer heißen,um ihnen werbewirksam einen Geschenkgutschein zu übersenden.

In diesem Fall werden die Bedingungen nach WHERE mit AND ver-knüpft, weil sie beide gleichzeitig zutreffen müssen.

SELECT name, vorname, strasse, plz, ortFROM kundeWHERE name = 'Kaufmann' AND vorname = 'Andreas';

Daten abfragen (SELECT)94

Page 16: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Abbildung 6.6 Die benötigten Kundendaten bei einer Ausdehnung der Werbeaktion von Bonn auf Hamburg

SQL-TeacherVollziehen Sie das Beispiel in der beiliegenden Datenbank nach.

� Geben Sie den SELECT-Befehl ein, und führen Sie ihn aus.

Ihnen werden die Kunden aufgelistet, bei denen die Bedingungzutrifft. Sie heißen mit Vornamen Andreas und mit NachnamenKaufmann.

Abbildung 6.7 Kunden mit dem Vor- und Familiennamen des Firmengründers

95SELECT mit Bedingung (WHERE)

Page 17: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

Die Beispielfirma will eine Werbeaktion per E-Mail starten und dabeinur das regionale begrenzte Angebot eines Kölner Kaufhauses bewer-ben. Die Selektion der Kunden soll folgendermaßen erfolgen:

� Es sollen nur Kunden selektiert werden, die über eine gespeicherteE-Mail-Adresse verfügen.

� Es sollen alle Kunden selektiert werden, deren Postleitzahl mit 50beginnt.

Um diese Selektion zu bewerkstelligen, muss überprüft werden, ob imFeld email ein Eintrag vorhanden ist. Hier könnte man im einfachstenFall prüfen, ob das Feld einen Eintrag enthält, also NOT NULL ist. DieSelektion der Postleitzahlen erfolgt, indem man die ersten beiden Zei-chen der Postleitzahl prüft. Der Befehl lautet hierfür bei FireBird unddamit bei unserer Übungsdatenbank STARTING WITH. Man prüft alsoauf den Beginn der Zeichenkette.

Der SQL-Befehl lautet wie folgt:

SELECT name, vorname, email, strasse, plz, ortFROM kundeWHERE email IS NOT NULLAND plz STARTING WITH '50';

SQL-Teacher Vollziehen Sie das Beispiel in der beiliegenden Datenbank nach.

� Geben Sie den Befehl ein, und führen Sie ihn aus.

In der Ausgabe werden die abgefragten Daten aller Kunden mitE-Mail-Eintrag und einer Postleitzahl, die mit 50 beginnt, aufgeführt.

Übungen

Übung 6.5 Listen Sie alle Artikel der Tabelle artikel auf, deren Nettopreis höherals 100 Euro liegt.

Übung 6.6 Listen Sie alle Mitarbeiter auf, die in der Abteilung 2 beschäftigt sind.

Übung 6.7 Listen Sie alle Artikel auf, die zur Kategorie Grafikkarten (Kategorie-nummer 3) gehören.

Übung 6.8 Verbinden Sie beide Werbeaktionen der Beispielfirma. Beachten Sie,dass Sie die jeweilige Auswahl in Klammern setzen müssen.

Übung 6.9 Geben Sie alle Kunden aus, deren Kundennummer größer als 50 ist unddie nicht in Köln wohnen.

Daten abfragen (SELECT)96

Page 18: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Abbildung 6.8 Die relevanten Daten der Kunden mit E-Mail-Eintrag und einer Post-leitzahl, die mit 50 beginnt

6.2.1 Vergleichsoperatoren

In der CHECK-Klausel beim Anlegen von Tabellen oder einer Domänen-definition konnten Sie schon Vergleiche durchführen. Vergleichsopera-toren werden Sie auch in Abfragen insbesondere in der WHERE-Bedin-gung relativ häufig benötigen.

Mathematische Operatoren wie gleich (=), größer als (>) und kleiner als(<) mit deren Kombinationen (>= und <=) sowie ungleich (<> oder !=)sind Ihnen wahrscheinlich geläufig. Diese Operatoren können in derWHERE-Bedingung verwendet werden. Wenn Sie z.B. alle Mitarbeiterselektieren wollen, die einen höheren Betrag als 3000 verdienen, lautetder Befehl:

SELECT * FROM mitarbeiter WHERE gehalt > 3000;

Des weiteren können Sie Vergleiche mit LIKE (ähnlich), IN (in), ISNULL (beinhaltet eine Nullmarke) und BETWEEN (zwischen) durchfüh-ren, die mit NOT (nicht) verneint werden können.

Mit LIKE und NOT LIKE vergleichen Sie einen Wert mit einer Vorgabe,in der Sie für Zeichen Platzhalter verwenden. Sie können somit auchDaten selektieren, deren genauen Wert Sie nicht kennen. Die Daten-banksysteme benutzen unterschiedliche Platzhalter. Aus Windows ken-

97SELECT mit Bedingung (WHERE)

Page 19: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

nen Sie sicher * als Platzhalter für eine beliebig lange Zeichenkette –wenn Sie etwa eine Datei suchen, aber nicht den ganzen Namen einge-ben wollen. Hier gibt es noch ? für genau ein Zeichen. Datenbankenbenutzen meist das Prozentzeichen (%) und den Unterstrich (_), so auchdie beiliegende Datenbank.

Wenn Sie nur Kunden haben wollen, die Meier in allen Variationenheißen, können Sie den betreffenden SELECT-Befehl mit IN ausschrei-ben, wie Sie es ja schon getan haben.

SELECT * FROM kundeWHERE name IN ('Maier', 'Mayer', 'Meier', 'Meyer');

Oder Sie machen es sich etwas kürzer.

SELECT * FROM kundeWHERE name LIKE 'M__er';

Allerdings würden jetzt auch Herr Maler und Frau Meter aufgenom-men.

Wenn Sie eine Spalte mit IS NULL oder IS NOT NULL prüfen, könnenSie sich die Datensätze ausgeben lassen, die in dieser Spalte keinenbzw. einen Wert enthalten:

SELECT * FROM kundeWHERE name IS NOT NULL;

Mit BETWEEN und NOT BETWEEN geben Sie zwei Werte an, zwischendenen der untersuchte Wert liegen soll. Wenn Sie alle Mitarbeiterselektieren wollen, die zwischen 2000 und 3000 EUR verdienen, lautetder Befehl

SELECT * FROM mitarbeiterWHERE gehalt BETWEEN 2000 AND 3000;

Die Bedingung können Sie auch mit > und < aufstellen.

SELECT * FROM mitarbeiterWHERE gehalt >= 2000 AND <=3000;

BETWEEN können Sie auch auf Zeichenketten anwenden. Um alle Kun-den zwischen C und M zu selektieren, würde der folgende Befehl funk-tionieren:

SELECT * FROM kundeWHERE name BETWEEN 'C' AND 'M'ORDER BY name;

Daten abfragen (SELECT)98

Page 20: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Daneben gibt es die logischen Operatoren AND (und), OR (oder) undNOT (nicht). Mit AND verknüpfte Bedingungen müssen beide erfülltwerden, damit die gesamte Bedingung erfüllt wird. Bei OR muss nureine der verknüpften Bedingungen erfüllt sein. NOT kehrt den Wertum: Eine erfüllte Bedingung gilt als unerfüllt und umgekehrt.

Diese Operatoren werden in der Reihenfolge NOT, AND, OR ausgewertet.Wenn Sie Bedingungen in Klammern setzen, so werden die Klammernzuerst ausgewertet.

Die Bedingung

NOT name = 'Meier' AND nettopreis > 20OR produzent = 'Tolle Drucker GmbH'

wird also folgendermaßen ausgewertet. Zuerst wird name = 'Meier'verneint, dann mit der Bedingung nettopreis > 20 über AND ver-knüpft. Diese Bedingung ist als Ganzes nur dann erfüllt, wenn derName nicht Meier lautet und der Nettopreis über 20 Euro liegt. DieseBedingung wird durch das OR mit produzent = 'Tolle DruckerGmbH' verbunden. Damit wird die gesamte Bedingung auch dann er-füllt, wenn der Name doch Meier und der Nettopreis unter 20 Euroliegt, aber der Produzent die Tolle Drucker GmbH ist.

6.3 Ausgabe sortieren (ORDER BY)

Die Daten wurden bisher in der Reihenfolge ausgegeben, in der sie ausder Tabelle ausgelesen wurden. Durch eine Ergänzung des Befehls kön-nen Sie sich die Daten geordnet anzeigen lassen.

Die Ordnung entspricht dem Datentyp der betroffenen Zeile. Textewerden alphabetisch ausgegeben, Zahlen der Höhe ihrer Werte nach.In der Regel geht das von A bis Z beziehungsweise vom niedrigstenzum höchsten Wert. Aber die Reihenfolge kann umgekehrt werden.

Einführungs-beispiel

Das folgende Einführungsbeispiel sortiert die Kundenliste alphabetischnach Nachnamen.

SELECT name, vornameFROM kundeORDER BY name;

SQL-SyntaxUm eine geordnete Ausgabe zu erreichen, wird an das Ende desSELECT-Befehls das Element ORDER BY gehängt.

99Ausgabe sortieren (ORDER BY)

Page 21: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

8 Unterabfragen (Sub-Selects)

Unterabfragen bieten die Möglichkeit, in einer Abfrage direkt die Ergebnisse einer anderen Abfrage zu verwenden. Welche Arten von Unterabfragen es gibt und wie sie einge-setzt werden können, zeigt dieses Kapitel.

Unter Unterabfragen, häufig auch als Sub-Selects oder Sub-Querysbezeichnet, versteht man die Möglichkeit, innerhalb eines Befehls dasErgebnis einer Abfrage unmittelbar in einer anderen Anweisung zuverwenden. Unterabfragen kommen also immer dann zur Anwendung,wenn eine Abfrage auf das Ergebnis einer anderen Abfrage zurück-greift.

Einführungs-beispiel

Das folgende Beispiel zeigt das Grundprinzip von Unterabfragen.Wenn Sie z.B. auf Basis der Tabelle mit den Bestellinformationen wis-sen möchten, welcher Kunde die Bestellung mit dem höchsten Wertaufweist, können Sie folgenden Befehl verwenden:

SELECT kundennr, bestelldatum, rechnungsbetragFROM bestellungWHERE rechnungsbetrag =(SELECT max(rechnungsbetrag) FROM bestellung);

Sie sehen anhand dieses Beispiels, dass die Unterabfrage einen Wert fürden Vergleichsoperator innerhalb der WHERE-Bedingung liefert. Umdiesen Wert zu liefern, wird wiederum eine SELECT-Abfrage formu-liert, die den bekannten Regeln folgt. Wenn Sie das Beispiel in derÜbungssoftware ausführen, erfahren Sie, dass der Kunde mit der Num-mer 63 am 25. Januar 2004 mit 4.235,97 Euro die Bestellung mit demhöchsten Wert getätigt hat (siehe Abbildung 8.1).

In unserem Einführungsbeispiel wurde eine Unterabfrage formuliert,die genau einen Wert zurückgibt. Sie erhalten als Ergebnis den Da-tensatz mit dem höchsten Rechnungsbetrag aus der Tabellebestellungen. Es ist nicht möglich, dieses Ergebnis über eine einfa-che Abfrage zu erhalten, weil die Aggregatfunktion max(rechnungs-betrag) die Angabe weiterer Felder nur dann zulässt, wenn eine ent-sprechende Gruppierung für diese Spalten vorhanden ist. Deshalb wirdder SQL-Befehl

141

Page 22: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

SELECT max(rechnungsbetrag), kundennr, bestelldatum,rechnungsbetragFROM bestellung;

als ungültiger Befehl abgelehnt. Die Ergänzung um eine GROUP BY-Klausel macht daraus einen gültigen Befehl, allerdings werden jetzt auf-grund der Gruppierung alle Datensätze ausgegeben, was natürlichnicht das gewünschte Ergebnis darstellt.

SELECT max(rechnungsbetrag), kundennr, bestelldatum,rechnungsbetragFROM bestellungGROUP BY kundennr, bestelldatum, rechnungsbetrag;

Abbildung 8.1 Ausführung einer Unterabfrage

Die Einschränkung der Datensätze durch die WHERE-Bedingung erfolgtauf Basis einer SELECT-Abfrage, die den entsprechenden Wert bzw.entsprechende Werte für die Einschränkung liefert. Da der Wert für einbestimmtes Feld geliefert wird, muss natürlich der Rückgabewert lo-gisch zum Selektionskriterium passen. In diesem Fall wird der maxi-male Rechnungsbetrag zurückgegeben. Eine Unterabfrage ist im Übri-gen relativ schnell zu erkennen, weil die gesamte Unterabfrage miteiner Klammer versehen wird und sich damit z.B. von einem Join auchschon optisch unterscheidet.

Page 23: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

SQL-SyntaxDer grundsätzliche Aufbau von Unterabfragen kann wie folgt definiertwerden:

SELECT spaltenlisteFROM tabellennameWHERE spaltenname Vergleichsoperator(SELECT abfrage);

Oft kann man Unterabfragen auch als Join formulieren. Wird zusätzlicheine Programmiersprache verwendet, mit der Ergebnisse von SQL-Be-fehlen gespeichert werden können, ist es natürlich auch möglich, dasErgebnis einer Abfrage zwischenzuspeichern und in der nächsten Ab-frage zu verwenden.

Da die Unterabfrage Werte für die Hauptabfrage liefert, können grund-sätzlich folgende Varianten unterschieden werden:

� Unterabfragen, die einen Wert (Zeile) zurückgeben

� Unterabfragen, die mehrere Werte (Zeilen) zurückgeben

Je nach Formulierung der Unterabfrage kann dann noch unterschiedenwerden, ob die Unterabfrage eigenständig ausgeführt werden kannoder nicht. Als korrelierte Unterabfragen werden dabei Unterabfragenverstanden, die nicht unabhängig von der Hauptabfrage ausgeführtwerden können.

Unterabfragen lassen sich nicht nur in SELECT-Abfragen verwenden,sondern genauso gut in DELETE-, UPDATE- und INSERT-Anweisun-gen. Im weiteren Verlauf des Buches finden Sie hierzu entsprechendeBeispiele.

8.1 Unterabfragen, die eine Zeile zurückgeben

Das oben gezeigte Einführungsbeispiel gehört zu dieser Gruppe derUnterabfragen, die nur einen Wert zurückgeben. Ein anderes Beispielist die Selektion eines bestimmten Datensatzes über den Primärschlüs-sel: »Zeige mir den Kunden mit der Kundennummer 56«. Dabei geltenfolgende Bedingungen:

� Das Ergebnis der Unterabfrage gibt genau einen Wert zurück.

� Die Unterabfrage gibt genau eine Spalte (Feld) zurück.

Diese Art der Unterabfrage erzeugt also nichts anderes als einen Selek-tionswert für die Hauptabfrage. Aus diesem Grund arbeitet man bei

143Unterabfragen, die eine Zeile zurückgeben

Page 24: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

dieser Art der Unterabfragen auch mit den bekannten Vergleichsopera-toren wie =, >, >=, < oder <=.

WeiterführendeBeispiele

Das folgende Beispiel gibt einen Kunden zurück, der einer definiertenRechnungsnummer zugeordnet wird.

SELECT name FROM kunde WHERE kundennr =(SELECT kundennr FROM bestellungWHERE bestellnr = 10);

Das Ergebnis dieser Abfrage sieht dann wie in Abbildung 8.2 aus.

Abbildung 8.2 Unterabfrage, die eine Zeile zurückgibt

Unterabfragen, die eine Zeile zurückgeben, können, wie bereits er-wähnt, häufig auch über normale Joins formuliert werden. In diesemBeispiel kann diese Abfrage auch wie folgt definiert werden:

SELECT name FROM kundeINNER JOIN bestellung

ON kunde.kundennr = bestellung.kundennrWHERE bestellung.bestellnr = 10;

Ob Sie besser eine Unterabfrage oder ein Join verwenden, ist dabeinicht mit einer Empfehlung zu versehen. Im Zweifel sollte der Befehl

Unterabfragen (Sub-Selects)144

Page 25: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

verwendet werden, der die bessere Ausführungsgeschwindigkeit auf-weist, was unter Umständen nur mit Analysetools des jeweiligenDatenbanksystems zu beantworten ist.

Unterabfragen, die einen Wert liefern, sind insbesondere bei Fragestel-lungen, die berechnete Aggregatfunktionen (MAX, AVG) benötigen, inte-ressant. Hierzu einige Beispiele.

BeispieleIm Folgenden werden alle Bestellungen aufgelistet, die einen über-durchschnittlichen Rechnungsbetrag haben:

SELECT bestellnrFROM bestellungWHERE rechnungsbetrag >(SELECT AVG(rechnungsbetrag) FROM bestellung);

Abbildung 8.3 Ausgabe auf Basis des Vergleichs mit einem Mittelwert

Falls Sie den durchschnittlichen Rechnungsbetrag ermitteln wollen,können Sie dies mit der alleinigen Ausführung der Unterabfrage tun.

SELECT AVG(rechnungsbetrag) FROM bestellung;

Ein anderes Beispiel ist die Suche nach dem neuesten Mitarbeiter. Hiersuchen wir über den größten Datumswert.

145Unterabfragen, die eine Zeile zurückgeben

Page 26: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

SELECT name,vorname FROM mitarbeiterWHERE eintrittsdatum =(SELECT MAX(eintrittsdatum) FROM mitarbeiter);

So kann auch der Mitarbeiter gesucht werden, der zuerst angelegtwurde. Hier wird dann statt der Funktion max() die Funktion min()auf das Anlegedatum verwendet.

SELECT name,vorname FROM mitarbeiterWHERE eintrittsdatum =(SELECT MIN(eintrittsdatum) FROM mitarbeiter);

8.2 Unterabfragen, die mehr als eine Zeile zurückgeben

Eine Unterabfrage kann aber auch mehr als eine Zeile zurückgeben. EinBeispiel hierfür ist die Selektion aller Bestellungen eines bestimmtenKunden. Wenn eine Unterabfrage mehrere Zeilen zurückgibt, ist derEinsatz von Mengenoperatoren notwendig, weil hier jetzt nicht mehrmit einem Wert verglichen wird, sondern mit allen Werten, die durchdie Unterabfrage zurückgegeben werden.

WeiterführendesBeispiel

Sie haben eine Gehaltstabelle von Mitarbeitern und wollen wissen, objemand weniger verdient als derjenige Mitarbeiter mit dem geringstenGehalt der Abteilung Vertrieb (Abteilung = 5). Der Befehl hierfür lautetdann:

SELECT name, gehalt, abteilungFROM mitarbeiterWHERE gehalt < ALL(SELECT gehalt FROM mitarbeiter WHERE abteilung = 5);

Die Unterabfrage gibt alle Gehälter der Mitarbeiter der Abteilung Ver-trieb aus. Der Mengenoperator ALL vergleicht dann, ob die Bedingungauf alle Zeilen der Unterabfrage zutrifft. In diesem Fall wird geprüft, obein Datensatz, der nicht die Abteilung 5 als Attribut trägt, kleiner als je-der Datensatz der Unterabfrage ist.

Unterabfragen (Sub-Selects)146

Page 27: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

Als Ergebnis erhalten Sie in der Übungssoftware fünf Mitarbeiter (sieheAbbildung 8.4).

Abbildung 8.4 Unterabfrage mit dem Vergleichsoperator < ALL

Folgende Mengenoperatoren sind für Unterabfragen, die mehr als ei-nen Datensatz zurückgeben, gültig.

Mengen-operatoren

Anhand von Beispielen werden im Folgenden die verschiedenen Men-genoperatoren besprochen.

Mengenoperator Beschreibung

vo ALL Prüft, ob die angegebene Bedingung auf alle Datensätze der Unterabfrage zutrifft. ALL wird immer mit einem Vergleichs-operator vo wie >, < >= oder <= verwendet.

vo ANY Prüft, ob die angegebene Bedingung auf irgendeinen Datensatz der Unterabfrage zutrifft. ANY wird immer mit einem Ver-gleichsoperator vo wie >, < >= oder <= verwendet.

IN Prüft, ob ein Wert in dem Ergebnis der Unterabfrage enthalten ist.

EXISTS Prüft, ob die Bedingung auf mindestens einen Datensatz der Unterabfrage zutrifft, also mindestens ein Datensatz selektiert wird. Rückgabe ist TRUE oder FALSE.

147Unterabfragen, die mehr als eine Zeile zurückgeben

Page 28: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

ALL Der ALL-Operator wird verwendet, wenn eine Bedingung auf alle Zei-len der Unterabfrage passen soll. Sie suchen z.B. alle Mitarbeiter, dielänger dem Unternehmen angehören als der dienstälteste Mitarbeiterder Abteilung Vertrieb (Abteilung = 5). Der Befehl hierfür lautet:

SELECT name, eintrittsdatum, abteilungFROM mitarbeiterWHERE eintrittsdatum < ALL(SELECT eintrittsdatum FROM mitarbeiterWHERE abteilung = 5);

Die Unterabfrage liefert hier eine Ergebnisliste mit allen Eintrittsdatender Mitarbeiter der Vertriebsabteilung. In der Hauptabfrage werdenalle Datensätze ausgegeben, deren Eintrittsdatum kleiner als alle (ALL)Datensätze der Unterabfrage sind. Im Ergebnis sieht diese Abfrage wiein Abbildung 8.5 gezeigt aus.

Abbildung 8.5 Der ALL-Operator in Unterabfragen

Natürlich kann es vorkommen, dass die Unterabfrage keinen Wert lie-fert, also leer ist. In diesem Fall kann die Hauptabfrage nicht erfülltwerden, liefert also falsch zurück.

Unterabfragen (Sub-Selects)148

Page 29: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

ANYWährend der Operator ALL bewirkt hat, dass mit allen selektiertenDatensätzen der Unterabfrage verglichen wurde, muss bei ANY nurirgendein Datensatz der Unterabfrage mit der Bedingung für die Haupt-abfrage gültig sein. Während bei ALL der Vergleich nach dem größtenWert vorgenommen wurde, lautet bei ANY die Fragestellung, welcherWert der Hauptabfrage größer als ein beliebiger Wert der Unterabfrageist.

Auf das oben gezeigte Gehaltsbeispiel bezogen würde ANY bewirken,dass alle Personen gesucht werden, die weniger verdienen als derhöchste Wert der Unterabfrage.

SELECT name, gehalt, abteilungFROM mitarbeiter WHERE gehalt < ANY(SELECT gehalt FROM mitarbeiter WHERE abteilung=5);

INWährend bei ANY und ALL mit Vergleichsoperatoren gearbeitet wurde,also Werte, die größer und kleiner als Vergleichswerte aus der Unterab-frage waren, prüft IN auf Übereinstimmung mit dem Ergebnis derUnterabfrage.

In der Übungsdatenbank existiert zu der Mitarbeitertabelle noch eineTabelle, in der gespeichert wird, ob der Mitarbeiter ein Jobticket be-sitzt. Sie wollen nun wissen, welcher der Mitarbeiter auch ein gültigesJobticket besitzt. Die Abfrage hierfür lautet dann wie folgt:

SELECT name FROM mitarbeiter WHERE mitarbeiternrIN(SELECT mitarbeiternr FROM jobticketWHERE gueltig_bis > CURRENT_DATE);

Natürlich kann auch mit NOT geprüft werden, ob keine Übereinstim-mung mit der Unterabfrage besteht. Wenn Sie also wissen wollen, wernoch kein Jobticket hat, lautet die Abfrage:

SELECT name FROM mitarbeiter WHERE mitarbeiternrNOT IN(SELECT mitarbeiternr FROM jobticketWHERE gueltig_bis > CURRENT_DATE);

149Unterabfragen, die mehr als eine Zeile zurückgeben

Page 30: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

Auch an diesem Beispiel lässt sich zeigen, dass man Unterabfragen auchals Joins definieren kann. Die Frage, wer noch kein Jobticket besitzt,könnte auch über folgende Abfrage beantwortet werden:

SELECT m.name FROM mitarbeiter mINNER JOIN jobticket jON m.mitarbeiternr = j.mitarbeiternrWHERE j.gueltig_bis > CURRENT_DATE;

An dieser Stelle sei noch einmal angemerkt, dass FireBird/InterBase imGegensatz zu den meisten anderen Datenbanken kein AS für dieBenennung von Aliasen verlangt.

EXISTS Während IN geprüft hat, ob ein identischer Vergleichswert für dieHauptabfrage in der Unterabfrage vorhanden ist, und dann auf dieserBasis Datensätze auswählt, prüft EXISTS generell nur, ob ein gültigerWert in der Unterabfrage für die formulierte Abfrage existiert.

Bei EXISTS stellt deshalb keine Vergleichsspalte die Verbindung zwi-schen Haupt- und Unterabfrage her.

Das folgende Beispiel beantwortet die Frage, welche Mitarbeiter ausder Tabelle mitarbeiter auch in der Tabelle jobticket vorhandensind.

SELECT name, abteilung FROM mitarbeiterWHERE EXISTS(SELECT * FROM jobticketWHERE mitarbeiter.mitarbeiternr= jobticket.mitarbeiternr);

Da EXISTS nur prüft, ob ein gültiger Vergleichswert in der Unterab-frage vorhanden ist, ist zwingend notwendig, über mitarbei-ter.mitarbeiternr = jobticket.mitarbeiternr die Ausgabeauf korrespondierende Datensätze einzuschränken. Andernfalls wür-den alle Datensätze ausgegeben werden, weil bereits ein Eintrag in derTabelle jobticket die Unterabfrage auf gültig setzt und damit dannalle Datensätze der Hauptabfrage ausgibt.

Sie können auch hier den Operator NOT verwenden. Wenn Sie also wis-sen möchten, welche Mitarbeiter kein Jobticket besitzen, lautet dieAbfrage:

SELECT name, abteilungFROM mitarbeiter

Unterabfragen (Sub-Selects)150

Page 31: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

1

2www.galileocomputing.de - Einstieg in SQL - Leseprobe

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

WHERE NOT EXISTS(SELECT * FROM jobticketWHERE mitarbeiter.mitarbeiternr= jobticket.mitarbeiternr);

Sie können grundsätzlich auch mehr als eine Unterabfrage in einer Ab-frage verwenden. Das weiter oben gezeigte Beispiel der Selektion vonüberdurchschnittlichen Rechnungsbeträgen, die höher als der Durch-schnitt sind, könnte so auch z.B. um die Selektion aller Kunden erwei-tert werden, die in Hamburg wohnen.

SELECT bestellnr FROM bestellungWHERE rechnungsbetrag >(SELECT AVG(rechnungsbetrag) FROM bestellung)AND kundennr IN(SELECT kundennr FROM kunde WHERE ort = 'Hamburg');

Übungen

Übung 8.1Geben Sie Bestelldatum und Kundennummer für die Bestellung mitdem höchsten Rechnungsbetrag aus, der jemals gestellt wurde.

Übung 8.2Aus der Übungsdatenbank sollen alle Bestellungen der Kunden ausHamburg ausgegeben werden. Formulieren Sie einen SELECT-Befehlmit einer Unterabfrage.

Übung 8.3Ermitteln Sie alle Mitarbeiter, denen ein überdurchschnittliches Gehaltim Vergleich zum Unternehmensdurchschnitt gezahlt wird.

8.3 Regeln für die Verwendung von Unterabfragen

Zusammenfassend werden hier noch einmal die Regeln für die Ver-wendung von Unterabfragen aufgeführt:

� Eine Unterabfrage wird als rechtsseitiger Ausdruck als Vergleichoder EXISTS-Bedingung eingesetzt.

� Die Unterabfrage ist in Klammern zu setzen.

151Regeln für die Verwendung von Unterabfragen

Page 32: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

� Wenn die Unterabfrage einen Datensatz als Ergebnis liefert, kanndiese mit den Vergleichsoperatoren >, <, =, <= und >= eingeleitetwerden. Ob nur ein Datensatz aus der Unterabfrage hervorgeht, istunter Umständen durch die Formulierung des Befehls festzulegen.

� Liefert die Unterabfrage mehr als einen Datensatz, können keineVergleichsoperatoren mehr eingesetzt werden. Hierfür stehen danndie Mengenoperatoren ALL, ANY, IN und EXISTS zur Verfügung.

� ORDER BY ist innerhalb einer Unterabfrage nicht zulässig.

� Innerhalb der Unterabfrage ist UNION nicht zulässig.

Unterabfragen (Sub-Selects)152

Page 33: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

Index

AAbfrage � s. SELECTAbhängige Tabelle 50ABS() 120, 256Absoluter Wert 120ACID 177ADD CONSTRAINT 74Aggregatfunktionen 113Aktualisierung 171, 172Aktualisierungsvorgänge 46, 52Alias 115

Spaltenalias 93Tabellenalias 92

ALTER 74ALTER DOMAIN 68, 249

ADD 70ADD CHECK 69DROP CONSTRAINT 69DROP DEFAULT 69SET 69

ALTER INDEX 250ALTER TABLE 72, 73, 246

ADD 74ALTER 74DROP 74MODIFY 74

AND 99AS 114ASC 100Atomicity 177AUTOCOMMIT 179Autoinkrement 47, 246AVG() 115, 256

BBEGIN 190, 259Benutzer 201, 202Benutzerrechte 203, 206, 264BETWEEN 97Beziehung

1 zu 1 221 zu n 22n zu m 22

Beziehungstypen 22BINARY(n) 241BIT VARYING(n) 43, 241

BIT(n) 43, 241BLOB 44, 241BOOLEAN 44, 242

CCASE-Tool 21CAST() 124, 132, 256CHAR(n) 37, 240CHAR_LENGTH() 121, 256CHARACTER LARGE OBJECT(n) 39,

240CHARACTER SET 197CHARACTER VARYING(n) 37CHARACTER(n) 37, 240CHARACTER_LENGTH() 121, 256CHECK 57, 63CLOB 240, 241COLLATE 197COMMIT 177, 178, 179, 180, 182, 232,

259Condition Join 135Consistency 177Constraint 74CONTAINING 67COUNT() 104, 115, 256CREATE DATABASE 231CREATE DOMAIN 65, 248CREATE FUNCTION 188CREATE INDEX 80, 249CREATE PROCEDURE 185, 188CREATE ROLE 202CREATE TABLE 242

Syntax 45CREATE TRIGGER 190CREATE VIEW 258

Syntax 167WITH CHECK OPTION 171

CURRENCY 240CURRENT_DATE() 62, 123, 257CURRENT_TIME() 123, 257CURRENT_TIMESTAMP() 123, 257

DData Definition Language � s. DDLDATE 41, 241Datenbankadministrator 201

Index 267

Page 34: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

Datenbankentwurf 20Datenbankkonsistenz

siehe auch Referenzielle Integrietät 185

Datenbankmanagementsystem 20Datendefinitionssprache � s. DDLDatenmanipulationssprache � s. DMLDatenmodell 20

objektorientiertes 21relationales 21

Datensicht � s. ViewDatentyp

BINARY(n) 241BIT VARYING(n) 241BIT(n) 43, 241BLOB 44, 241BOOLEAN 44, 242CHARACTER LARGE OBJECT(n) 39, 240CHARACTER VARYING(n) 37, 240CHARACTER(n) 37, 240CLOB 240, 241CURRENCY 240DATE 41, 241DATETIME 241DECIMAL(n, m) 41, 240DOUBLE PRECISION 41, 240FIXED(n, m) 240FLOAT(n) 41, 240IMAGE 241INTEGER 40, 240INTERVAL DAY 43INTERVAL DAY TO HOUR 43INTERVAL DAY TO MINUTE 43INTERVAL MINUTE TO SECOND 43INTERVAL YEAR 42INTERVAL YEAR TO MONTH 42LONG 240LONGBLOB 241LONGTEXT 240MEDIUMBLOB 241MEDIUMTEXT 240MEMO 240NATIONAL CHARACTER VARYING(n) 38, 240NATIONAL CHARACTER(n) 38, 240NCHAR VARYING(n) 240NCHAR(n) 240

NTEXT 240NUMERIC(n, m) 40, 240NVARCHAR(n) 240REAL 41, 240SINGLE 240SMALLDATETIME 241SMALLINTEGER 40, 240TEXT 240TIME 42, 241TIME(n) WITH TIME ZONE 42TIMESTAMP 42, 241TIMESTAMP(n) WITH TIME ZONE 42TINYBLOB 241VARBINARY(n) 241VARCHAR(n) 37, 240

DATETIME 241Datumsfunktionen 113, 257DAY() 256DB2 239DBMS � s. Datenbankmanagement-

systemDDL 17, 20DECIMAL(n, m) 41DEFAULT 62DELETE 143, 159, 202, 205, 207, 232, 252DESC 100Dirty Read 180DISTINCT 93, 253DML 17, 20Domäne 63DOUBLE PRECISION 41DROP 77DROP CONSTRAINT 74DROP DOMAIN 70, 249DROP INDEX 82, 250DROP TABLE 76, 248DROP TRIGGER 194DROP VIEW 172, 259

CASCADE 172RESTRICT 172

Dubletten 111Durability 177

EEND 190Entität 21Entitätstyp 21

268 Index

Page 35: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

Entity-Relationship-Modell � s. ER-Modell

ER-Modell 22EXCEPT 109, 255EXISTS 147EXTRACT() 121, 256

FFIXED(n, m) 240Fließkommazahl 41FLOAT 41, 240FOREIGN KEY 49

CASCADE 52DEFAULT 52Definition 24NO ACTION 52SET NULL 52

Fremdschlüssel � s. FOREIGN KEY

GGETDATE() 257GETUTCDATE() 257GRANT 203, 264Greenwich Mean Time 42GROUP BY 104, 105Gruppierung � s. GROUP BY

HHAVING 106HOUR() 256

IIMAGE 241IN 97INDEX 78Inner Join 132INSERT INTO 83, 251INSTR() 256INTEGER 40, 240InterBase 239INTERSECT 109, 255INTERVAL DAY 43INTERVAL DAY TO HOUR 43INTERVAL DAY TO MINUTE 43INTERVAL MINUTE TO SECOND 43INTERVAL YEAR 42INTERVAL YEAR TO MONTH 42IS NOT NULL 98

IS NULL 97ISO8859 197Isolation 177Isolationsebene 182Isolationsphänome 180

JJOIN

Column Name Join 135Cross Join 137FULL OUTER JOIN 138INNER JOIN 133LEFT JOIN 138Natural Join 136Old style 129Outer Join 138RIGHT JOIN 138Self Join 136

KKorrelierte Unterabfrage 143Kreuzprodukt � s. Cross Join

LLEN() 256LENGTH() 256LIKE 97LOCATE() 256LONG 240LONGBLOB 241LONGTEXT 240Lost Update 180LTRIM() 258

MMathematische Funktionen 113MAX() 115, 256MEDIUMBLOB 241MEDIUMTEXT 240Mehrbenutzerbetrieb 175, 183Mehrfelderschlüssel 47MEMO 240MID() 258MIN() 116, 256MINUS 109, 255MINUTE() 256MOD() 119, 122, 256MODIFY 74

Index 269

Page 36: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

MONTH() 256MS Access 239Multi-Column-Index 79, 80MySQL 239

NNATIONAL CHARACTER VARYING(n)

38NATIONAL CHARACTER(n) 38, 240NCHAR VARYING(n) 240NCHAR(n) 240Non-repeatable Read 181Normalform 27Normalisierung 26NOT 97, 99NOT BETWEEN 98NOT LIKE 97NOT NULL 46NOW() 257NTEXT 240NULL 127Nullmarken 127NUMERIC(n, m) 40, 240NVARCHAR(n) 240

OON DELETE 52, 242ON UPDATE 53, 242Operatoren

Arithmetische Operatoren 18Logische Operatoren 18Vergleichsoperatoren 18Verknüpfungsoperatoren 19

OR 99Oracle 239ORDER BY 99OVERLAY() 125

PPhantom 181Platzhalter 97POSITION() 122, 256Primärschlüssel 24, 46, 47, 49PRIMARY KEY � s. PrimärschlüsselPrivilegien � s. GRANT

RRead Uncommited 182REAL 41, 240Referenzielle Integrität

CASCADE 25Definition 25SET NULL 26

Relation, Definition 23Relationales Datenmodell 23Relationenalgebra 132Reverse engineering 21REVOKE 206, 264ROLLBACK 177, 259Rolle 202RTRIM() 258

SSAPDB 239Schlüssel 22SECOND() 256SELECT 87, 89, 253

Alle Spalten ausgeben 90Spalten auswählen 91

SET 154SINGLE 240SMALLDATETIME 241SMALLINTEGER 40, 240SQL Server 239Standardwert 61, 62Sub-Selects � s. UnterabfragenSUBSTR() 258SUBSTRING() 125, 258SUM() 115, 256SYSDATE() 257

TTabelle 17TEXT 240TIME 42, 241TIME(n) WITH TIME ZONE 42TIMESTAMP(n) 42TIMESTAMP(n) WITH TIME ZONE 42TINYBLOB 241Transaktion

Definition 175Trigger 189TRIM() 126, 258Tupel 23

270 Index

Page 37: Einstieg in SQL - bilder.buecher.de · Jede Bestellung besteht aus einzelnen Bestellungsposten (Tabelle posten), die sich aus Artikeln zusammensetzen (Tabelle artikel). - Einstieg

www.galileocomputing.de - Einstieg in SQL - Leseprobe

UUDF 185, 261Unicode 196UNION 108, 255UNION ALL 111UNIQUE 56Unterabfragen

ALL 148ANY 149EXISTS 150IN 149in DELETE-Befehlen 162in UPDATE-Befehlen 156Join als Alternative 144, 150korrelierte 143Mengenoperatoren 147mit einem Wert 143mit mehreren Werten 146

UPDATE 153, 154, 251UPPER() 126, 257Use Case 20USING 135

VVALUE 67VARBINARY(n) 241VARCHAR(n) 37, 240Vatertabelle 50Vergleichsoperatoren 97View 167

Read-only 170

WWHERE 94

YYEAR() 256

ZZeichenkettenfunktionen 113Zeichenverkettung 125, 257Zusammengesetzter Index 79

Index 271