340 likes | 508 Vues
This article covers essential SQL concepts, including the use of aggregate functions, the GROUP BY clause, and handling NULL values. Learn how to effectively query databases by utilizing various SQL commands such as SELECT, JOIN, and subqueries. Gain insights into how to summarize query results, group data based on certain criteria, and manage NULL values to improve data accuracy in your results. Examples from student grades in different subjects illustrate practical applications of these techniques.
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