Einführung in SQL

25 downloads 22 Views 57KB Size Report
Unterteilt in mehrere Gruppen. ➢ Pro Gruppe wird nur eine einzige Ergebniszeile geliefert. T_Tst (Name, Nr, Gruppe). Name. Nr. Gruppe. A. 1. 1. B. 2. 1. C. 3. 2.
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.] ( [] [,…] );  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
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
[([,…])] VALUES ([,…]);  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
SET = [{, =}…] [WHERE ]  Ä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
[WHERE ]  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 1. Expression: Variable oder math. Ausdruck 2. Op: =, , >=, >, 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