SQL Einführung in SQL 1. Grundlagen Structured Query Language Viele Dialekte Unterteilung: i. DDL (Data Definition Language) ii. DML (Data Modifing Language) iii. DRL (Data Retrival Language) DI. Helmut Tockner 1/12 SQL 2. DDL Data Definition Language i. Verwalten der DB Struktur ii. Verwalten von Datenbanken und Benutzer(schema) 2.1. Create/Drop Database Create/Drop Table Create/Drop Index Create/Drop View Grant/Revoke Anlegen von Tabellen Syntax: CREATE TABLE [User.]<Table> ( <Attr> <Domain> [<Constraints>] [,…] ); z.B.: CREATE TABLE Kunden ( KNr Number (6), Vname Varchar2(32), Nname Varchar2(32) ); Jedes DBMS hat eine Menge von Std. Datentypen i. MS Access 1. integer, long integer 2. single, double 3. string, text 4. date ii. Oracle 1. 2. 3. 4. Char (n) Varchar2 (n) Number (p, s) Date DI. Helmut Tockner 2/12 SQL 5. Raw 6. Blob, Clob 7. Long 8. Rowid 9. Varray, Table 10. Ref 2.2. Löschen von Tabellendefinitionen DROP TABLE <Table> Löscht Tabelle samt Inhalt DI. Helmut Tockner 3/12 SQL 3. DML Data Modifing Language Statements zum Bearbeiten von Datenbeständen 3.1. Records einfügen Syntax: INSERT INTO <Table> [(<Attr>[,<Attr>…])] VALUES (<Value>[,<Value>…]); z.B.: INSERT INTO Kunden (KNR, Nname) VALUES (1, ‘Mair’); Nicht angegebene Attribute erhalten den Wert NULL Zeichenketten unter Anführungszeichen stellen, jedoch Zahlen nicht Komma – Zeichen ist ein Punkt Ohne Angabe der Attributnamen tritt Default-Reihenfolge in Kraft Anzahl der Attribute und Values muss übereinstimmen Typprüfung erfolgt 3.2. Records ändern Syntax UPDATE <Table> SET <Attr> = <Expr> [{, <Attr>=<Expr>}…] [WHERE <Condition>] Ändert alle Records auf die WHERE Bedingung zutrifft (falls diese nicht vorhanden ist werden alle Records geändert) z.B.: i. UPDATE Kunden Set Skonto = Skonto + 5 WHERE KNr = 1; DI. Helmut Tockner 4/12 SQL (Ändert nur Skonto von Kunden mit KNr 1) 3.3. Records löschen Syntax DELETE FROM <Table> [WHERE <Condition>] löscht alle Records, welche der Bedingung genügen ohne WHERE Klausel werden alle Records gelöscht z.B.: i. DELETE FROM Kunden WHERE KNr = 1; (Löscht nur Record mit KNr 1) DI. Helmut Tockner 5/12 SQL 4. DRL Data Retrival Language Um Daten aus den Tabellen zu selektieren DRL = SELECT Statement 4.1. Klauseln des SELECT Statements SELECT Statement besteht aus Klauseln i. Nicht alle Klauseln sind verpflichtend Folgende Klauseln werden in der angegebenen Reihenfolge ausgeführt i. ii. iii. iv. v. vi. vii. 4.2. FROM WHERE GROUP BY HAVING Spaltenauswahl ORDER BY UNION Auswahl von Tabellen, muß sein ausschneiden von relevanten Zeilen Unterteilung in Gruppen Unterscheidung von Gruppen auswerten von relevanten Spalten, muß sein ordnen der Ausgabezeilen verknüpfen von mehreren tmp. Tabellen Spaltenauswahl schneidet nicht relevante Spalten der Ergebnisstabelle aus * ... alle Spalten Für Spalten können Abkürzungen, so genannte ALIAS für Spalten vergeben werden, um die Schreibarbeit des Statements zu verkürzen. Die ALIAS Namen bilden die Spaltenüberschrift. i. Bsp.: SELCET Name AS N FROM Kunden Schlüsselwort: DISTINCT Verhindert die Ausgabe identischer Zeilen 4.3. FROM Klausel Muss unbedingt angegeben werden DI. Helmut Tockner 6/12 SQL bei mehreren Tabellen wird das kartesische Produkt (alle möglichen Kombinationen der Records) gebildet und übernommen z.B.: i. A (Nr, Name) 1. 1, Meier 2. 2, Müller 3. 3, Muster ii. B (Wert) 1. 7 2. 8 iii. SELECT A.Nr, A.Name, B.Wert FROM A, B; 1. 2. 3. 4. 5. 6. 1, Meier, 7 1, Meier, 8 2, Müller, 7 2, Müller, 8 3, Muster, 7 3, Muster, 8 In der FROM Klausel können Abkürzungen, sogenannte ALIAS für Tabellennamen vergeben werden um die Schreibarbeit des Statements zu verkürzen. i. Bsp.: SELCET .... FROM Kunden AS K, Adressen AS A 4.4. WHERE Klausel Muss nicht unbedingt angegeben werden, ist aber meistens sinnvoll. Es werden nur jene Zeilen übernommen, die einem angegebenen Kriterium entsprechen. Einfacher Vergleich i. WHERE <Expression> <Op> <Expression> 1. Expression: Variable oder math. Ausdruck 2. Op: =, <>, >=, >, <, <= ii. Verknüpfung, kann beliebig oft erfolgen 1. AND 2. OR 3. NOT DI. Helmut Tockner 7/12 SQL iii. Bsp.: alle Kunden mit KNr zwischen 10-20, 30 – 40 WHERE (KNr >=10 AND KNr <=20) OR (KNr >=30 AND KNr <=40) Bereichssuche: BETWEEN WHERE KNr BETWEEN (10 AND 20) Mustervergleich: LIKE i. % … beliebige Folge beliebiger Zeichen ii. _ ... genau ein Zeichen iii. Access: *, ? Mengenvergleich: IN WHERE Nname IN (“A”,”B”) 4.5. Tabellen verknüpfen (JOIN) Wird auch als JOIN bezeichnet z.B.: i. A (Nr, Name) 1. 1, Meier 2. 2, Müller 3. 3, Muster ii. B (Nr, Wert) 1. 1, 7 2. 2, 8 3. 4, 9 iii. SELECT A.Nr, A.Name, B.Nr, B.Wert FROM A, B WHERE A.Nr = B.Nr; 1. 1, Meier, 1, 7 2. 2, Müller, 2, 8 ohne WHERE Klausel gäbe es folgendes Resultat: 1. 2. 3. 4. 5. 6. 1, Meier, 1, 7 1, Meier, 2, 8 1, Meier, 4, 9 2, Müller, 1, 7 2, Müller, 2, 8 2, Müller, 4, 9 DI. Helmut Tockner 8/12 SQL 7. 3, Muster, 1, 7 8. 3, Muster, 2, 8 9. 3, Muster, 4, 9 4.6. Order By Klausel Sortieren des Ergebnisses Optionale Klausel Syntax SELECT ... FROM .... ORDER BY { <Attrs> | <Numbers> [ASC | DESC ] } i. <Attrs> ii. <Numbers> … Liste von Attributen … Liste von Spaltennummern Bsp., ordnen nach Katalognummer SELECT KNr, NName FROM T_Pupils ORDER BY KNr, Nname Bsp., ordnen nach Nname und VName SELECT KNr, NName FROM T_Pupils ORDER BY NName, VNname 4.7. Spaltenfunktionen Math. Funktionen, die auf eine ganze Ergebnisspalte ausgeführt werden Spaltenfunktion liefert nur eine einzige Ergebniszeile Max …Maximalwert einer Spalte SELECT MAX (Gehalt) FROM T_Pupils .... Min …Minimalwert einer Spalte Avg …Durchschnitt einer Spalte Sum …Summe einer Spalte Count …Anzahl der Zeilen DI. Helmut Tockner 9/12 SQL i. Count (*) …zählt alle Zeilen ii. Count (KNr) …zählt alle Zeilen mit Spaltenwert <> NULL iii. Count (DISTINCT KNr) …zählt alle verschiedenen Spalten Bsp.: SELECT Max (Gehalt) as MaxGehalt, Min (Gehalt) as MinGehalt, Avg (Gehalt) as AvgGehalt, Sum (Gehalt) as SumGehalt FROM T_PUPILS; Bsp.: Wie viele Personen gibt es mit einem Gehalt > 5000 SELECT Count (*) FROM T_Pupils WHERE Gehalt > 5000; 4.8. GROUP BY Klausel Unterteilt in mehrere Gruppen Pro Gruppe wird nur eine einzige Ergebniszeile geliefert T_Tst (Name, Nr, Gruppe) Name A B C D E F G Nr 1 2 3 4 5 6 7 Gruppe 1 1 2 2 3 3 3 SELECT Gruppe FROM T_Tst GROUP BY Gruppe; Liefert 3 Gruppen: Gruppe 1 2 3 Spaltenfunktionen nach GROUP BY werden auf jede Gruppe ausgeführt SELECT Count (*), Gruppe FROM T_Tst GROUP BY Gruppe; Liefert: DI. Helmut Tockner 10/12 SQL Count(*) 2 2 3 Gruppe 1 2 3 Mehrere GROUP BY Attribute möglich SELECT … GROUB BY BNr, Onr … Bsp.: Welche Personen (Vname, Nname) haben mehrere Adressen und wie viele 4.9. HAVING Klausel Bedingung, die auf alle Gruppen angewandt wird i. Es dürfen nur Attribute abgefragt werden, die für die ganze Gruppe eindeutig sind ii. Spaltenfunktionen auch in der HAVING Klausel möglich 4.10. Subqueries In einem SELECT kommt ein weiteres SELECT vor. Dieses liefert einen Wert oder eine Liste von Werten, die in WHERE oder HAVING Bedingungen verwendet werdne können. 4.10.1.Einfache Subqueries Diese liefern genau einen Wert zurück z.B. Tabelle T_Angestellte (ANr, Name, Stundensatz, ...) Welcher Angestellter hat das größte Gehalt ? 1 2 3 4 5 6 7 Meier Müller Huber Agg Krenn Bauer Gomm 250 300 600 150 200 300 900 DI. Helmut Tockner 11/12 SQL Lösung: Unterabfrage ermittelt größten Stundensatz SELECT Name, Stundensatz FROM T_Angestellte WHERE Stundensatz = (SELECT Max (Stundensatz) FROM T_Angestellte) 4.10.2.Subqueries, die eine Liste von werten liefern z.B. Tabelle T_Angestellte (ANr, Name, rDNr) 1 2 3 4 5 6 7 Meier Müller Huber Agg Krenn Bauer Gomm 1 3 3 1 2 3 3 . Tabelle T_Abteilungen (DNr, Abteilung) 1 2 3 Vertrieb Forschung Entwicklung Frage: Welche Abteilung hat die meisten Mitarbeiter ? Lösung: Unterabfrage ermittelt die Anzahl der Mitarbeiter, diese wird dann mit jeder Abteilung verglichen SELECT FROM T_Abteilungen, T_Angestellte WHERE DNr = rDNr GROUP BY Abteilung HAVING Count(*) >= ALL (SELECT Count (*) FROM T_Angestellte GROUP BY rDNr) DI. Helmut Tockner 12/12