SQL Der select-Befehl 1 Einführung in SQL In der standardisierten Datenbank-Abfragesprache SQL werden drei Bereiche unterschieden: 1. DDL: Data Definition Language Einrichten von Datenbanken, Tabellen, Indizes, Views usw. 2. DML: Data Manipulation Language Manipulation von Daten, Einfügen., Ändern, Auswählen (Select) 3. DCL: Data Control Language Steuerung der Vergabe von Zugriffsrechten Der Teil von SQL, mit dem wir uns zunächst befassen, dient der Syntax des select-Befehls. Damit werden Abfragen erstellt, die Sie in Access über die grafische Oberfläche kennengelernt haben. Alle Befehle, deren Syntax hier zunächst besprochen wird, sind der zweiten Gruppe der Befehle von SQL (DML) zuzuordnen. 1.1 Einführung in SQL über Access-Abfragen Eine einfache Abfrage zur Tabelle Artikel aus der Datenbank Firma, die die Felder Artikelnummer und Bezeichnung auswählt, führt zu folgendem Ergebnis: Im Entwurfsbildschirm der Abfrage oder auch in der Datenblattansicht können Sie mit dem ersten Symbol links auch zur SQLAnsicht umschalten: In der SQL-Ansicht sind die Befehle sichtbar, die der oben gezeigten Abfrage entsprechen: die Angabe der Tabelle kann an folgenden Stellen weggelassen werden: Auf diese Art – im Vergleich der grafisch orientierten Entwurfsansicht mit den SQL-Befehlen – lassen sich die Grundlagen von SQL relativ leicht erlernen. Mit dem Select-Befehl werden Daten aus Tabellen ausgewählt. Dies kann mit Bedingungen und Sortierungen verbunden werden. Zunächst befassen wir uns mit der vereinfachten Syntax des Select-Befehls, bezogen auf nur eine Tabelle. 1 SQL Der select-Befehl Die sechs Komponenten einer SQL-Abfrage1 SELECT [ALL | DISTINCT] Spaltenausdruck Zeige mir die Werte aus folgenden Spalten … [, ...] (Ausgabedaten) FROM Tabellenbezeichner [, ...] … aus folgenden Tabelle(n) [ WHERE Bedingung ] … schränke die Auswahl wie folgt ein … [ GROUP BY Spalte [, ... ] ] Gruppenbildung Verdichte die Ausgabe von allen Zeilen mit gleichem Attributwert zu einer einzigen Ausgabezeile [ HAVING Having-Bedingung Zusätzliche Auswahlbedingung auf Gruppenebene [ ORDER BY [ [ASC | DESC ] Spalte [, ...] ] sortiere Ausgabe anhand folgender Spalten … (Default ist ASC) Wir wählen zunächst nur den ersten Teil des select-Statements: SELECT {* | <Spaltenliste>} FROM <Tabellenname> [WHERE <Ausdruck>] Wähle aus die Spaltenliste (oder *=alle) aus der Tabelle wo folgendes gilt An den folgenden Beispielen soll dies gezeigt werden. Um sie auszuprobieren, öffnen Sie bitte die Datenbank Firma, Tabelle Artikel, und erzeugen eine leere Abfrage im Entwurfsbildschirm. Wenn Sie dann zur SQL-Ansicht umschalten, sehen Sie den Select-Befehl SELECT FROM ARTIKEL; 1 diese Übersicht über die sechs Komponenten einer Abfrage ist aus: http://www.oszhdl.be.schule.de/gymnasium/faecher/informatik/datenbanken.htm 2 SQL Der select-Befehl Aufgabe: Dort können Sie jetzt die folgenden Beispiele testen. Schalten Sie dabei jeweils zur SQL-Ansicht und testen Sie mit dem roten Ausrufezeichen (die Befehle müssen nicht mit Grossbuchstaben eingegeben werden) SELECT * FROM ARTIKEL alle Datensätze der Tabelle Artikel SELECT BEZEICHNUNG FROM ARTIKEL das Feld Bezeichnung aller Datensätze der Tabelle Artikel SELECT ARTIKELNUMMER, BEZEICHNUNG FROM ARTIKEL die beiden Felder Artikelnummer und Bezeichnung aus der Tabelle Artikel SELECT * FROM ARTIKEL WHERE EINKAUFSPREIS <10 alle Datensätze, bei denen der Einkaufspreis unter 10 € ist SELECT BEZEICHNUNG, MENGE, MINDESTBESTAND FROM ARTIKEL WHERE EINKAUFSPREIS <10 wie oben, aber nur die Felder Bezeichnung, Menge und Mindestbestand SELECT BEZEICHNUNG FROM ARTIKEL WHERE LIEFERANTENNUMMER=[BITTE LIEFNR EINGEBEN] wie Parameter-Abfrage: das Feld Bezeichnung der Tabelle Artikel nach der Lieferantennummer wird gefragt SELECT * FROM ARTIKEL WHERE EINKAUFSPREIS <10 AND MINDESTBESTAND >50 alle Datensätze, bei denen der Einkaufspreis unter 10 € ist und der Mindestbestand über 50 SELECT BEZEICHNUNG, VERKAUFSPREIS FROM ARTIKEL WHERE ARTIKELNUMMER >200 OR VERKAUFSPREIS >20 die Felder Bezeichnung und Verkaufspreis, bei denen entweder die Artikelnummer über 200 ist oder der Verkaufspreis über 20 € SELECT * FROM ARTIKEL ORDER BY BEZEICHNUNG alle Datensätze der Tabelle Artikel, sortiert nach Bezeichnung SELECT BEZEICHNUNG FROM ARTIKEL ORDER BY ARTIKELNUMMER ASC das Feld Bezeichnung der Tabelle Artikel, sortiert nach Artikelnummer (ASC=ascending=aufsteigend; ohne diese Angabe wird immer aufsteigend sortiert SELECT * FROM ARTIKEL ORDER BY BEZEICHNUNG DESC wie oben, aber absteigend 3 SQL Der select-Befehl SELECT * FROM ARTIKEL ORDER BY LIEFERANTENNUMMER, ARTIKELNUMMER alle Datensätze der Tabelle Artikel, primär sortiert nach Lieferantennummer, sekundär nach Artikelnummer zuerst alle Datensätze der ersten Lieferantennummer, diese nach Art-Nr sortiert, dann die nächste Lieferantennummer, nach ArtNummern sortiert, usw. (macht nur Sinn, wenn das erste Sortierfeld mehrfach vorkommt) SELECT ARTIKELNUMMER, BEZEICHNUNG, MENGE FROM ARTIKEL ORDER BY 3 die Felder Artikelnummer, Bezeichnung und Menge, sortiert nach dem an 3. Stelle genannten Feld (Menge) SELECT BEZEICHNUNG FROM ARTIKEL WHERE BEZEICHNUNG LIKE "D*" die Felder Bezeichnung der Tabelle Artikel, aber nur die, bei denen die Bezeichnung mit einem D anfängt Aufgabe: Öffnen Sie jetzt die Datenbank Biblio. Erstellen Sie eine neue Abfrage in der Entwurfsansicht. Wählen Sie nur die Tabelle Bücher. Wie lauten die SQLBefehle für folgende Abfragen: Notieren Sie die SQL-Befehle! a) die Titel aller Bücher b) die Titel der Bücher von Christie c) Titel und Autor der Bücher, die ausgeliehen sind (logisches Feld: 0 oder –1! ) d) den Vornamen vom Autor namens Chandler e) wer schrieb das Buch: Volkswirtschaftslehre ? f) alle Titel ab der Katalognummer 400 g) die Autoren (Vorname und Name) deren Buch entweder mit einer Katalognummer ab 700 beginnt oder deren Bücher nicht ausgeliehen sind h) die Nachnamen der Autoren, deren Vorname mit dem Buchstaben J beginnt 4