Einführung in SQL

Werbung
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
Herunterladen