Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

SQL 2 Order by null Aggregatfunktionen group by Join subselect.

Ähnliche Präsentationen


Präsentation zum Thema: "SQL 2 Order by null Aggregatfunktionen group by Join subselect."—  Präsentation transkript:

1 SQL 2 Order by null Aggregatfunktionen group by Join subselect

2 SQL> SELECT * FROM pruefung;
NACHNAME VORNAME FACH DATUM NOTE FAKTOR Lehmann Hans Betriebssysteme , Müller Else Mathematik , Lehmann Hans Diplomarbeit Schmidt Hermann Diplomarbeit , Bauer Jutta Datenorganisation Schulze Anton Datenorganisation , Huber Emma TI , Müller Jutta Diplomarbeit , Müller Anna Diplomarbeit Müller Jutta Mathematik Schulze Anton DBS , Schulze Anton TI , Maier Fritz DBS , Bauer Else TI , Bäcker Ewald Softwareprojekt Müller Jutta DBS , Maier Fritz Datenorganisation , Köhler Emil DBS Bauer Else DBS 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.

3 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

4 SQL> SELECT * FROM pruefung ORDER BY nachname, vorname, datum;
NACHNAME VORNAME FACH DATUM NOTE FAKTOR Softwareprojekt Bäcker Ewald Bauer Jutta Datenorganisation Bauer Else TI , Bauer Else DBS Huber Emma TI , Köhler Emil DBS Lehmann Hans Betriebssysteme , Lehmann Hans Diplomarbeit Maier Fritz DBS , Maier Fritz Datenorganisation , Müller Jutta DBS , Müller Jutta Mathematik Müller Jutta Diplomarbeit , Müller Else Mathematik , Müller Anna Diplomarbeit Schmidt Hermann Diplomarbeit , Schulze Anton Datenorganisation , Schulze Anton DBS , Schulze Anton TI , 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.

5 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.

6 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 Such a query ignores the nulls and calculates the average to be ( )/2 = 1500.

7 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 Müller Jutta Diplomarbeit ,7 Schmidt Hermann Diplomarbeit ,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.

8 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.

9 Anzeigen von Nullmarken
SQL> SELECT NVL(nachname,'Kein Wert'), 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.

10 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.

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

12 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.

13 count SQL> SELECT COUNT(*), COUNT(note), 2 COUNT(DISTINCT note)
3 FROM pruefung; COUNT(*) COUNT(NOTE) COUNT(DISTINCTNOTE)

14 Auswerten von Nullmarken
SQL> SELECT AVG(note), SUM(note)/COUNT(*) 2 FROM pruefung; AVG(NOTE) SUM(NOTE)/COUNT(*) 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.

15 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.

16 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.

17 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 DBS Datenorganisation Diplomarbeit Mathematik Softwareprojekt TI 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

18 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 ,7 Mathematik ,15 Datenorganisation , DBS ,475 Diplomarbeit , TI , 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!

19 group by Wie lautet der Notendurchschnitt pro Fach im Jahr 1999?
SQL> SELECT fach, AVG(note) "Durchschnitt" 2 FROM pruefung 3 WHERE datum > ' ' 4 GROUP BY fach 5 ORDER BY "Durchschnitt"; FACH Durchschnitt DBS , Datenorganisation ,7 Diplomarbeit ,7 Mathematik TI ,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.

20 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.

21 Relationen Produkt

22 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.

23 Kreuzprodukt SQL> SELECT vorlesung, studiengang
2 FROM belegung, stuga; VORLESUNG STUDIENGANG Mathematik Informatik DBS Informatik Programmierung Informatik Mathematik Fachübersetzen DBS Fachübersetzen Programmierung Fachübersetzen Mathematik InfManagement DBS 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.

24 Kreuzprodukt SQL> SELECT vorlesung, studiengang
2 FROM stuga, belegung; VORLESUNG STUDIENGANG Mathematik Informatik Mathematik Fachübersetzen Mathematik InfManagement DBS Informatik DBS Fachübersetzen DBS 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.

25 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

26 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.

27 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.

28 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.

29 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

30 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.

31 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) DBS ,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.

32 selfjoin SQL> SELECT * FROM ta_personal; PERS# NAME ABTEILUNG CHEF
10 Jutta DV 11 Emil DV 12 Fritz Management 13 Hans Entwicklung 14 Hermann DV 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.

33 selfjoin Welcher Chef hat welche Mitarbeiter?
SQL> SELECT p1.name "Chef", p2.name "Mitarbeiter" 2 from ta_personal p1, 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.

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


Herunterladen ppt "SQL 2 Order by null Aggregatfunktionen group by Join subselect."

Ähnliche Präsentationen


Google-Anzeigen