340 likes | 493 Views
SQL 2. Order by null Aggregatfunktionen group by Join subselect. SQL> SELECT * FROM pruefung; NACHNAME VORNAME FACH DATUM NOTE FAKTOR ---------- ---------- -------------------- -------- --------- ---------
E N D
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
SELECT * , DISTINCT column ALL t_alias. c_alias , table. FROM table t_alias WHERE condition , column ORDER BY ASC DESC select SELECT command ::=
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
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
nullOracle8 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.
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
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
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 Maier Fritz
Anzeigen von Nullmarken SQL> SELECT '!' || nachname || '!' || vorname || '!' 2 FROM pruefung; '!'||NACHNAME|| '!'||VOR ----------------------- !Maier!Fritz! !Bauer!Else! !Bäcker!Ewald! ! !! !Müller!Jutta! !Maier!Fritz!
count SELECT COUNT (*) • 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
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
Group by Group by kennzeichnet die Zeilen einer Spalte, die durch eine Aggregatfunktion zusammengefaßt werden sollen.
SELECT command ::= SELECT * , DISTINCT column ALL t_alias. c_alias table. , FROM table t_alias WHERE condition , expr GROUP BY , column ORDER BY ASC DESC select
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 0
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.
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.
RelationenalgebraProdukt 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.
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
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
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
Namenskonventionen Tabellen werden in Zukunft immer den Präfix „ta_“ haben.
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
SELECT command ::= SELECT * , DISTINCT column ALL t_alias. c_alias table. , FROM table t_alias WHERE condition , expr GROUP BY HAVING condition , column ORDER BY ASC DESC select
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
SelektionBeispiel 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
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
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
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
Zusammenfassung • order by sortiert ungeordnete Zeilen • group by bildet Teilmengen für Aggregatfunktionen • join verbindet mehrere Tabellen • selfjoin verbindet eine Tabelle mit sich selbst