SQL (Structured Query Language) - Einführung 1. Auswahl-Abfragen (Syntax) ( * = alle Felder ) SELECT {Feldname, Feldname,..|*} FROM Tabelle [, Tabelle, Tabelle....] [WHERE {Bedingung}] [ORDER BY Feldname [ASC|DESC]...] [GROUP BY Feldname [HAVING {Bedingung}]] 1.1 SQL - Klauseln Die FROM Klausel Hinter FROM steht der Name der Tabelle. Entstammen die Felder verschiedenen Tabellen, so muss jeweils der Tabellenname durch einen Punkt getrennt vorangesetzt werden. Die WHERE Klausel Damit wird bestimmt, welche Datensätze (Zeilen einer Tabelle) ausgewählt werden sollen. (Bedingungsprüfung). Die ORDER BY Klausel Daten werden nach einem oder mehreren Feldnamen sortiert ausgegeben. Die vorgegebene Sortierreihenfolge ist aufsteigend ASCending). Soll absteigend sortiert werden, muss (DESCending) eingegeben werden. Die GROUP BY Klausel Sie dient dazu, die Zeilen einer Tabelle nach bestimmten Feldern zu gruppieren. Die HAVING Klausel Diese ist der WHERE - Klausel sehr ähnlich. Bei der HAVING - Klausel werden bestimmte Gruppen aus einer Gruppenmenge ausgewählt. Somit kann die HAVING Klausel nur im Zusammenhang mit der GROUP BY Klausel angewandt werden SQL-Anweisungen müssen mit einem Strichpunkt enden (und in einer Zeile stehen). Aufgaben zu einfachen Auswahl-Abfragen Alle Teile mit allen Feldern aus der Tabelle Teile: SELECT * FROM Teile; Alle Teile mit Teilenummer, Bezeichnung und Lagernummer: SELECT TeileNr, Bezeichnung, LagerNr FROM Teile; Alle Teile mit TeileNr, Bezeichnung und Teileart, sortiert nach Bezeichnung: SELECT TeileNr, Bezeichnung, TeileArt FROM Teile ORDER BY Bezeichnung; 1.2 Vergleichs-Operatoren / Arithmetische Operatoren SQL kennt die üblichen Vergleichsoperatoren: = gleich <> ungleich > größer < kleiner >= größer gleich <= kleiner gleich BETWEEN .Wert1..AND..Wert2.. Vergleichswert liegt zwischen Wert1 und Wert2 IN Werteliste Vergleichswert ist in der angegebenen Werteliste Like Zeichenfolge Vergleichszeichen entsprechen der Zeichenfolge Is Null Feld Vergleichsfeld hat einen NULL-Wert Vergleichsoperatoren können verknüpft werden mit den Operatoren AND, OR und NOT Rechenoperationen ( + , - , * , / ) sind möglich mit numerischen Daten: Aufgaben mit Vergleichsoperatoren Anzeige aller Felder des Artikels mit der Teilenummer 10008. SELECT * FROM Teile WHERE TeileNr="10008"; Alle Rohstoffe mit Teilenummer, Bezeichnung und Teilart. SELECT TeileNr, Bezeichnung, TeileArt FROM Teile WHERE Teileart = "R"; Alle Handelswaren und Erzeugnisse mit Bezeichnung, Teileart und Bestand. SELECT Bezeichnung, TeileArt, Bestand FROM Teile WHERE Teileart = "H" OR Teileart = "E"; Alle Teile mit einem Einkaufspreis unter 5,00 DM sollen nach Einkaufspreisen absteigend angezeigt werden. SELECT TeileNr, Bezeichnung, EKPreis FROM Teile WHERE EKPreis < 5 ORDER BY EKPreis DESC; Alle Handelswaren, deren Einstandspreis zwischen 50,00 und 100,00 DM liegt. SELECT * FROM TEILE WHERE (EKPreis BETWEEN 20 AND 50) AND (TeileArt = "H"); 1.3 Gruppenfunktionen AVG(Spalte) = Durchschnittswert COUNT(Spalte) = Anzahl aller Einträge MAX(Spalte) = Maximalwert MIN (Spalte) SUM(Spalte) = Summe aller Einträge in einer Spalte = Minimalwert Gruppenfunktionen können nur anstelle eines Spaltennamens direkt hinter der SELECT-Anweisung stehen. Sie liefern genau einen Wert, beziehen sich jedoch auf mehrere Tabellenzeilen. Beispiel: Ermittlung der Anzahl aller Artikel, die einen Einstandspreis bzw. Herstellkosten über 100,00 DM haben. Select COUNT (*) FROM Teile WHERE EKPreis > 100; 2. Aktionsabfragen (führen Änderungen in Tabellen durch) Anfügeabfrage (INSERT INTO) INSERT INTO Tabelle [(Spalte [,Spalte,...)] VALUES (Wert [,Wert,...]); AktualisierungsAbfrage (UPDATE ... SET) UPDATE Tabelle SET Spalte = Ausdruck [, Spalte = Ausdruck,..] [WHERE Bedingung]; Löschabfrage (DELETE FROM) DELETE FROM Tabelle [WHERE Bedingung]; TabellenerstellungsAbfrage (SELECT ... INTO) SELECT Spalte[,Spalte,...] INTO Tabelle [WHERE Bedingung]; Beispiele: Löschen aller Sätze in der Tabelle mit dem Namen Teile Kopie Erstellung einer Tabelle Hwaren, die nur Handelswaren enthält, mit denselben Spalten wie die Tabelle Teile. Es sind alle EKPreise von Fremdbezugsteilen in der Tabelle Teile um 5% zu erhöhen. DELETE * FROM [Teile Kopie]; (Klammer wegen der Leerstelle im Namen) SELECT * INTO HWAREN FROM Teile WHERE TeileArt = "H"; UPDATE Teile SET EKPreis = EKPreis * 1.05 WHERE BArt = "F"; 3. Auswahl-Abfragen aus verbundenen Tabellen Es sollen alle Handelswaren mit flg. Datenfeldern ausgegeben werden: Aus der Tabelle TEILE Aus der Tabelle LIEFERER Teilenummer, Teileart, EKPreis, Lieferernummer Name des Lieferers Die beiden Tabellen sollen über die Lieferernummer miteinander verbunden werden, damit die Lieferernummern in beiden Tabellen übereinstimmen. Allgemeine Syntax für die Verbindung von Tabellen über gemeinsame Tabellenfelder: Lösung der Aufgabe: SELECT TeileNr, Bezeichnung, TeileArt, EKPreis, Teile.LiefNr, Name FROM Teile INNER JOIN Lieferer ON Teile.LiefNr = Lieferer.LiefNr WHERE TeileArt="H"; Beachte : Wenn ein oder mehrere Feldnamen in beiden Tabellen vorkommen, muss der Name der Tabelle mit einem Punkt als Trennungszeichen vor den Feldnamen geschrieben werden. Deshalb musste in der Lösung bei der LiefNr, die sowohl in der Tabelle TEILE als auch in der Tabelle LIEFERER vorkommt, jeweils der Tabellenname vorangestellt werden. Quelle: Beruflichen Schule Rottenburg W. Schaub