1 / 92

Einf hrung in SQL

Seite 2 . Was ist SQL?. SQL erblickte Ende der 70er Jahre bei IBM in Kalifornien das Licht der Welt SQL steht f

eilis
Télécharger la présentation

Einf hrung in SQL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    2. Seite 2 Was ist SQL? SQL erblickte Ende der 70er Jahre bei IBM in Kalifornien das Licht der Welt SQL steht für Structured Query Language – zu deutsch : strukturierte Abfragesprache SQL ist nichtprozedural, das bedeutet »was« statt »wie«. SQL beschreibt, welche Daten abzurufen, zu löschen oder einzufügen sind und nicht, wie das zu geschehen hat Das bekannteste Modell zur Datenspeicherung ist die relationale Datenbank, die auf einen Artikel Dr. E. F. Codds von 1970 zurückgeht

    3. Seite 3 Was ist SQL? SQL ist die De-facto-Standardsprache, mit der sich Daten aus relationalen Datenbanken abrufen und dort manipulieren lassen SQL ist eine echte plattformunabhängige und produktübergreifende Sprache Die eigentliche Verwaltung übernimmt das Relationale Datenbank-managementsystem (RDBMS), das über SQL angesprochen wird SQL wird verwendet als interpretierende und eingebundene (embedded) Sprache

    4. Seite 4 Goldene Regeln zu relationalen Datenbanken Verwaltung der Datenbanken vollständig über relationale Fähigkeiten Datenbanken und Inhalte auf derselben logischen Ebene wie die Daten selbst Operationen für Einfügen, Aktualisieren, Löschen und Abfragen ganzer Tabellen Abfragesprache(n) mit vollständigen Befehlssatz für Datendefinition, Manipulation, Integritätsregeln, Autorisierung und Transaktionen Unumgehbare Integritätsregeln Jeder Wert auffindbar durch Kombination von Tabellenname, Primärschlüssel und Spaltenname

    5. Seite 5 Goldene Regeln zu relationalen Datenbanken Nullwerte durchgängig gleich behandelt als unbekannte oder fehlende Daten und unterschieden von Standardwerten Alle Sichten, die theoretisch aktualisiert werden können, lassen sich vom System aktualisieren Physikalische und logische Datenunabhängigkeit Verteilungsunabhängigkeit

    6. Seite 6 Was macht man also mit SQL? Struktur einer Datenbank modifizieren Einstellungen der Systemsicherheit ändern Benutzerberechtigungen für Datenbanken oder Tabellen einrichten Datenbank nach Informationen abfragen Inhalt einer Datenbank aktualisieren

    7. Seite 7 Bekannte SQL-Implementierungen Microsoft Access Microsoft Query Microsoft SQL-Server ODBC Oracle Delphi Sybase DB2 Informix

    8. Seite 8 SQL und der Lauf der Zeit - 86, 89 SQL wurde im Jahre 1986 als ANSI-Standard formuliert Der ANSI-1989-Standard (oder SQL-89) definiert innerhalb eines Anwendungsprogramms drei Typen der Kommunikation mit SQL: Modulsprache Eingebettetes SQL Direkter Aufruf Modulsprache Arbeitet in Programmen mit Prozeduren. Eine Anwendung kann diese Prozeduren aufrufen und Werte über Parameter aus den Prozeduren zurückerhalten Eingebettetes SQL Verwendet SQL-Anweisungen, die in den eigentlichen Programmcode eingebettet sind. Diese Methode erfordert oft einen Präcompiler, der die SQL-Anweisungen verarbeitet. Der Standard definiert Anweisungen für Pascal, FORTRAN, COBOL und PL/1 Direkter Aufruf Schnittstellen auf Aufrufebene dürften dem Anwendungsprogrammierer nicht neu sein. Wenn man mit ODBC arbeitet, füllt man zum Beispiel einfach eine Variable mit der SQL-Anweisung und ruft eine Funktion auf, um die SQL-Anweisung an die Datenbank zu schicken. Fehler oder Ergebnisse erhält man über Aufrufe anderer Funktionen, die speziell für diese Zwecke vorgesehen sind. Ergebnisse werden über das sogenannte Binden von Variablen zurückgegeben. Modulsprache Arbeitet in Programmen mit Prozeduren. Eine Anwendung kann diese Prozeduren aufrufen und Werte über Parameter aus den Prozeduren zurückerhalten Eingebettetes SQL Verwendet SQL-Anweisungen, die in den eigentlichen Programmcode eingebettet sind. Diese Methode erfordert oft einen Präcompiler, der die SQL-Anweisungen verarbeitet. Der Standard definiert Anweisungen für Pascal, FORTRAN, COBOL und PL/1 Direkter Aufruf Schnittstellen auf Aufrufebene dürften dem Anwendungsprogrammierer nicht neu sein. Wenn man mit ODBC arbeitet, füllt man zum Beispiel einfach eine Variable mit der SQL-Anweisung und ruft eine Funktion auf, um die SQL-Anweisung an die Datenbank zu schicken. Fehler oder Ergebnisse erhält man über Aufrufe anderer Funktionen, die speziell für diese Zwecke vorgesehen sind. Ergebnisse werden über das sogenannte Binden von Variablen zurückgegeben.

    9. Seite 9 SQL und der Lauf der Zeit - 92 Der Standard ANSI 1992 (SQL-92) setzte sich als internationaler Standard durch und erfuhr drei Erweiterungen (CLI-95, PSM-96, OLB-98) Es wurden drei Ebenen des Sprachumfangs eingeführt: Entry Intermediate Full Zu den neu eingeführten Merkmalen gehören: Verbindungen zu Datenbanken rollbare Cursor(en) dynamisches SQL Outer Joins Vor der Einführung von dynamischem SQL setzte man vorrangig eingebettetes SQL in Anwendungsprogrammen ein. Eingebettetes SQL - das man auch weiterhin verwendet - arbeitet mit statischem SQL. Die SQL-Anweisung wird dabei in die Anwendung eingebaut und läßt sich zur Laufzeit nicht ändern. Vom Prinzip her kann man das mit dem Unterschied zwischen Compiler und Interpreter vergleichen. Eingebettetes SQL weist zwar eine gute Leistungsbilanz auf, ist aber weniger flexibel und entspricht nicht immer den heutigen Anforderungen der sich ändernden Büroumgebungen. Auf dynamisches SQL gehen wir in Kürze ein. Mit dynamischem SQL lassen sich SQL-Anweisungen zur Laufzeit vorbereiten. Dynamisches SQL schneidet hinsichtlich der Leistung zwar schlechter ab als eingebettetes SQL, bietet aber dem Anwendungsentwickler (und Benutzer) ein größeres Maß an Flexibilität. Schnittstellen auf Aufrufebene wie ODBC oder die DB-Bibliothek von Sybase sind Beispiele für dynamisches SQL.Vor der Einführung von dynamischem SQL setzte man vorrangig eingebettetes SQL in Anwendungsprogrammen ein. Eingebettetes SQL - das man auch weiterhin verwendet - arbeitet mit statischem SQL. Die SQL-Anweisung wird dabei in die Anwendung eingebaut und läßt sich zur Laufzeit nicht ändern. Vom Prinzip her kann man das mit dem Unterschied zwischen Compiler und Interpreter vergleichen. Eingebettetes SQL weist zwar eine gute Leistungsbilanz auf, ist aber weniger flexibel und entspricht nicht immer den heutigen Anforderungen der sich ändernden Büroumgebungen. Auf dynamisches SQL gehen wir in Kürze ein. Mit dynamischem SQL lassen sich SQL-Anweisungen zur Laufzeit vorbereiten. Dynamisches SQL schneidet hinsichtlich der Leistung zwar schlechter ab als eingebettetes SQL, bietet aber dem Anwendungsentwickler (und Benutzer) ein größeres Maß an Flexibilität. Schnittstellen auf Aufrufebene wie ODBC oder die DB-Bibliothek von Sybase sind Beispiele für dynamisches SQL.

    10. Seite 10 SQL und der Lauf der Zeit - 1999 Der aktuelle Standard heißt SQL:1999 Zwei Faktoren der geänderten Namensgebung: Internationalität (ISO/ANSI) Y2K-Problem Zu den neu eingeführten Merkmalen gehören unter anderem: Neue Datentypen (Endlich Boolean!) Benutzerdefinierte Typen Große Objekttypen Neue Möglichkeiten in der Datenkonvertierung

    11. Seite 11 Groß- und Kleinschreibung Beachten Sie, dass Groß- und Kleinschreibung in der Syntax von SQL keine Rolle spielt. Beachten Sie aber auch, dass es SQL-Dialekte gibt, die beim Suchen von Daten Groß- und Kleinschreibung unterscheiden, während andere dies wiederum nicht tun!

    12. Seite 12 Die Syntaxdiagramme dieser Schulung Schlüsselwort: CREATE (Großgeschrieben.) Leerstelle: ? (Zur besseren Erkennung als Kästchen dargestellt.) Platzhalter: Feld (Normale Schreibweise.)

    13. Seite 13 Die Syntaxdiagramme dieser Schulung Optionale Angabe: [ ] (Die eckigen Klammern werden nicht geschrieben!) Wiederholung: […] (Eine Wiederholung bezieht sich auf die übergeordnete Klammer.) Gruppe: { } (Zur Verdeutlichung einer Gruppierung. Die Klammern werden nicht geschrieben.) Standardwert (Default): ASC (Unterstrichen.) Entweder oder: | (Sich ausschließende Möglichkeiten werden durch einen senkrechten Strich getrennt.)

    14. Seite 14 Daten abfragen mit SELECT Die einfache SELECT-Anweisung dient zum Abfragen von Daten in einer Tabelle: Syntax: SELECT?*|Feld[,?Feld[…]]?FROM?Tabellenname; Beispiele: SELECT * FROM Kunde; SELECT Vorname, Name FROM Kunde;

    15. Seite 15 Daten sortieren mit ORDER BY Die ORDER BY-Anweisung sortiert Abfragen auf- oder absteigend nach einem oder mehreren Feldern: Syntax: SELECT?*|Feld[,?Feld[…]]?FROM?Tabellenname ORDER?BY?Feld?[ASC|DESC][,?Feld?[ASC|DESC][…]]; Beispiele: SELECT * FROM Bestellung ORDER BY Wann DESC; SELECT Vorname, Name, TelefonNr FROM Kunde ORDER BY Name, Vorname;

    16. Seite 16 Daten filtern mit DISTINCT Die DISTINCT-Anweisung unterdrückt die Anzeige von mehrfach vorkommenden Werten: Syntax: SELECT?[DISTINCT]?*|Feld[,?Feld[…]]?FROM?Tabellenname ORDER?BY?Feld?[ASC|DESC][,?Feld?[ASC|DESC][…]]; Beispiele: SELECT DISTINCT TelefonNr FROM Bestellung ORDER BY TelefonNr ASC; SELECT DISTINCT TelefonNr, Wann FROM Bestellung ORDER BY TelefonNr ASC; ALL ansprechen.ALL ansprechen.

    17. Seite 17 Operatoren - Übersicht Mit Operatoren gibt man innerhalb eines Ausdrucks an, wie die Daten entsprechend der spezifizierten Bedingungen abzurufen sind. In SQL unterscheidet man sechs Gruppen von Operatoren: Arithmetische Operatoren Vergleichsoperatoren Zeichenoperatoren Logische Operatoren Mengenoperatoren Odds and ends: Verschiedene Operatoren

    18. Seite 18 Operatoren – Arithmetische Die folgenden arithmetischen Operatoren gibt es in SQL: + Addition - Subtraktion * Multiplikation / Division % Modulo

    19. Seite 19 Operatoren – Arithmetische: + - * / Die Grundrechenarten werden folgendermaßen angewendet: Beispiele: SELECT Pizza, Groesse, Preis, Preis*1.2 FROM PizzaGroesse ORDER BY Groesse; SELECT Pizza, Groesse, Preis, Groesse-2 FROM PizzaGroesse ORDER BY Groesse; Zahlenangaben werden amerikanisch dargestellt. Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    20. Seite 20 Inkognito: Alias (Spalten umbenennen) Um die teilweise merkwürdige Namensgebung errechneter Spalten zu beheben, kann man einen Namen für das Ergebnis errechneter Spalten festlegen. Die Syntax variiert jedoch je nach Umgebung. Syntax (Variante 1): [(]ArithmetischerAusdruck[)]?Name Syntax (Variante 2): [(]ArithmetischerAusdruck[)][?]=[?]Name Syntax (Variante 3): [(]ArithmetischerAusdruck[)]?ALIAS?Name Syntax (Variante 4): [(]ArithmetischerAusdruck[)]?AS?Name Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    21. Seite 21 Inkognito: Alias (Spalten umbenennen) Beispiele: SELECT Pizza, Groesse, Preis, Preis*2.5 AS EuroNeupreis FROM PizzaGroesse ORDER BY Groesse; SELECT Pizza, Groesse, Preis, (Groesse-2) AS Spargroesse FROM PizzaGroesse ORDER BY Groesse; SELECT Pizza, Groesse, -Preis AS Gutschrift FROM PizzaGroesse ORDER BY Preis DESC, Pizza, Groesse; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    22. Seite 22 Operatoren – Arithmetische: % (Modulo) Der Operator Modulo führt eine Division durch und liefert den Rest statt des normalen Ergebnisses! Zu beachten ist, dass Access statt des Prozentzeichens den Operator MOD verwendet. Beispiel: SELECT Pizza, Groesse, Preis, Groesse MOD 10 AS AbweichungVonDezimetern FROM PizzaGroesse ORDER BY Groesse; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    23. Seite 23 Daten filtern mit WHERE Die WHERE-Anweisung filtert selektierte Daten nach Kriterien: Syntax: SELECT?[DISTINCT]?*|[DISTINCT]?Feld[,[DISTINCT]?Feld[…]]?FROM?Tabellenname WHERE?Kriterium[?LogischerOperator?Kriterium[…]] ORDER?BY?Feld?[ASC|DESC][,?Feld?[ASC|DESC][…]]; Der Aufbau eines Kriteriums: Als Kriterium wird ein relevantes Feld durch einen Operator mit den gewünschten Daten angegeben. (Genauer sehen wir dies bei den folgenden Operatoren.) Schreibweise eines Datums: in Rauten eingeschlossen und „amerikanisch“ notiert, also in der Reihenfolge Monat/Tag/Jahr; Uhrzeiten in 12-Stunden-Angabe. Schreibweise eines Datums: in Rauten eingeschlossen und „amerikanisch“ notiert, also in der Reihenfolge Monat/Tag/Jahr; Uhrzeiten in 12-Stunden-Angabe.

    24. Seite 24 Operatoren – Vergleichsoperatoren Vergleichsoperatoren sind umgangssprachlich: Unter / vor / weniger als Bis / frühestens / höchstens Gleich / genau soviel wie / exakt Ab / spätestens / mindestens Über / nach / mehr als Nicht (gleich) / ungleich In der EDV bedeutet das: < kleiner als <= kleiner (oder) gleich = gleich >= größer (oder) gleich > größer als <> ungleich (auch !=) Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma! Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    25. Seite 25 Operatoren – Vergleichsoperatoren Beispiele: SELECT Vorname, Name FROM Kunde WHERE Name='Wahrendorf'; SELECT DISTINCT TelefonNr FROM Bestellung WHERE Wann>=#03/20/2001# ORDER BY TelefonNr; Wie Sie hoffentlich erkennen können, werden Texte in einfache Anführungszeichen eingeschlossen. (Ein Anführungszeichen im Text wird durch zwei einfache dargestellt.) Datums- und Zeitangaben werden in Rauten eingeschlossen und in amerikanischer Schreibweise dargestellt. Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    26. Seite 26 Operatoren – Zeichenoperatoren Zeichenoperatoren sind für den Umgang mit Zeichenfolgen (also Namen o.ä.) gedacht: || Verkettung von Zeichenfolgen LIKE Suchen nach Textmustern mit Platzhaltern: % Platzhalter für beliebig viele Zeichen _ Platzhalter für genau ein Zeichen ESCAPE Definiert eine Maskierung für das Suchen eines Prozentzeichens Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    27. Seite 27 Operatoren – Zeichenoperatoren: Verkettung Access verwendet für die Textverkettung das „kaufmännische Und“ (&): Beispiel: SELECT Name & ', ' & Vorname AS Kundenname FROM Kunde ORDER BY Name, Vorname; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    28. Seite 28 Operatoren – Zeichenoperatoren: LIKE Syntax: Feld?[NOT]?LIKE?' Muster ' Access verwendet DOS-Platzhalter für LIKE: % wird ersetzt durch * _ wird ersetzt durch ? Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    29. Seite 29 Operatoren – Zeichenoperatoren: LIKE Beispiele: SELECT Vorname, Name FROM Kunde WHERE Name>='M??er' ORDER BY Name, Vorname; SELECT Vorname, Name FROM Kunde WHERE Name LIKE '*dorf' ORDER BY Name, Vorname; SELECT Vorname, Name, TelefonNr FROM Kunde WHERE TelefonNr LIKE '*850???' ORDER BY Name, Vorname; SELECT Vorname, Name, TelefonNr FROM Kunde WHERE Anschrift NOT LIKE '*Benzstraße*' ORDER BY Name, Vorname; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    30. Seite 30 Operatoren – Logische Operatoren Logische Operatoren sind hauptsächlich für die Verkettung verschiedener Kriterien gedacht, außer der Negation: AND Alle Kriterien müssen zutreffen OR Mindestens ein Kriterium muss zutreffen NOT Negation, Verkehrung ins Gegenteil (Ist bereits bei LIKE benutzt worden.) Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    31. Seite 31 Operatoren – Logische Operatoren Beispiele: SELECT Vorname, Name, TelefonNr, Anschrift FROM Kunde WHERE Vorname='Sabine' AND Name='Mustermann' ORDER BY Name, Vorname; SELECT Pizza, Groesse, Preis, Groesse - 10 AS Ueber10Zentimeter FROM PizzaGroesse WHERE Groesse>=10 AND Groesse<20 ORDER BY Groesse; SELECT Name FROM Zutat WHERE Name LIKE 'B*' OR Name LIKE 'S*' AND Name<>'Salami' ORDER BY Name; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    32. Seite 32 Operatoren – Andere: BETWEEN Mit dem BETWEEN-Operator (also: zwischen) können Sie sich so manches AND sparen. Syntax: Feld?[NOT]?BETWEEN?[ ' ] Muster [ ' ]?AND?[ ' ] Muster [ ' ] Als Muster können Sie Angaben wie bei LIKE verwenden oder Literale (konstante Ausdrücke) Beachten Sie, dass BETWEEN offene Intervalle bildet, d.h. die erlaubten Werte liegen eben nicht zwischen Start- und Endwert, sondern letztere sind inbegriffen Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    33. Seite 33 Operatoren – Andere: BETWEEN Beispiele: SELECT Durchmesser FROM Groesse WHERE Durchmesser BETWEEN 16 AND 32 ORDER BY Durchmesser; SELECT Bezeichnung, Durchmesser, Extrapreis FROM Groesse WHERE Extrapreis BETWEEN 1 AND 2 ORDER BY Extrapreis DESC; SELECT Name FROM Zutat WHERE Name BETWEEN 'S*' AND 'T*' ORDER BY Name ASC; Und was ist mit T? SELECT Name FROM Zutat WHERE Name>='s' AND Name<'u' ORDER BY Name; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    34. Seite 34 Operatoren – Andere: IN Mit dem IN-Operator (übersetzt etwa: enthalten in) können Sie sich so manches OR sparen. Syntax: Feld?[NOT]?IN?([ ' ] Wert [ ' ],?[ ' ] Wert [ ' ][,?[ ' ] Wert [ ' ][…]]) Sie dürfen nur Literale, also keine Muster verwenden Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    35. Seite 35 Operatoren – Andere: IN Beispiele: SELECT * FROM Kunde WHERE Name IN ('Mustermann', 'Beispiel'); SELECT * FROM Groesse WHERE Durchmesser IN (16, 18, 20, 22); Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    36. Seite 36 Operatoren – Mengenoperatoren Abfragen geben eine Menge (nicht umgangssprachlich gemeint) von Datensätzen zurück. Mit den Mengenoperatoren kann man diese Mengen miteinander kombinieren: UNION Zusammenfügen von Mengen ohne Duplikate UNION ALL Zusammenfügen von Mengen mit Duplikaten INTERSECT Bildet die Schnittmenge (Übereinstimmung) zweier Abfragen MINUS Differenz zweier Abfragen (Datensätze der ersten Abfrage, die nicht in der zweiten enthalten sind.) Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    37. Seite 37 Operatoren – Mengen: UNION, UNION ALL Beispiele: SELECT Name FROM Zutat WHERE Name LIKE 'M*' OR Name LIKE '*N' UNION ALL SELECT Name FROM Zutat WHERE Name LIKE 'S*' ORDER BY Name; SELECT Name FROM Zutat WHERE Name LIKE 'M*' OR Name LIKE '*N' UNION SELECT Name FROM Zutat WHERE NAME LIKE 'S*' ORDER BY Name; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    38. Seite 38 Operatoren – Mengen: INTERSECT, MINUS Beispiele: SELECT Name FROM Zutat WHERE Name LIKE 'M*' OR Name LIKE '*N' INTERSECT SELECT Name FROM Zutat WHERE Name LIKE 'S*' ORDER BY Name; SELECT Name FROM Zutat WHERE Name LIKE 'M*' OR Name LIKE '*N' MINUS SELECT Name FROM Zutat WHERE Name LIKE 'S*' ORDER BY Name; INTERSECT und MINUS werden von Access nicht unterstützt (Access arbeitet mit INNER JOIN, bzw. LEFT / RIGHT JOIN) Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    39. Seite 39 Funktionen - Übersicht Mit Funktionen kann man in SQL auch Daten filtern, Berechnungen anstellen, Daten gruppieren usw. In SQL unterscheidet man sechs Gruppen von Funktionen: Aggregatfunktionen Arithmetische Funktionen Zeichenfunktionen Umwandlungsfunktionen Datums- und Zeitfunktionen Odds and ends: Verschiedene Funktionen

    40. Seite 40 Funktionen - Aggregatfunktionen SQL kennt die folgenden grundlegenden Aggregatfunktionen: COUNT Datensätze zählen SUM Feld aufsummieren AVG (Average) Durchschnitt eines Feldes bilden MAX Maximalen Wert eines Feldes finden MIN Minimalen Wert eines Feldes finden VARIANCE Varianz eines Feldes errechnen (VAR in Access) STDEV (Standard deviation) Standardabweichung eines Feldes errechnen

    41. Seite 41 Funktionen - Aggregatfunktionen Beispiele: SELECT COUNT(Name) AS AnzahlPizzen FROM Pizza; SELECT COUNT(*) AS TeurePizzen FROM PizzaGroesse WHERE Preis>=16; SELECT SUM(Preis) AS AlleZwanziger FROM PizzaGroesse WHERE Groesse=20;

    42. Seite 42 Funktionen - Aggregatfunktionen Beispiele: SELECT AVG(Wann) AS WannDurchschnitt FROM Bestellung; SELECT AVG(Extrapreis) AS ExtraDurchschnitt FROM Groesse; SELECT MAX(Durchmesser) AS MaximalDurchmesser FROM Groesse;

    43. Seite 43 Funktionen - Aggregatfunktionen Beispiele: SELECT MIN(Bezeichnung) , MAX(Durchmesser), MIN(Extrapreis) FROM Groesse; SELECT AVG(Extrapreis) AS Durchschnitt, VAR(Extrapreis) AS Streuung, STDEV(Extrapreis) AS StdAbweichung FROM Groesse;

    44. Seite 44 Funktionen - Arithmetische Die meisten SQL-Implementierungen kennen die folgenden arithmetischen Funktionen (wenn auch teilweise unter anderem Namen): ABS Absolutwert einer Zahl CEIL (ceiling) Gleiche oder größere ganze Zahl finden FLOOR Gleiche oder kleinere ganze Zahl finden COS, COSH, SIN, SINH, TAN, TANH EXP Potenziert die Eulersche Konstante mit einer Zahl LN, LOG MOD (Modulo – bereits bekannt) Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    45. Seite 45 Funktionen - Arithmetische POWER Potenzierung xy SIGN Vorzeichen einer Zahl ermitteln SQRT(square root) Quadratwurzel einer Zahl Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    46. Seite 46 Funktionen - Arithmetische Beispiele: SELECT ABS(-2) AS ImmerPositiv; SELECT Durchmesser, EXP(Durchmesser) AS EulerscheMegaPizza FROM Groesse; SELECT Durchmesser, LOG(Durchmesser) AS LogarithmischePizza FROM Groesse; SELECT SQR(Durchmesser), SQR(ABS(Durchmesser-10)) FROM Groesse; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    47. Seite 47 Funktionen - Zeichenfunktionen Ein SQL-Dialekt sollte die folgenden grundlegenden Zeichenfunktionen kennen: CHR Zeichen nach Code (abhängig von der Datenbank) CONCAT Texte verketten INITCAP Erstes Zeichen eines Wortes groß, Rest klein LOWER Nur Kleinschreibung UPPER Nur Großschreibung RCAP / LCAP Auffüllen mit Zeichen Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    48. Seite 48 Funktionen - Zeichenfunktionen RTRIM / LTRIM Leerzeichen rechts / links entfernen REPLACE Ersetzen von Textteilen durch andere SUBSTR Teil einer Zeichenfolge extrahieren TRANSLATE Ersetzen von Zeichen eines Textes durch andere INSTR Suchen eines Teiltextes in einem Text LENGTH Länge eines Textes ermitteln Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    49. Seite 49 Funktionen - Zeichenfunktionen Beispiele: SELECT CHR(49); SELECT LCASE(Vorname), UCASE(Name) FROM Kunde; SELECT RTRIM(Vorname) FROM Kunde; SELECT MID(Vorname,2,4) FROM Kunde; SELECT Name, Vorname, LEFT(TelefonNr, INSTR(TelefonNr, '-')-1) AS Vorwahl, RIGHT(TelefonNr,LEN(TelefonNr)- INSTR(TelefonNr, '-')) AS Rufnummer FROM Kunde ORDER BY Name, Vorname; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    50. Seite 50 Funktionen - Umwandlungsfunktionen Ihre SQL-Umgebung sollte mindestens folgende Umwandlungen vornehmen können: TO_CHAR Zahlen in Zeichenfolgen umwandeln TO_NUMBER Zeichenfolgen in Zahlen umwandeln Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    51. Seite 51 Funktionen - Umwandlungsfunktionen Beispiele: SELECT CSTR(Durchmesser) FROM Groesse; SELECT FORMAT(Durchmesser*100, '#,##0.00 mikrometer') AS DäumlingDurchmesser FROM Groesse; Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    52. Seite 52 Funktionen – Zeit- und Datumsfunktionen ADD_MONTHS Ganze Monate addieren zu Datum LAST_DAY Letzten Monatstag zu einem Datum ermitteln MONTHS_BETWEEN Differenz zweier Daten in Monaten NEW_TIME Umrechnung in andere Zeitzone NEXT_DAY Datum des nächsten angegebenen Wochentags SYSDATE Angabe der Systemzeit Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    53. Seite 53 Funktionen - Verschiedene Ein SQL-Dialekt sollte die folgenden grundlegenden Funktionen kennen: GREATEST Größtes Element einer Aufzählung LEAST Kleinstes Element einer Aufzählung USER Benutzername ermitteln Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!Auch die Schreibweise der arithmetischen Operationen ist amerikanisch, d.h. Punkt statt Komma!

    54. Seite 54 Klauseln - Übersicht Die meistgenutzten Klauseln – WHERE und ORDER BY- haben Sie bereits kennen gelernt – hier sind sie alle: WHERE ORDER BY GROUP BY HAVING STARTING WITH

    55. Seite 55 Klauseln – GROUP BY Die GROUP BY-Klausel ist besonders sinnvoll mit den Aggregatfunktionen COUNT, SUM, AVG, MIN und MAX, die Sie ja bereits kennen. Syntax: SELECT?{Feld|Funktion(Feld)[,…]}?FROM?Tabellenname [WHERE?Kriterium[?LogischerOperator?Kriterium[…]]] GROUP?BY?Feld[,?Feld[…]] Die Klausel GROUP BY erledigt die Sortierung meistens (ORDER BY) gleich mit

    56. Seite 56 Klauseln – GROUP BY Beispiel: SELECT Pizza, COUNT(Zutat) AS Zutaten FROM PizzaBelag GROUP BY Pizza; SELECT BestellNr, COUNT(PosNr) AS Positionen, AVG(Groesse) AS Durchschnittsgroesse FROM Position GROUP BY BestellNr;

    57. Seite 57 Klauseln – HAVING Die HAVING-Klausel erweitert die GROUP BY-Klausel. WHERE ist aber weiterhin möglich; der feine Unterschied folgt: Syntax: SELECT?{Feld|Funktion(Feld)[,…]}?FROM?Tabellenname [WHERE?Kriterium[?LogischerOperator?Kriterium[…]]] GROUP?BY?Feld[,?Feld[…]] HAVING?Kriterium[?LogischerOperator?Kriterium[…]] Bei HAVING sind Aggregatfunktionen möglich, bei WHERE nicht! WHERE bezieht sich auf einzelne Datensätze, HAVING auf Gruppen!

    58. Seite 58 Klauseln – HAVING Beispiele: SELECT BestellNr, COUNT(PosNr) AS Posten, AVG(Groesse) AS Durchschnittsgroesse FROM Position GROUP BY BestellNr HAVING AVG(Groesse)>=20; SELECT BestellNr, COUNT(PosNr) AS Posten, AVG(Groesse) AS Durchschnittsgroesse FROM Position WHERE AVG(Groesse>=20) GROUP BY BestellNr; Autsch! SELECT BestellNr, COUNT(PosNr) AS Posten, AVG(Groesse) AS Durchschnittsgroesse FROM Position WHERE Groesse>=20 GROUP BY BestellNr; Hier ist einmal die Durchschnittsgröße pro Posten und einmal die Durchschnittsgröße per Gruppe gemeint!Hier ist einmal die Durchschnittsgröße pro Posten und einmal die Durchschnittsgröße per Gruppe gemeint!

    59. Seite 59 Klauseln – HAVING und IN Die Klauseln HAVING kann auch mit dem IN-Operator verwendet werden. Beispiele: SELECT Pizza FROM PizzaBelag GROUP BY Pizza, Zutat HAVING Zutat IN (10, 11, 51); SELECT Pizza, MAX(Groesse) AS Maximalgroesse FROM PizzaGroesse GROUP BY Pizza HAVING Pizza IN (2, 3, 4) ORDER BY MAX(Groesse);

    60. Seite 60 Klauseln – STARTING WITH Die STARTING WITH-Klausel funktioniert genauso wie der entsprechende LIKE-Operator und liefert die gleichen Ergebnisse: Beispiel: SELECT Vorname, Name FROM Kunde WHERE Name STARTING WITH 'P*';

    61. Seite 61 Aufgaben 1.1 Finden Sie die Anzahl der Zutaten pro Pizza heraus, stellen Sie die größte Zutatenanzahl nach oben (sorgen Sie für eine durchgängig sinnvolle Sortierung) SELECT Pizza, COUNT(Zutat) AS Zutatenanzahl FROM PizzaBelag GROUP BY Pizza ORDER BY COUNT(Zutat) DESC, Pizza; Finden Sie heraus, in welcher Maximalgröße Ihre verschiedenen Pizzen bestellt wurden SELECT Pizza, MAX(Groesse) AS Maximalgroesse FROM Position GROUP BY Pizza;

    62. Seite 62 Aufgaben 1.2 Finden Sie die Pizzen heraus, die in der größten Größe die Sie haben, bestellt wurden SELECT Pizza, Groesse FROM Position GROUP BY Pizza, Groesse HAVING Groesse=32; SELECT Pizza, Groesse FROM Position GROUP BY Pizza, Groesse HAVING MAX(Groesse)=32; Ermitteln Sie die Anzahl der bestellten Pizzen, deren Durchmesser höchstens 24 cm betrug SELECT COUNT(Groesse) FROM Position WHERE Groesse<=24;

    63. Seite 63 Aufgaben 1.3 Ermitteln Sie, wie oft die Pizza 3 in jeder Bestellung auftauchte SELECT BestellNr, COUNT(Pizza) FROM Position GROUP BY Pizza, BestellNr HAVING PIZZA=3;

    64. Seite 64 Anmerkungen zu einfachen SELECT-Anweisungen WHERE und ORDER BY gewöhnlich in Abfragen, die sich auf einzelne Zeilen beziehen GROUP BY und HAVING gewöhnlich mit Aggregatfunktionen

    65. Seite 65 SELECT über Tabellen Richtig sinnvoll wird SQL erst durch die Abfrage von Daten über verknüpfte Tabellen Hier wird auch die Leistungsfähigkeit von SQL erst deutlich. Leider wird es dadurch nicht einfacher

    66. Seite 66 SELECT über Tabellen – erster Versuch Beispiel: SELECT Name, Vorname, BestellNr FROM Kunde, Bestellung; Offensichtlich fehlt hier eine Anweisung, die beide Tabellen sinnvoll miteinander verknüpft Ohne Anhaltspunkt verknüpft SQL jeden Datensatz der einen Tabelle mit jedem der anderen, man nennt das cross join (Überkreuz-Verknüpfung) Man stelle sich das einmal mit mehr als zwei Tabellen vor…

    67. Seite 67 SELECT über Tabellen – gleiche Feldnamen Beispiel: SELECT Position.Pizza, PizzaGroesse.Pizza FROM Position, PizzaGroesse; Zwar können so gleiche Feldnamen in den Tabellen unterschieden werden, aber das Ergebnis bleibt zunächst gleichermaßen unsinnig

    68. Seite 68 SELECT über Tabellen – Verknüpfungen Eine Abfrage über mehr als eine einzelne Tabelle wird erst sinnvoll durch Verknüpfungen: Inner joins Cross joins Equi join Non equi join Outer joins Left join Right join Full join

    69. Seite 69 SELECT über Tabellen – Equi joins Hiermit werden Tabellen verknüpft, bei denen die Inhalte (meistens) eines Feldes gleich sind: Die Angabe der Tabelle ist nur bei gleichen Feldnamen notwendig Beispiele: SELECT Name, Vorname, BestellNr FROM Kunde, Bestellung WHERE Kunde.TelefonNr=Bestellung.TelefonNr; SELECT Name, Groesse, Preis FROM Pizza, PizzaGroesse WHERE PizzaNr=Pizza ORDER BY Name, Groesse; SELECT Name, Vorname, BestellNr, Wann FROM Bestellung, Kunde WHERE Bestellung.TelefonNr=Kunde.TelefonNr ORDER BY Name, Vorname; Was passiert bei: SELECT * FROM Kunde, Bestellung WHERE Kunde.TelefonNr=Bestellung.TelefonNr; Was passiert bei: SELECT * FROM Kunde, Bestellung WHERE Kunde.TelefonNr=Bestellung.TelefonNr;

    70. Seite 70 SELECT über Tabellen – Non equi joins Natürlich kann man auch Tabellen verknüpfen aufgrund der Tatsache, dass Feldinhalte nicht gleich sind, auch wenn dies nur selten einen praktischen Sinn ergibt: Beispiele: SELECT Name, Vorname, Wann AS NichtAm FROM Kunde, Bestellung WHERE Kunde.TelefonNr<>Bestellung.TelefonNr And Name='Peitsch';

    71. Seite 71 SELECT über Tabellen – JOIN ON Die Klausel JOIN ON ist nicht im Standard definiert, wird aber allgemein verwendet: Syntax: SELECT?{Feld|Funktion(Feld)[,…]}?FROM?Tabellenname {[INNER]|LEFT?[OUTER]|RIGHT?[OUTER]|FULL}?JOIN?Tabellenname ON?Kriterium[?LogischerOperator?Kriterium[…]]

    72. Seite 72 SELECT über Tabellen – equi join mit JOIN ON Beispiele: SELECT Kunde.TelefonNr, Name, Vorname, Wann FROM Kunde JOIN Bestellung ON Kunde.TelefonNr=Bestellung.TelefonNr; Access verlangt hier INNER JOIN! SELECT Name, Groesse, Preis FROM Pizza INNER JOIN PizzaGroesse ON PizzaNr=Pizza ORDER BY Name, PizzaGroesse.Name, Groesse, Preis; Bei Access ist bei einem Join die Angabe von Tabelle und Feldname notwendig! SELECT Position.BestellNr, PosNr, Pizza, Groesse, Wann FROM Bestellung JOIN Position ON Position.BestellNr=Bestellung.BestellNr AND Bestellung.BestellNr IN (2,3) ORDER BY Bestellung.BestellNr, PosNr; Bei Access ist statt des AND eine WHERE-Klausel notwendig!

    73. Seite 73 SELECT über Tabellen – outer join mit JOIN ON Beispiele: SELECT Kunde.TelefonNr, Name, Vorname, Wann FROM Kunde LEFT OUTER JOIN Bestellung ON Kunde.TelefonNr=Bestellung.TelefonNr; SELECT Bestellung.BestellNr, PosNr, Pizza, Groesse, Wann FROM Bestellung LEFT JOIN Position ON Position.BestellNr=Bestellung.BestellNr AND Bestellung.BestellNr IN (2,3) ORDER BY Bestellung.BestellNr, PosNr; SELECT Bestellung.BestellNr, PosNr, Pizza, Groesse, Wann FROM Bestellung RIGHT JOIN Position ON Position.BestellNr=Bestellung.BestellNr AND Bestellung.BestellNr IN (2,3) ORDER BY Bestellung.BestellNr, PosNr; SELECT Bestellung.BestellNr, PosNr, Pizza, Groesse, Wann FROM Bestellung FULL JOIN Position ON Position.BestellNr=Bestellung.BestellNr AND Bestellung.BestellNr IN (2,3) ORDER BY Bestellung.BestellNr, PosNr; FULL JOIN gibt es nicht in Access!

    74. Seite 74 SELECT über Tabellen – JOIN ON, weitere Beispiele Beispiele: SELECT Name, Pizza FROM PizzaBelag INNER JOIN Zutat ON Zutat=ZutatNr ORDER BY Name, Pizza; SELECT Groesse, Name FROM PizzaGroesse RIGHT JOIN Pizza ON Pizza=PizzaNr WHERE Groesse IS NULL; SELECT Groesse, Name FROM Pizza LEFT JOIN PizzaGroesse ON Pizza=PizzaNr WHERE Groesse IS NULL; SELECT Name, Pizza FROM PizzaBelag RIGHT OUTER JOIN Zutat ON Zutat=ZutatNr WHERE Pizza IS NULL ORDER BY Name, Pizza;

    75. Seite 75 SELECT über Tabellen – JOIN ON, weitere Beispiele Beispiele: SELECT Pizza.Name, Zutat.Name FROM Pizza INNER JOIN PizzaBelag ON PizzaNr=Pizza INNER JOIN Zutat ON Zutat=ZutatNr ORDER BY Pizza.Name, Zutat.Name; Access verlangt hier eine andere Syntax und Klammersetzung! SELECT Pizza.Name, Zutat.Name FROM Pizza INNER JOIN (Zutat INNER JOIN PizzaBelag ON Zutat.ZutatNr=PizzaBelag.Zutat) ON PizzaBelag.Pizza=Pizza.PizzaNr ORDER BY Pizza.Name, Zutat.Name;

    76. Seite 76 SELECT über Tabellen – JOIN ON, weitere Beispiele Beispiele: SELECT DISTINCT Kunde.Name, Kunde.Vorname FROM Kunde LEFT JOIN Bestellung ON Kunde.TelefonNr=Bestellung.TelefonNr WHERE BestellNr IS NULL ORDER BY Kunde.Name, Kunde.Vorname;

    77. Seite 77 SELECT über Tabellen – JOIN ON, weitere Beispiele Beispiele: SELECT DISTINCT Pizza.Name, Kunde.Name, Kunde.Vorname FROM Pizza INNER JOIN Position ON PizzaNr=Pizza INNER JOIN Bestellung ON Position.BestellNr=Bestellung.BestellNr INNER JOIN Kunde ON Kunde.TelefonNr=Bestellung.TelefonNr ORDER BY Kunde.Name, Kunde.Vorname, Pizza.Name; In Access: SELECT DISTINCT Pizza.Name, Kunde.Name, Kunde.Vorname FROM Pizza INNER JOIN (Position INNER JOIN (Bestellung INNER JOIN Kunde ON Kunde.TelefonNr=Bestellung.TelefonNr) ON Position.BestellNr=Bestellung.BestellNr) ON Pizza.PizzaNr=Position.Pizza ORDER BY Kunde.Name, Kunde.Vorname, Pizza.Name;

    78. Seite 78 SELECT über Tabellen – JOIN ON, weitere Beispiele Beispiele: SELECT Pizza.Name FROM Pizza FULL JOIN Position ON PizzaNr=Pizza WHERE Pizza IS NULL; In Access: SELECT Pizza.Name FROM Pizza LEFT JOIN Position ON Pizza.PizzaNr=Position.Pizza WHERE Pizza IS NULL;

    79. Seite 79 SELECT über Tabellen – JOIN ON, weitere Beispiele Beispiele: SELECT Wann, Kunde.Name, Vorname, Pizza.Name AS Pizza, Bezeichnung AS Groesse FROM Position INNER JOIN Groesse ON Groesse=Durchmesser INNER JOIN Pizza ON Pizza=PizzaNr INNER JOIN Bestellung ON Position.BestellNr=Bestellung.BestellNr INNER JOIN Kunde ON Bestellung.TelefonNr=Kunde.TelefonNr ORDER BY Wann, Kunde.Name, Vorname, Durchmesser; In Access: SELECT Wann, Kunde.Name, Vorname, Pizza.Name, Groesse FROM ((Kunde INNER JOIN Bestellung ON Kunde.TelefonNr = Bestellung.TelefonNr) INNER JOIN Position ON Bestellung.BestellNr = Position.BestellNr) INNER JOIN Pizza ON Position.Pizza = Pizza.PizzaNr ORDER BY Wann, Pizza.Name, Groesse;

    80. Seite 80 Tabellen mit sich selbst verknüpfen Die Verknüpfung einer Tabelle mit sich selbst dient vor allem der Überprüfung der Datenkonsistenz: Beispiele: SELECT * FROM Mitarbeiter AS M1, Mitarbeiter AS M2; SELECT M1.MitarbeiterNr, M1.Name, M1.Vorname FROM Mitarbeiter AS M1, Mitarbeiter AS M2 WHERE M1.MitarbeiterNr=M2.MitarbeiterNr AND (M1.Name<>M2.Name OR M1.Vorname<>M2.Vorname);

    81. Seite 81 Verschachteltes SELECT Das Verschachteln von SELECT-Anweisungen nennt man auch Unterabfragen: Häufigste Syntax: SELECT?{Feld|Funktion(Feld)[,…]}?FROM?Tabellenname WHERE?Feld[?]Operator?[(]SELECT?{Feld|Funktion(Feld)[,…]}?FROM?Tabellenname [WHERE?Kriterium[?LogischerOperator?Kriterium[…]]][)]; Beispiele: SELECT Pizza.Name FROM Pizza WHERE PizzaNr IN (SELECT Pizza FROM Position WHERE BestellNr=2); SELECT TelefonNr FROM Bestellung WHERE BestellNr IN (SELECT BestellNr FROM Position WHERE Pizza IN (2,4));

    82. Seite 82 Verschachteltes SELECT - weitere Beispiele Beispiele: SELECT Name FROM Zutat WHERE ZutatNr IN (SELECT Zutat FROM PizzaBelag WHERE Pizza=3); SELECT Name FROM Pizza WHERE PizzaNr IN (SELECT Pizza FROM Position WHERE BestellNr=2); SELECT * FROM Kunde WHERE TelefonNr IN (SELECT TelefonNr FROM Bestellung WHERE DAY(Wann)=20 AND MONTH(Wann)=3 AND YEAR(Wann)=2001); SELECT Name, Vorname FROM Kunde WHERE TelefonNr IN (SELECT TelefonNr FROM Bestellung WHERE BestellNr IN (SELECT BestellNR FROM Position WHERE Pizza=3));

    83. Seite 83 Verschachteltes SELECT - weitere Beispiele Beispiele: SELECT Name, Vorname FROM Kunde WHERE TelefonNr IN (SELECT TelefonNr FROM Bestellung WHERE BestellNr IN (SELECT BestellNR FROM Position WHERE Pizza IN (SELECT Pizza FROM PizzaBelag WHERE Zutat=12))); SELECT AVG(Preis) FROM PizzaGroesse WHERE Pizza IN (SELECT Pizza FROM PizzaBelag WHERE Zutat=3); SELECT Name, Vorname FROM Kunde WHERE TelefonNr=(SELECT TelefonNr FROM Bestellung WHERE BestellNr=4); SELECT Name FROM Pizza WHERE PizzaNr IN (SELECT Pizza FROM PizzaGroesse WHERE Groesse=(SELECT MAX(Groesse) FROM PizzaGroesse)); Erstes Beispiel: Wer hat eine Pizza mit Hack bestellt? Zweites Beispiel: Wie teuer ist durchschnittlich eine Pizza mit Gouda?Erstes Beispiel: Wer hat eine Pizza mit Hack bestellt? Zweites Beispiel: Wie teuer ist durchschnittlich eine Pizza mit Gouda?

    84. Seite 84 Arbeiten mit EXISTS (unkorreliert) Die EXISTS-Klausel übernimmt eine Unterabfrage als Argument und liefert das Vorhandensein von Datensätzen mit TRUE oder FALSE Häufigste Syntax: SELECT?{Feld|Funktion(Feld)[,…]}?FROM?Tabellenname WHERE?EXISTS?[(]SELECT?{Feld|Funktion(Feld)[,…]}?FROM?Tabellenname [WHERE?Kriterium[?LogischerOperator?Kriterium[…]]][)]; Beispiel: SELECT PizzaNr FROM Pizza WHERE EXISTS (SELECT PizzaNr FROM Pizza WHERE Name='Alito'); Die Abfrage ist unkorreliert, sie beinhaltet keine Verknüpfung Deshalb wird die Unterabfrage nur einmal ausgeführt und liefert TRUE Die Abfrage wird ebenfalls nur einmal ausgeführt und gibt mit dem Argument TRUE somit alle Pizzen zurück!

    85. Seite 85 Arbeiten mit EXISTS (korreliert) Beinhaltet die Unterabfrage in einer EXISTS-Klausel eine Verknüpfung zur übergeordneten Abfrage, wird sie mehrfach ausgeführt Die übergeordnete Abfrage wird für jede Ergebniszeile der untergeordneten Abfrage ausgeführt Beispiele: SELECT Pizza, Zutat FROM PizzaBelag WHERE EXISTS (SELECT ZutatNr FROM Zutat WHERE Name='Gouda' AND PizzaBelag.Zutat=Zutat.ZutatNr) SELECT Pizza, Zutat FROM PizzaBelag WHERE EXISTS (SELECT Pizza FROM PizzaGroesse WHERE Groesse=32 AND PizzaBelag.Pizza=PizzaGroesse.Pizza);

    86. Seite 86 Arbeiten mit EXISTS (korreliert) Beispiele: SELECT Name FROM Pizza WHERE EXISTS (SELECT Pizza FROM PizzaGroesse WHERE Groesse=32 ANDPizza.PizzaNr=PizzaGroesse.Pizza); SELECT Name FROM Pizza WHERE EXISTS (SELECT Zutat FROM PizzaBelag WHERE Zutat=11 AND Pizza.PizzaNr=PizzaBelag.Pizza); SELECT * FROM Pizza WHERE EXISTS (SELECT Pizza FROM PizzaBelag WHERE Pizza.PizzaNr=PizzaBelag.Pizza AND Zutat=(SELECT ZutatNr FROM Zutat WHERE Name='Gouda')) ORDER BY PizzaNr;

    87. Seite 87 Der Unterschied zwischen IN und EXISTS Betrachtet man das letzte Beispiel, kann man es einfacher (ohne Verknüpfung mit IN statt mit EXISTS lösen Beispiel: SELECT * FROM Pizza WHERE PizzaNr IN (SELECT Pizza FROM PizzaBelag WHERE Zutat= (SELECT ZutatNr FROM Zutat WHERE Name='Gouda')) ORDER BY PizzaNr; Warum geben zwei verschiedene Anweisungen das gleiche Ergebnis? Flexibilität ist bei SQL ein „echter Standard“ Wo liegt nun der Unterschied zwischen IN und EXISTS? IN vergleicht auf Gleichheit, EXISTS lässt alle Vergleiche zu

    88. Seite 88 Aufgaben 2.1 Wie heißen die Pizzen in Größe 32 mit Gouda? SELECT Name FROM Pizza WHERE PizzaNr IN (SELECT PizzaNr FROM Pizza WHERE PizzaNr IN (SELECT Pizza FROM PizzaBelag WHERE Zutat= (SELECT ZutatNr FROM Zutat WHERE Name='Gouda')) AND PizzaNr IN (SELECT Pizza FROM PizzaGroesse WHERE Groesse=32)); Wie lauten die Daten des/der Kunden, die Pizzen mit Salami bestellt haben? SELECT * FROM Kunde WHERE TelefonNr IN (SELECT TelefonNr FROM Bestellung WHERE BestellNr IN (SELECT BestellNr FROM Position WHERE Pizza IN (SELECT Pizza FROM PizzaBelag WHERE Zutat= (SELECT ZutatNr FROM Zutat WHERE Name='Salami'))))

    89. Seite 89 Daten einfügen mit INSERT Der INSERT-Befehl dient zum Anlegen neuer Datensätze in Tabellen: Einfügen eines Datensatzes mit INSERT Syntax: insert into Tabelle (Feld[, Feld]) values (Wert[, Wert]); Beispiele: INSERT INTO Mitglied (ID, Passwort, Name, Vorname, Ersteintrag) VALUES (‘toto‘, ‘geheim‘, ‘Thormann‘, ‘Thorsten‘, NOW()); INSERT INTO Mitglied (ID, Passwort, Name, Vorname, Ersteintrag) VALUES (‘fury‘, ‘121212‘, ‘Müller‘, ‘Andrea‘, #10/24/200#); Wie man sieht, wird ein Datum in Rauten eingeschlossen und „amerikanisch“ notiert, also in der Reihenfolge Monat/Tag/Jahr.

    90. Seite 90 Daten ändern mit UPDATE Bestehende Daten können mit dem UPDATE-Befehl verändert werden: Verändern eines Datensatzes mit UPDATE Syntax: update Tabellenname set Feld =Wert [, Feld =Wert ] where Suchbedingung; Beispiel: UPDATE Mitglied SET Name=‘Verheiratet‘ WHERE ID=‘toto‘;

    91. Seite 91 Löschen von Daten mit DELETE und WHERE Die DELETE-Anweisung löscht immer ganze Datensätze, deshalb werden Felder nur in der WHERE-Klausel angegeben: Löschen von Datensätzen mit DELETE und WHERE Syntax: delete from Tabellenname where ... Beispiele: DELETE FROM Mitglied WHERE KundenNr=23456; DELETE FROM Mitglied WHERE Geburtsdatum<#1/1/1980#; Beachten Sie, dass das Löschen von Daten unwiderruflich ist; es gibt in SQL kein Undo! Für die WHERE-Klausel gelten die von SELECT bekannten Möglichkeiten. Es empfiehlt sich, immer erst ein SELECT mit der gleichen WHERE-Klausel auszuführen, um sich die Daten anzeigen zu lassen, die das DELETE löschen würde.

More Related