SQL 2 Order by null Aggregatfunktionen group by Join subselect.

Slides:



Advertisements
Ähnliche Präsentationen
ER-Datenmodell und Abfragen in SQL
Advertisements

LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenbanksysteme für FÜ SS 2000 Seite Worzyk FH Anhalt SQL 1 Aussagen über Tabelleninhalte Aussagelogik Äquivalenzen Select Where.
Datenbanksysteme für FÜ WS2004/05 SQL1 - 1 Worzyk FH Anhalt SQL 1 Aussagen über Tabelleninhalte Aussagelogik Äquivalenzen Select Where.
Bauinformatik II Softwareanwendungen 1
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Java: Objektorientierte Programmierung
SQL als Abfragesprache
SQL als Abfragesprache
Der letzte Schliff für Abfragen Übersicht über die Aggregatfunktionen.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Normalformen Normalisieren Schlüssel
Datenintegrität Referentielle Integrität create table
6 Normalformen Normalisieren Schlüssel
Einführung Dateisystem <-> Datenbanksystem
Abfragen – Tipps und Tricks Buch S102ff (Informatik I, Oldenbourg-Verlag) Nach einer Vorlage von Dieter Bergmann.
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Ralf KüstersDagstuhl 2008/11/30 2 Ralf KüstersDagstuhl 2008/11/30 3.
objekt-relationale Datenbanken
Übung 1: SQL Übungen finden bei Bedarf anstelle der Vorlesungen statt
Datenbankentwicklung IV-LK
Bild 1.1 Copyright © Alfred Mertins | Signaltheorie, 2. Auflage Vieweg+Teubner PLUS Zusatzmaterialien Vieweg+Teubner Verlag | Wiesbaden.
20:00.
Datenbankentwicklung IV-LK
...ich seh´es kommen !.
Auslegung eines Vorschubantriebes
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #3 Das relationale Modell (Teil 2)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Befehle in SQL Erläuterungen.
Datenbanksysteme für hörer anderer Fachrichtungen
Einführung in Datenbankmodellierung und SQL
NIN-Arbeitsblätter Paul-Emile Müller
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Relationale Datenbanken IV
Symmetrische Blockchiffren DES – der Data Encryption Standard
SK / – in Hochkössen, St. Johann i.Tirol und Hochfügen flow Ski- und Snowboardschule Intersport Menzel.
1 Gruppierung, Aggregierung und Sortierung (2) Abarbeitungsmodell bei Gruppierung: Werte from- und where-Klauseln aus wie bisher (Bildung von Kreuzprodukt.
Managemententscheidungsunterstützungssysteme (Ausgewählte Methoden und Fallstudien) ( Die Thesen zur Vorlesung 3) Thema der Vorlesung Lösung der linearen.
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Analyseprodukte numerischer Modelle
Relationale Datenbanken IV
Schutzvermerk nach DIN 34 beachten 20/05/14 Seite 1 Grundlagen XSoft Lösung :Logische Grundschaltung IEC-Grundlagen und logische Verknüpfungen.
Verdichten von Daten mit Gruppenfunktionen
Vortrag von Rechtsanwältin Verena Nedden, Fachanwältin für Steuerrecht zur Veranstaltung Wege zum bedingungslosen Grundeinkommen der Piratenpartei Rhein-Hessen.
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
Structured Query Language
Der Erotik Kalender 2005.
Begrüßung und Abschied
Familie Beutner, Konrad-Voelckerstrasse, Edenkoben/Pfalz, Tel:
Vorlesung #5 SQL (Teil 2).
Numbers Greetings and Good-byes All about Me Verbs and Pronouns
2 Auswählen und Sortieren von Daten. 2-2 Filtern von Zeilen mit Selektion "…suche alle Angestellten in Abteilung 10" EMP EMPNO ENAME JOB... DEPTNO 7839KINGPRESIDENT.
RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die.
Einführung Dateisystem <-> Datenbanksystem
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
Datenbanken abfragen mit SQL
Abfragen Wiederholung Manuel Friedrich Schiller-Gymnasium Hof.
Aggregatfunktionen bei mehreren Tabellen
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
Wirtschaftsinformatik
(Structured Query Language)
 Präsentation transkript:

SQL 2 Order by null Aggregatfunktionen group by Join subselect

SQL> SELECT * FROM pruefung; NACHNAME VORNAME FACH DATUM NOTE FAKTOR ---------- ---------- -------------------- -------- --------- --------- Lehmann Hans Betriebssysteme 03.01.00 1,7 1 Müller Else Mathematik 01.10.98 1,3 1 Lehmann Hans Diplomarbeit 01.10.98 2 Schmidt Hermann Diplomarbeit 01.10.98 4,7 2 Bauer Jutta Datenorganisation 01.12.98 2 1 Schulze Anton Datenorganisation 25.10.98 2,3 1 Huber Emma TI 25.10.98 3,3 1 Müller Jutta Diplomarbeit 25.10.99 2,7 2 Müller Anna Diplomarbeit 25.10.98 2 2 Müller Jutta Mathematik 01.09.99 3 1 Schulze Anton DBS1 03.09.99 3,3 1 Schulze Anton TI 03.09.99 2,3 1 Maier Fritz DBS1 05.09.99 2,3 1 Bauer Else TI 06.09.99 4,7 1 Bäcker Ewald 30.09.99 Softwareprojekt 30.09.99 Müller Jutta DBS1 01.10.98 2,3 1 Maier Fritz Datenorganisation 01.10.99 2,7 1 Köhler Emil DBS1 01.10.99 2 1 Bauer Else DBS1 1 Diese Beispieltabelle ist nicht nach irgendwelchen ersichtlichen Gesichtspunkten geordnet. Sie ist in dieser Beziehung typisch für die Reihenfolge der Daten, wie sie im Rechner gespeichert ist. Wenn keinerlei zusätzliche Angaben gemacht werden, werden die einzelnen Zeilen in der Reihenfolge ihrer Eingabe abgelegt. Sie können aber durch das Löschen oder Verändern von einzelnen Zeilen beliebig umsortiert werden. Die gleiche Datenbankabfrage kann also zu unterschiedlichen Zeiten verschiedene Reihenfolgen der Ergebnisse liefern. Für den Anwender ist eine Tabelle eine ungeordnete Menge von Einträgen. Für die weitere Verarbeitung der von einer Datenbankabfrage gelieferten Ergebnisse ist es oftmals erforderlich, die Ergebnisse in einer definierten Reihenfolge anzuzeigen. Das ist mit dem folgenden Zusatz zum SQL-Befehl möglich.

select SELECT command ::= column SELECT * , DISTINCT ALL table. t_alias. FROM table WHERE condition t_alias ORDER BY ASC DESC c_alias ORDER BY: Schlüsselwort, das die Liste der Sortierfelder einleitet. Die Spalten, nach denen sortiert wird und die Spalten, die ausgewählt werden, müssen nicht identisch sein. ASC: Nach dieser Spalte wird aufsteigend sortiert DESC: Nach dieser Spalte wird absteigend sortiert

SQL> SELECT * FROM pruefung ORDER BY nachname, vorname, datum; NACHNAME VORNAME FACH DATUM NOTE FAKTOR Softwareprojekt 30.09.99 Bäcker Ewald 30.09.99 Bauer Jutta Datenorganisation 01.12.98 2 1 Bauer Else TI 06.09.99 4,7 1 Bauer Else DBS1 1 Huber Emma TI 25.10.98 3,3 1 Köhler Emil DBS1 01.10.99 2 1 Lehmann Hans Betriebssysteme 03.01.00 1,7 1 Lehmann Hans Diplomarbeit 01.10.98 2 Maier Fritz DBS1 05.09.99 2,3 1 Maier Fritz Datenorganisation 01.10.99 2,7 1 Müller Jutta DBS1 01.10.98 2,3 1 Müller Jutta Mathematik 01.09.99 3 1 Müller Jutta Diplomarbeit 25.10.99 2,7 2 Müller Else Mathematik 01.10.98 1,3 1 Müller Anna Diplomarbeit 25.10.98 2 2 Schmidt Hermann Diplomarbeit 01.10.98 4,7 2 Schulze Anton Datenorganisation 25.10.98 2,3 1 Schulze Anton DBS1 03.09.99 3,3 1 Schulze Anton TI 03.09.99 2,3 1 Es ist also möglich beliebige Spaltennamen als Sortierbegriffe nacheinander anzugeben. Die Begriffe können in einer beliebigen Reihenfolge eingegeben werden und sind nicht abhängig von der Reihenfolge der Spalten in der Tabelle. In diesem Fall wird die Ausgabe zuerst nach Nachnamen sortiert. Innerhalb gleicher Nachnamen wird nach dem Vornamen und innerhalb des gleichen Vornamens nach dem Datum sortiert.

null Markierung für nicht vorhandene Attributwerte Nullmarken können verschiedene Bedeutungen haben: Der Wert ist nicht bekannt Der Wert ist nicht eingegeben worden führen zu einer dreiwertigen Logik Das englische Wort null bedeutet auf deutsch: nichtig, ungültig. In relationalen Datenbanken ist es möglich, nicht vorhandene Werte zu markieren. Die Interpretation der nicht vorhandenen Werte ist von Kontext abhängig und muß sehr sorgfältig vorgenommen werden, um nicht falsche Schlüsse aus den Daten zu ziehen. Es ist sowohl möglich, dass der Wert nicht bekannt ist als auch, dass der Wert nicht eingegeben wurde. Durch die Einführung der Nullmarken existiert außer den Zuständen “wahr” und “falsch” noch der Zustand “null”. “null” Ù “wahr” º “null” “null” Ú “wahr” º “null” Ø“null” º “null” Tupel mit Nullmarken werden bei der Auswahl unterdrückt, wenn nicht ausdrücklich nach ihnen gefragt wird. Null und “Leerzeichen” sind unterschiedlich. Insbesondere kann unter Nachname oder Vorname der Wert “ “ (Leerzeichen) eingeben werden. Dieser Wert ist nicht sichtbar, wird aber nicht wie eine Nullmarke behandelt.

null Oracle8 SQL Reference, Release 8.0 Any arithmetic expression containing a null always evaluates to null. All scalar functions (except NVL and TRANSLATE) return null when given a null argument. Most group functions ignore nulls. Any arithmetic expression containing a null always evaluates to null. For example, null added to 10 is null. In fact, all operators (except concatenation) return null when given a null operand. All scalar functions (except NVL and TRANSLATE) return null when given a null argument. The NVL function can be used to return a value when a null occurs. For example, the expression NVL(COMM,0) returns 0 if COMM is null or the value of COMM if it is not null. Most group functions ignore nulls. For example, consider a query that averages the five values 1000, null, null, null, and 2000. Such a query ignores the nulls and calculates the average to be (1000+2000)/2 = 1500.

null SQL> SELECT nachname, vorname, fach, note 2 FROM pruefung 3 WHERE fach = 'Diplomarbeit' 4 AND (note<2 or note>= 2) 5 ORDER BY note; NACHNAME VORNAME FACH NOTE ---------- ---------- -------------------- --------- Müller Anna Diplomarbeit 2 Müller Jutta Diplomarbeit 2,7 Schmidt Hermann Diplomarbeit 4,7 Es sollen alle Zeilen angezeigt werden, bei denen die Note größer oder kleiner oder gleich 2 ist. Die Note von Else Bauer für das Fach DBS1 wird nicht angezeigt, weil die Null-Marke weder größer noch kleiner noch gleich 2 ist.

null SQL> SELECT nachname, vorname, fach 2 FROM pruefung 3 WHERE note IS NULL; NACHNAME VORNAME FACH ---------- ---------- -------------------- Lehmann Hans Diplomarbeit Bäcker Ewald Softwareprojekt Bauer Else DBS1 Die Syntax heißt:: WHERE note IS NULL; Der Ausdruck: WHERE note = NULL; führt zu einem falschen Ergebnis.

Anzeigen von Nullmarken SQL> SELECT NVL(nachname,'Kein Wert'), 2 NVL(vorname,'Kein Wert') 3 FROM pruefung; NVL(NACHNA NVL(VORNAM ---------- ---------- Maier Fritz Bauer Else Bäcker Ewald Kein Wert Müller Jutta Manchmal ist es notwendig, sich anzeigen zu lassen, ob eine Nullmarke oder ein Leerzeichen in der Datenbank steht.. Die Funktion NVL ersetzt eine Nullmarke durch den angegebenen Wert. Der Nachname zwischen Bäcker und Müller hat im Gegensatz zum Vornamen keine Null-Marke. In diesem Feld stehen ein oder mehrere Leerzeichen.

Anzeigen von Nullmarken SQL> SELECT '!' || nachname || '!' || vorname || '!' 2 FROM pruefung; '!'||NACHNAME|| '!'||VOR ----------------------- !Maier!Fritz! !Bauer!Else! !Bäcker!Ewald! ! !! !Müller!Jutta! Der Unterschied zwischen Null-Marken und Leerzeichen kann mit der angegbenen Abfrage deutlich angezeigt werden. ' Zeichenkette ' heisst, dass die mit ' eingeschlossene Zeichenkette nicht weiter analysiert, sondern unbeachtet an die Ausgabe weitergereicht werden soll. '!' bedeutet also, dass der ! in der Ausgabe erscheinen soll. || bedeutet das direkte Hintereinanderhängen von Zeichenketten. Der Nachname zwischen Bäcker und Müller enthält ein Leerzeichen, also ist zwischen den | ein Leerzeichen. Der Vorname zwischen Bäcker und Müller enthält eine Nullmarke, also ist zwischen den ! kein Leerzeichen.

Aggregatfunktionen Aggregatfunktionen oder Gruppenfunktionen fassen mehrere Zeilen einer Spalte zu einem Wert zusammen. Die angegebene Tabelle enthält die wichtigsten Aggregatfunktionen.

count SELECT COUNT (*) SELECT COUNT (expr) Anzahl aller Zeilen SELECT COUNT (expr) Anzahl aller Zeilen, die einen Wert in der angegebenen Spalte haben SELECT COUNT (DISTINCT expr) Anzahl aller unterschiedlichen Zeilen, die einen Wert in der angegebenen Spalte haben Die Funktion count zählt je nach der Art des Arguments eine unterschiedliche Auswahl von Zeilen zusammen.

count SQL> SELECT COUNT(*), COUNT(note), 2 COUNT(DISTINCT note) 3 FROM pruefung; COUNT(*) COUNT(NOTE) COUNT(DISTINCTNOTE) --------- ----------- ------------------- 20 16 8

Auswerten von Nullmarken SQL> SELECT AVG(note), SUM(note)/COUNT(*) 2 FROM pruefung; AVG(NOTE) SUM(NOTE)/COUNT(*) --------- ------------------ 2,6625 2,13 Die Funktion avg (=Durchschnitt) wertet die Nullmarken nicht aus; das programmierte Berechnen des Durchschnitts berücksichtigt die Null-Marken: Die Summe wird ohne Null-Marken berechnet, die Funktion COUNT(*) zählt alle Zeilen und kann so zu einem falschen Durchschnitt führen.

Group by Group by kennzeichnet die Zeilen einer Spalte, die durch eine Aggregatfunktion zusammengefaßt werden sollen. Wenn eine Aggregatfunktion nicht alle Zeilen einer bestimmten Spalte einer Tabelle zusammenfassen soll, sondern jeweils Teilmengen zusammenfassen soll, können diese Teilmengen mit dem group by - Zusatz zum SQL - Befehl gebildet werden.

select SELECT command ::= column SELECT * , DISTINCT ALL table. t_alias. FROM table WHERE condition t_alias ORDER BY ASC DESC c_alias GROUP BY expr GROUP BY: Schlüsselwort, das die Liste Gruppierkriterien einleitet. Die ausgewählten Zeilen werden entsprechend dem Wert von “expr” zusammengefaßt und es wird pro Gruppe der durch die Aggregatfunktion errechnete Wert zurückgegeben.

group by Wieviel Prüfungen wurden pro Fach durchgeführt? SQL> SELECT fach, COUNT(note) "Anzahl Pruefungen" 2 FROM pruefung 3 GROUP BY fach; FACH Anzahl Pruefungen -------------------- ----------------- Betriebssysteme 1 DBS1 4 Datenorganisation 3 Diplomarbeit 3 Mathematik 2 Softwareprojekt 0 TI 3 Das Fach mit der Nullmarke wird mitgezählt, weil die Aggregatfunktion auf die Spalte “Note” angewendet wird. Es gibt also ein Fach, das keinen Namen hat und in diese Fach ist keine Prüfung abgelegt worden. Bei der Anzahl der Prüfungen wird die Null-Marke nicht mitgezählt. Darum werden nur drei Prüfungen im Fach “Diplomarbeit” gezählt. Die Diplomarbeit von Hans Lehmann hat keine Note und wird also nicht mitgezählt. Die SELECT-Liste einer SELECT-Anweisung mit GROUP BY Klausel darf nur folgende Elemente enthalten: Konstanten Aggregatfunktionen die Funktionen USER, UID, SYSDATE Ausdrücke wie in der GROUP BY Klausel davon abgeleitete Ausdrücke

group by Wie lautet der Notendurchschnitt pro Fach? SQL> SELECT fach, AVG(note) "Durchschnitt" 2 FROM pruefung 3 GROUP BY fach 4 ORDER BY "Durchschnitt"; FACH Durchschnitt -------------------- ------------ Betriebssysteme 1,7 Mathematik 2,15 Datenorganisation 2,3333333 DBS1 2,475 Diplomarbeit 3,1333333 TI 3,4333333 Softwareprojekt 8 Zeilen ausgewählt. Achtung: es werden 8 Zeilen ausgewählt, aber es sind nur 7 Zeilen sichtbar. Die letzte Zeile besteht aus einer Null-Marke für das Fach und einer Null-Marke für den Notendurchschnitt. “ORDER BY” akzeptiert auch einen Spaltenalias als Sortierkriterium. „GROUP BY“ akzeptiert keinen Spaltenalias!

group by Wie lautet der Notendurchschnitt pro Fach im Jahr 1999? SQL> SELECT fach, AVG(note) "Durchschnitt" 2 FROM pruefung 3 WHERE datum > '01.01.99' 4 GROUP BY fach 5 ORDER BY "Durchschnitt"; FACH Durchschnitt -------------------- ------------ DBS1 2,5333333 Datenorganisation 2,7 Diplomarbeit 2,7 Mathematik 3 TI 3,5 Softwareprojekt 7 Zeilen ausgewählt. Die WHERE - Klausel wählt aus der Gesamtheit eine Grundmenge aus, auf die dann die Aggregatfunktion angewendet wird. Es wird also zuerst die WHERE-Bedingung ausgewertet und auf die übrig gebliebenen Zeilen wird dann die GROUP-BY Bedingung angewendet.

Relationenalgebra Produkt Das Produkt der Tabellen T1 und T2 hat die Attribute von T1 und T2. Jedes Tupel von T1 wird mit jedem Tupel von T2 verbunden. Das Produkt wird ohne Rücksicht auf die Bedeutung der Attribute und die Sinnhaftigkeit der Ergebnisse gebildet. Es ist die Kunst den Programmierers, aus dieser Menge diejenigen Tupel auszuwählen, die für die weitere Verarbeitung sinnvoll sind.

Relationen Produkt

Kreuzprodukt SQL> SELECT * FROM belegung; NACHNAME VORNAME VORLESUNG ---------- ---------- --------------- Müller Jutta Mathematik Köhler Emil DBS1 Maier Fritz Programmierung SQL> SELECT * FROM stuga; NACHNAME VORNAME STUDIENGANG Müller Jutta Informatik Köhler Emil Fachübersetzen Maier Fritz InfManagement Die Tabelle „belegung“ enthält die Vorlesungen, die ein Student besucht. Die Tabelle „stuga“ enthält den Studiengang, für den ein Student eingeschrieben ist.

Kreuzprodukt SQL> SELECT vorlesung, studiengang 2 FROM belegung, stuga; VORLESUNG STUDIENGANG --------------- --------------- Mathematik Informatik DBS1 Informatik Programmierung Informatik Mathematik Fachübersetzen DBS1 Fachübersetzen Programmierung Fachübersetzen Mathematik InfManagement DBS1 InfManagement Programmierung InfManagement Es wird jedes Element der Tabelle belegung mit jedem Element der Tabelle stuga verknüpft. Oracle bestimmt die Reihenfolge der Verknüpfungen an Hand von Zusatzinformationen zu den einzelnen Tabellen wie z.B. vorhandene Indizes oder die Größe der Tabelle. Da in diesem Beispiel keinerlei Zusatzinformationen vorliegen, entspricht die Reihenfolge der Verknüpfungen der Reihenfolge der angegebenen Tabellen.

Kreuzprodukt SQL> SELECT vorlesung, studiengang 2 FROM stuga, belegung; VORLESUNG STUDIENGANG --------------- --------------- Mathematik Informatik Mathematik Fachübersetzen Mathematik InfManagement DBS1 Informatik DBS1 Fachübersetzen DBS1 InfManagement Programmierung Informatik Programmierung Fachübersetzen Programmierung InfManagement Durch Vertauschen der Reihenfolge der Tabellen wird die Reihenfolge der ausgegebenen Zeilen beeinflußt. Dieses Verhalten entspricht der Tatsache, daß SQL auf Mengen operiert, deren Elemente aus der Sicht des Anwendungsprogrammierers gleichwertig sind. In diesem Beispiel ist der Tabellenname „stuga“ fast identisch mit dem Spaltennamen „studiengang“. Um Verwechslungen in Zukunft zu vermeiden, werden Tabellen in Zukunft mit dem Namenspräfix „ta_“ versehen.

Namenskonventionen Tabellen werden in Zukunft immer den Präfix „ta_“ haben. In diesem Beispiel ist der Tabellenname “stuga” fast identisch mit dem Spaltennamen “studiengang”. Um Verwechslungen in Zukunft zu vermeiden, werden Tabellen in Zukunft mit dem Namenspräfix “ta_” versehen. Namenskonventionen sind dann sinnvoll und notwendig, wenn große Projekte von mehreren Personen bearbeitet werden. Projekte, die mehrere hundert Tabellen enthalten, sind keine Seltenheit. Jede dieser Tabellen hat einige Spalten. Weitere typische Datenbankobjekte sind: Index stored procedure Schlüssel Rolle

equijoun SQL> SELECT ta_stuga.nachname, ta_stuga.vorname, 2 ta_stuga.studiengang, ta_belegung.vorlesung 3 FROM ta_stuga, ta_belegung 4 WHERE ta_stuga.nachname = ta_belegung.nachname 5 AND ta_stuga.vorname = ta_belegung.vorname; NACHNAME VORNAME STUDIENGANG VORLESUNG ---------- ---------- --------------- -------------- Köhler Emil Fachübersetzen DBS1 Maier Fritz InfManagement Programmierung Müller Jutta Informatik Mathematik Die einfachste und an meisten verwendete Art, sinnvolle Ergebnisse aus dem Produkt zweier oder mehrerer Tabellen zu bekommen, ist der equi-join. Hierbei werden in der where-Klausel nur solche Tupel ausgewählt, die identische Attributwerte in den unterschiedlichen Tabellen besitzen. Die vorliegende SQL-Abfrage ist durch die Angabe der Tabellen sehr unübersichtlich geworden. Abkürzungen für die Tabellennamen, sogenannte alias, erlauben eine übersichtlichere Gestaltung der SQL-Abfrage.

select SELECT command ::= column SELECT * , DISTINCT ALL table. t_alias. FROM table WHERE condition t_alias ORDER BY ASC DESC c_alias GROUP BY expr HAVING condition table: Tabellenname; ist notwendig, wenn identische Spaltennamen in unterschiedlichen Tabellen angesprochen werden. t_alias: Alias für einen Tabellennamen. Der Alias wird in der FROM-Klausel definiert und kann in allen anderen Klauseln benutzt werden.

equijoun SQL> SELECT s.nachname, s.vorname, 2 s.studiengang, b.vorlesung 3 FROM ta_stuga s, ta_belegung b 4 WHERE s.nachname = b.nachname 5 AND s.vorname = b.vorname; NACHNAME VORNAME STUDIENGANG VORLESUNG ---------- ---------- --------------- --------------- Köhler Emil Fachübersetzen DBS1 Maier Fritz InfManagement Programmierung Müller Jutta Informatik Mathematik Durch die Einführung eines Tabellenalias wird die SELECT-Anweisung übersichtlicher. SELECT-Anweisungen von mehr als einer DIN A4 Seite und mehr als 10 Tabellen sind keine Seltenheit.

Selektion Beispiel Diese drei Tabellen sind die Grundlage für die folgenden SQL-Abfragen. Aus Platzgründen sind nicht alle Spalten der Tabellen abgebildet. Zusätzlich gibt es noch die Spalte Nachname in den Datenbanktabellen ta_belegung und ta_stuga. wie heißen die Informatiker in der Mathematik-Vorlesung wie lang ist die durchschnittliche Studiendauer der DBS1-Hörer

equijoin wie heißen die Informatiker in der Mathematik-Vorlesung SQL> SELECT b.vorname, b.nachname, s.studiengang 2 FROM ta_belegung b, ta_stuga s 3 WHERE b.vorname = s.vorname 4 AND b.nachname = s.nachname 5 AND b.vorlesung = 'Mathematik' 6 AND s.studiengang = 'Informatik'; VORNAME NACHNAME STUDIENGANG ---------- ---------- --------------- Hans Lehmann Informatik Jutta Müller Informatik Es werden die beiden Tabellen ta_belegung und ta_stuga benutzt. Der equi-join, also die Verbindung der zueinander gehörenden Zeilen geschieht über den gleichen Nachamen und den gleichen Vornamen. Aus der Produkttabelle werden die Zeilen herausgesucht, bei denen die Vorlesung ‚ Mathematik‘ und der Studiengang ‚Informatik‘ heissen.

equijoin wie lang ist die durchschnittliche Studiendauer der DBS1-Hörer SQL> SELECT b.vorlesung, avg(d.dauer) 2 FROM ta_belegung b, ta_stuga s, ta_dauer d 3 WHERE b.vorname = s.vorname 4 AND b.nachname = s.nachname 5 AND s.studiengang = d.studiengang 6 AND b.vorlesung = 'DBS1' 7 GROUP BY b.vorlesung; VORLESUNG AVG(D.DAUER) --------------- ------------ DBS1 9,5 Es wird kein Element aus der Tabelle ta_stuga angezeigt. Die Spalten Vorname und Nachname dieser Tabelle dienen als Verbindung zwischen den Tabellen ta_belegung und ta_dauer.

selfjoin SQL> SELECT * FROM ta_personal; PERS# NAME ABTEILUNG CHEF --------- ---------- --------------- --------- 10 Jutta DV 14 11 Emil DV 14 12 Fritz Management 100 13 Hans Entwicklung 12 14 Hermann DV 12 100 Else Es ist möglich, das Kreuzprodukt einer Tabelle mit sich selbst zu bilden. Diese Tabelle beschreibt die Personalstruktur in einer Firma: Für jeden Mitarbeiter ist sein Name, die Personalnummer , die Abteilung und die Personalnummer seines Chefs vorhanden. Die folgende Abfrage ermittelt zu jedem Chef die dazugehörigen Mitarbeiter.

selfjoin Welcher Chef hat welche Mitarbeiter? SQL> SELECT p1.name "Chef", p2.name "Mitarbeiter" 2 from ta_personal p1, 3 ta_personal p2 4 where p1.pers# = p2.Chef 5 ORDER BY p1.name; Chef Mitarbeite ---------- ---------- Else Fritz Fritz Hans Fritz Hermann Hermann Jutta Hermann Emil Bearbeitungsvorschrift: Erste Personal# nehmen (Pers# 10) nehmen und prüfen, ob in der Chef-Spalte irgendwo der Eintrag 10 auftritt, ob also Jutta von irgendwem der Chef ist. Dann mit der nächsten Poersonal# ebenso verfahren. Die Pers# 12 ist die erste, die bei Jutta und Emil in der „Chef-Spalte“ eingetragen ist.

Zusammenfassung order by sortiert ungeordnete Zeilen group by bildet Teilmengen für Aggregatfunktionen join verbindet mehrere Tabellen selfjoin verbindet eine Tabelle mit sich selbst