SQL-Abfragen - kantiriederer.ch

Werbung
SQL-Abfragen
9. Oktober 2012
SQL-Abfragen
1. Einleitung
SQL ist eine relational vollständige Datenbanksprache.
SQL-Abfragen
1. Einleitung
SQL ist eine relational vollständige Datenbanksprache.
SQL steht für Structured Query Language.
SQL-Abfragen
1. Einleitung
SQL ist eine relational vollständige Datenbanksprache.
SQL steht für Structured Query Language.
Der englische Ausdruck Query steht für Abfrage.
SQL-Abfragen
1. Einleitung
SQL ist eine relational vollständige Datenbanksprache.
SQL steht für Structured Query Language.
Der englische Ausdruck Query steht für Abfrage.
SQL wurde in den siebziger Jahren des letzten Jahrunderts
entwickelt und gilt heute als führende Sprache auf diesem
Gebiet.
SQL-Abfragen
1. Einleitung
SQL ist eine relational vollständige Datenbanksprache.
SQL steht für Structured Query Language.
Der englische Ausdruck Query steht für Abfrage.
SQL wurde in den siebziger Jahren des letzten Jahrunderts
entwickelt und gilt heute als führende Sprache auf diesem
Gebiet.
Für SQL gibt es einen ISO-Standard. Die meisten aktuellen
Datenbanksysteme verwenden mehr oder weniger grosse Teile
dieses Standards.
SQL-Abfragen
1. Einleitung
SQL ist eine relational vollständige Datenbanksprache.
SQL steht für Structured Query Language.
Der englische Ausdruck Query steht für Abfrage.
SQL wurde in den siebziger Jahren des letzten Jahrunderts
entwickelt und gilt heute als führende Sprache auf diesem
Gebiet.
Für SQL gibt es einen ISO-Standard. Die meisten aktuellen
Datenbanksysteme verwenden mehr oder weniger grosse Teile
dieses Standards.
Wir werden für die folgenden Beispiele exemplarisch das weit
R
verbreitete Datenbanksystem MySQL
verwenden.
SQL-Abfragen
2. Grundstruktur von SQL-Abfragen
SELECT
FROM
[WHERE
merkmalsname [, merkmalsname ...],
tabellenname [, tabellenname ...],
selektionsbedingung];
SQL-Abfragen
2. Grundstruktur von SQL-Abfragen
SELECT
FROM
[WHERE
merkmalsname [, merkmalsname ...],
tabellenname [, tabellenname ...],
selektionsbedingung];
SQL-Schlüsselwörter werden üblicherweise in Grossbuchstaben
geschrieben. Auch Kleinschreibung ist möglich.
SQL-Abfragen
2. Grundstruktur von SQL-Abfragen
SELECT
FROM
[WHERE
merkmalsname [, merkmalsname ...],
tabellenname [, tabellenname ...],
selektionsbedingung];
SQL-Schlüsselwörter werden üblicherweise in Grossbuchstaben
geschrieben. Auch Kleinschreibung ist möglich.
Vorsicht: Bei Tabellen- und Merkmalsnamen wird zwischen
Gross- und Kleinschreibung unterschieden.
SQL-Abfragen
2. Grundstruktur von SQL-Abfragen
SELECT
FROM
[WHERE
merkmalsname [, merkmalsname ...],
tabellenname [, tabellenname ...],
selektionsbedingung];
SQL-Schlüsselwörter werden üblicherweise in Grossbuchstaben
geschrieben. Auch Kleinschreibung ist möglich.
Vorsicht: Bei Tabellen- und Merkmalsnamen wird zwischen
Gross- und Kleinschreibung unterschieden.
Alle Angaben, die bei der Syntaxdefinition in eckigen
Klammern [. . . ] stehen, können weggelassen werden.
SQL-Abfragen
2. Grundstruktur von SQL-Abfragen
SELECT
FROM
[WHERE
merkmalsname [, merkmalsname ...],
tabellenname [, tabellenname ...],
selektionsbedingung];
SQL-Schlüsselwörter werden üblicherweise in Grossbuchstaben
geschrieben. Auch Kleinschreibung ist möglich.
Vorsicht: Bei Tabellen- und Merkmalsnamen wird zwischen
Gross- und Kleinschreibung unterschieden.
Alle Angaben, die bei der Syntaxdefinition in eckigen
Klammern [. . . ] stehen, können weggelassen werden.
Leerzeichen, Tabulatoren und Zeilenschaltungen können zur
besseren Lesbarkeit eingefügt werden.
SQL-Abfragen
2. Grundstruktur von SQL-Abfragen
SELECT
FROM
[WHERE
merkmalsname [, merkmalsname ...],
tabellenname [, tabellenname ...],
selektionsbedingung];
SQL-Schlüsselwörter werden üblicherweise in Grossbuchstaben
geschrieben. Auch Kleinschreibung ist möglich.
Vorsicht: Bei Tabellen- und Merkmalsnamen wird zwischen
Gross- und Kleinschreibung unterschieden.
Alle Angaben, die bei der Syntaxdefinition in eckigen
Klammern [. . . ] stehen, können weggelassen werden.
Leerzeichen, Tabulatoren und Zeilenschaltungen können zur
besseren Lesbarkeit eingefügt werden.
Eine SQL-Anweisung wird mit einem Semikolon (;)
abgeschlossen.
SQL-Abfragen
3. Das ERM der Übungsdatenbank
SQL-Abfragen
4. Tabellenschema der Übungsdatenbank
LIEFERANT(lid, name)
ARTIKEL(aid, bezeichnung, preis, menge, einheit, lid)
KUNDE(kid, nachname, vorname, strasse, plz, ort)
VERKAUF(vid, kid, aid, datum, zeit)
Fremdschlüssel sind blau hervorgehoben.
SQL-Abfragen
5. Die Schnittstelle der Übungsdatenbank
http://efi.kantiriederer.ch/mysql/login.php
Username:
Passwort:
sqlabfrage
x3.kH;jY,97F
SQL-Abfragen
6. Projektionen (1)
SELECT
FROM
nachname, ort
kunde;
liefert eine Tabelle mit den Merkmalen nachname und ort aller
Tupel aus der Tabelle kunde.
SQL-Abfragen
6. Projektionen (1)
SELECT
FROM
nachname, ort
kunde;
liefert eine Tabelle mit den Merkmalen nachname und ort aller
Tupel aus der Tabelle kunde.
nachname
Meier
Baumann
...
ort
Büren NW
Stans
...
SQL-Abfragen
6. Projektionen (2)
Da man häufig alle Merkmalsnamen anzeigen möchten, kann man
anstelle der Aufzählung aller Merkmale auch das Zeichen *
verwenden.
SELECT
FROM
kid
1
2
...
*
kunde;
nachname
Meier
Baumann
...
vorname
Noemi
Riccardo
...
strasse
Buchhölzlistrasse
Künzlistrasse
...
SQL-Abfragen
plz
6382
6370
...
ort
Büren NW
Stans
...
6. Projektionen (3)
SELECT
FROM
plz
6382
6370
6365
...
plz, ort
kunde;
ort
Büren NW
Stans
Kehrsiten
...
SQL-Abfragen
6. Projektionen (3)
SELECT
FROM
plz
6382
6370
6365
...
plz, ort
kunde;
ort
Büren NW
Stans
Kehrsiten
...
Diese Liste ist streng genommen gar keine Tabelle im Sinne des
Relationenmodells. Warum?
SQL-Abfragen
6. Projektionen (3)
SELECT
FROM
plz
6382
6370
6365
...
plz, ort
kunde;
ort
Büren NW
Stans
Kehrsiten
...
Diese Liste ist streng genommen gar keine Tabelle im Sinne des
Relationenmodells. Warum?
Es gibt kein Merkmal bzw. keine Merkmalskombination, die die
Tupel innerhalb der Tabelle eindeutig identifiziert.
SQL-Abfragen
6. Projektionen (4)
Wird hinter SELECT das Schlüsselwort DISTINCT eingefügt, werden
Duplikate eliminiert:
SELECT
FROM
DISTINCT plz, ort
kunde;
SQL-Abfragen
6. Projektionen (4)
Wird hinter SELECT das Schlüsselwort DISTINCT eingefügt, werden
Duplikate eliminiert:
SELECT
FROM
plz
6382
6370
...
DISTINCT plz, ort
kunde;
ort
Büren NW
Stans
...
SQL-Abfragen
7. Qualifizierte Abfragen (1)
Mit Hilfe von Selektionsbedingungen lassen sich qualifzierte
Abfragen durchführen.
SQL-Abfragen
7. Qualifizierte Abfragen (1)
Mit Hilfe von Selektionsbedingungen lassen sich qualifzierte
Abfragen durchführen.
Interessieren wir uns für alle Kunden, die in Stans wohnen, so
lautet die entsprechende SQL-Abfrage:
SELECT
FROM
WHERE
*
kunde
ort = ’Stans’;
SQL-Abfragen
7. Qualifizierte Abfragen (1)
Mit Hilfe von Selektionsbedingungen lassen sich qualifzierte
Abfragen durchführen.
Interessieren wir uns für alle Kunden, die in Stans wohnen, so
lautet die entsprechende SQL-Abfrage:
SELECT
FROM
WHERE
kid
2
8
...
*
kunde
ort = ’Stans’;
nachname
Baumann
Moser
...
vorname
Riccardo
Nathan
...
strasse
Künzlistrasse
Röschibachstrasse
...
SQL-Abfragen
plz
6370
6370
...
ort
Stans
Stans
...
7. Qualifizierte Abfragen (2)
Die Selektionsprädikate könne auch Ungleichheitsbeziehungen
enthalten und mit den logischen Operatoren AND, OR und NOT
verknüpft werden:
SELECT *
FROM
artikel
WHERE preis > 3.0 AND (NOT lid = 6);
SQL-Abfragen
7. Qualifizierte Abfragen (2)
Die Selektionsprädikate könne auch Ungleichheitsbeziehungen
enthalten und mit den logischen Operatoren AND, OR und NOT
verknüpft werden:
SELECT *
FROM
artikel
WHERE preis > 3.0 AND (NOT lid = 6);
Welche Artikel sind teurer als 3 Franken und kommen nicht vom
Lieferanten mit der ID 6?
SQL-Abfragen
7. Qualifizierte Abfragen (2)
Die Selektionsprädikate könne auch Ungleichheitsbeziehungen
enthalten und mit den logischen Operatoren AND, OR und NOT
verknüpft werden:
SELECT *
FROM
artikel
WHERE preis > 3.0 AND (NOT lid = 6);
Welche Artikel sind teurer als 3 Franken und kommen nicht vom
Lieferanten mit der ID 6?
aid
3
5
...
bezeichnung
Zopf
Salami
...
preis
4.50
4.20
...
menge
1
100
...
einheit
Stück
Gramm
...
SQL-Abfragen
lid
1
2
...
7. Qualifizierte Abfragen (3)
Durch Angabe von Merkmalsnamen wird die Selektion mit einer
Projektion verknüpft. Interessiert man sich im letzten Beispiel nur
für die Bezeichnung, so lautet die Abfrage:
SELECT bezeichnung, preis, lid
FROM
artikel
WHERE preis > 3.0 AND (NOT lid = 6);
SQL-Abfragen
7. Qualifizierte Abfragen (3)
Durch Angabe von Merkmalsnamen wird die Selektion mit einer
Projektion verknüpft. Interessiert man sich im letzten Beispiel nur
für die Bezeichnung, so lautet die Abfrage:
SELECT bezeichnung, preis, lid
FROM
artikel
WHERE preis > 3.0 AND (NOT lid = 6);
bezeichnung
Zopf
Salami
Schweinssteak
...
preis
4.50
4.20
5.00
...
lid
1
2
2
...
SQL-Abfragen
7. Qualifizierte Abfragen (4)
Enthält eine Spalte Zahlenwerte, können einfache Berechnungen
damit durchgeführt werden.
Zudem ermöglicht das Schlüsselwort AS die Vergabe eines neuen
Namens (Alias) für die Spaltenüberschrift.
SELECT bezeichnung, preis * 0.025 AS MWSt
FROM
artikel;
SQL-Abfragen
7. Qualifizierte Abfragen (4)
Enthält eine Spalte Zahlenwerte, können einfache Berechnungen
damit durchgeführt werden.
Zudem ermöglicht das Schlüsselwort AS die Vergabe eines neuen
Namens (Alias) für die Spaltenüberschrift.
SELECT bezeichnung, preis * 0.025 AS MWSt
FROM
artikel;
bezeichnung
Ruchbrot
Gipfeli
Zopf
...
MWSt
0.06250
0.02500
0.11250
...
SQL-Abfragen
8. Abfragen mit Zeichenerkennung (1)
Das %-Zeichen steht für eine beliebige Zeichenkette von einem
oder mehreren Buchstaben. Mit dem Schlüsselwort LIKE kann in
der WHERE-Klausel nach Zeichenketten bestimmter Länge gesucht
werden.
SELECT *
FROM
lieferant
WHERE name LIKE ’M%’;
SQL-Abfragen
8. Abfragen mit Zeichenerkennung (1)
Das %-Zeichen steht für eine beliebige Zeichenkette von einem
oder mehreren Buchstaben. Mit dem Schlüsselwort LIKE kann in
der WHERE-Klausel nach Zeichenketten bestimmter Länge gesucht
werden.
SELECT *
FROM
lieferant
WHERE name LIKE ’M%’;
lid
2
4
name
Metzgerei Stierli
Molkerei Senn
SQL-Abfragen
8. Abfragen mit Zeichenerkennung (2)
Der Unterstrich ( ) steht für genau ein (beliebiges) Zeichen. Mit
dem Schlüsselwort LIKE kann in der WHERE-Klausel nach
Zeichenketten bestimmter Länge gesucht werden.
SELECT *
FROM
artikel
WHERE bezeichnung LIKE ’B_____’;
SQL-Abfragen
8. Abfragen mit Zeichenerkennung (2)
Der Unterstrich ( ) steht für genau ein (beliebiges) Zeichen. Mit
dem Schlüsselwort LIKE kann in der WHERE-Klausel nach
Zeichenketten bestimmter Länge gesucht werden.
SELECT *
FROM
artikel
WHERE bezeichnung LIKE ’B_____’;
Mit der obigen Abfrage suchen wir nach Artikelbezeichnungen, die
mit einem ’B’ beginnen und aus genau 6 Zeichen bestehen.
SQL-Abfragen
8. Abfragen mit Zeichenerkennung (2)
Der Unterstrich ( ) steht für genau ein (beliebiges) Zeichen. Mit
dem Schlüsselwort LIKE kann in der WHERE-Klausel nach
Zeichenketten bestimmter Länge gesucht werden.
SELECT *
FROM
artikel
WHERE bezeichnung LIKE ’B_____’;
Mit der obigen Abfrage suchen wir nach Artikelbezeichnungen, die
mit einem ’B’ beginnen und aus genau 6 Zeichen bestehen.
aid
9
14
bezeichnung
Banane
Butter
preis
2.70
2.70
menge
1
250
einheit
Kilogramm
Gramm
SQL-Abfragen
lid
3
4
9. Abfragen mit Aggregatsfunktionen (1)
Neben den Operatoren der Relationenalgebra existieren in SQL
auch sogenannte eingebaute Funktionen, die in der
SELECT-Klausel verwendet werden können. Sie gelten für jeweils
eine Tabellenspalte.
COUNT für die Zählung der Datenwerte
SUM für die Summenbildung über die Datenwerte
MAX und MIN um das Maximum bzw. Minimum zu bestimen
AVG für die Durchschnittbildung (average)
SQL-Abfragen
9. Abfragen mit Aggregatsfunktionen (2)
Wie viele Artikel wurden im Monat Juli verkauft?
SELECT
FROM
WHERE
AND
COUNT(vid) AS ’Anzahl Verkäufe im Juli’
verkauf
datum >= ’2011-07-01’
datum <= ’2011-07-31’;
SQL-Abfragen
9. Abfragen mit Aggregatsfunktionen (2)
Wie viele Artikel wurden im Monat Juli verkauft?
SELECT
FROM
WHERE
AND
COUNT(vid) AS ’Anzahl Verkäufe im Juli’
verkauf
datum >= ’2011-07-01’
datum <= ’2011-07-31’;
Anzahl Verkäufe im Juli
330
SQL-Abfragen
9. Abfragen mit Aggregatsfunktionen (3)
Wie viel kostet unser billigster Artikel?
SQL-Abfragen
9. Abfragen mit Aggregatsfunktionen (3)
Wie viel kostet unser billigster Artikel?
SELECT MIN(preis) AS ’Preis’
FROM
artikel;
SQL-Abfragen
9. Abfragen mit Aggregatsfunktionen (3)
Wie viel kostet unser billigster Artikel?
SELECT MIN(preis) AS ’Preis’
FROM
artikel;
Preis
0.60
SQL-Abfragen
10. Abfragen mit dem Verbundoperator (1)
Datenbankabfragen sind besonders interessant, wenn dabei
mehrere Tabellen verknüpft werden. Wir möchten zum Beispiel
wissen, wie viele Packungen Spaghetti (à 500 g) seit dem Bestehen
der Datenbank verkauft wurden.
SELECT
FROM
WHERE
AND
*
artikel, verkauf
bezeichnung = ’Spaghetti’
artikel.aid = verkauf.aid;
SQL-Abfragen
10. Abfragen mit dem Verbundoperator (1)
Datenbankabfragen sind besonders interessant, wenn dabei
mehrere Tabellen verknüpft werden. Wir möchten zum Beispiel
wissen, wie viele Packungen Spaghetti (à 500 g) seit dem Bestehen
der Datenbank verkauft wurden.
SELECT
FROM
WHERE
AND
aid
19
19
...
*
artikel, verkauf
bezeichnung = ’Spaghetti’
artikel.aid = verkauf.aid;
bezeichnung
Spaghetti
Spaghetti
...
preis
1.80
1.80
...
menge
500
500
...
einheit
Gramm
Gramm
...
SQL-Abfragen
...
...
...
...
10. Abfragen mit dem Verbundoperator (2)
Möchte man die Anzahl der Datensätze nicht von Hand zählen,
verwendet man von Vorteil die Aggregationsfunktion COUNT, der
wir bereits weiter oben begegnet sind.
SELECT
FROM
WHERE
AND
COUNT(artikel.aid) AS "Spaghettipackungen"
artikel, verkauf
bezeichnung = ’Spaghetti’
artikel.aid = verkauf.aid;
SQL-Abfragen
10. Abfragen mit dem Verbundoperator (2)
Möchte man die Anzahl der Datensätze nicht von Hand zählen,
verwendet man von Vorteil die Aggregationsfunktion COUNT, der
wir bereits weiter oben begegnet sind.
SELECT
FROM
WHERE
AND
COUNT(artikel.aid) AS "Spaghettipackungen"
artikel, verkauf
bezeichnung = ’Spaghetti’
artikel.aid = verkauf.aid;
Spaghettipackungen
26
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (1)
Gemäss Definition ist die Reihenfolge der Tupel in einer Tabelle
unwesentlich. Oft möchte man aber, dass die Resultattabelle nach
einem bestimmten Merkmal sortiert dargestellt wird. Dies erreicht
man mit dem Schlüsselwort ORDER BY, gefolgt vom einem
Merkmalsnamen und einem Zusatz, der die Art der Sortierung
präzisiert: ASC = aufsteigend (Voreinstellung), DESC = absteigend.
SELECT *
FROM
kunde
ORDER BY nachname DESC;
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (1)
Gemäss Definition ist die Reihenfolge der Tupel in einer Tabelle
unwesentlich. Oft möchte man aber, dass die Resultattabelle nach
einem bestimmten Merkmal sortiert dargestellt wird. Dies erreicht
man mit dem Schlüsselwort ORDER BY, gefolgt vom einem
Merkmalsnamen und einem Zusatz, der die Art der Sortierung
präzisiert: ASC = aufsteigend (Voreinstellung), DESC = absteigend.
SELECT *
FROM
kunde
ORDER BY nachname DESC;
kid
22
...
nachname
Zimmermann
...
vorname
Ben
...
strasse
Schanzeneggstrasse
...
SQL-Abfragen
plz
6370
...
ort
Stans
...
11. Sortieren und Gruppieren von Tupel-Einträgen (2)
Es gibt Situationen, in denen man innerhalb der Resultattabelle die
Tupel nach bestimmten Kriterien zusammenfassen möchte. Dazu
dient das Schlüsselwort GROUP BY.
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (2)
Es gibt Situationen, in denen man innerhalb der Resultattabelle die
Tupel nach bestimmten Kriterien zusammenfassen möchte. Dazu
dient das Schlüsselwort GROUP BY.
Wie viele Artikel werden von jedem Lieferanten geliefert?
SELECT
lid, COUNT(lid) AS ’Anzahl Artikel’
FROM
artikel
GROUP BY lid;
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (2)
Es gibt Situationen, in denen man innerhalb der Resultattabelle die
Tupel nach bestimmten Kriterien zusammenfassen möchte. Dazu
dient das Schlüsselwort GROUP BY.
Wie viele Artikel werden von jedem Lieferanten geliefert?
SELECT
lid, COUNT(lid) AS ’Anzahl Artikel’
FROM
artikel
GROUP BY lid;
id
1
2
...
Anzahl Artikel
3
4
...
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (3)
Wenn man anstelle der Lieferanten-Nummer die konkreten
Lieferanten-Namen angezeigt haben möchte, muss man zusätzlich
den Verbund-Operator anwenden.
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (3)
Wenn man anstelle der Lieferanten-Nummer die konkreten
Lieferanten-Namen angezeigt haben möchte, muss man zusätzlich
den Verbund-Operator anwenden.
SELECT
FROM
WHERE
GROUP BY
name, COUNT(lieferant.lid) AS ’Anzahl Artikel’
artikel, lieferant
artikel.lid = lieferant.lid
lieferant.lid;
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (3)
Wenn man anstelle der Lieferanten-Nummer die konkreten
Lieferanten-Namen angezeigt haben möchte, muss man zusätzlich
den Verbund-Operator anwenden.
SELECT
FROM
WHERE
GROUP BY
name, COUNT(lieferant.lid) AS ’Anzahl Artikel’
artikel, lieferant
artikel.lid = lieferant.lid
lieferant.lid;
name
Bäckerei Müller
Metzgerei Stierli
...
Anzahl Artikel
3
4
...
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (4)
Aus den mit GROUP BY zusammengefassten Tupeln können wir mit dem
Zusatz HAVING ein Auswahl treffen. Dabei ist zu beachten, dass dieses
Auswahlkriterium nur in Verbindung mit Aggregatsfunktionen zulässig ist.
Wie viele Kunden haben mehr als 30 Artikel gekauft?
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (4)
Aus den mit GROUP BY zusammengefassten Tupeln können wir mit dem
Zusatz HAVING ein Auswahl treffen. Dabei ist zu beachten, dass dieses
Auswahlkriterium nur in Verbindung mit Aggregatsfunktionen zulässig ist.
Wie viele Kunden haben mehr als 30 Artikel gekauft?
SELECT
FROM
GROUP BY
HAVING
v.kid, COUNT(v.vid) AS "Anzahl Artikel"
verkauf AS v
v.kid
COUNT(v.vid) > 30;
Mit AS können auch Aliase für Tabellennamen erzeugt werden. Diese sind im ganzen SQL-Statement gültig.
SQL-Abfragen
11. Sortieren und Gruppieren von Tupel-Einträgen (4)
Aus den mit GROUP BY zusammengefassten Tupeln können wir mit dem
Zusatz HAVING ein Auswahl treffen. Dabei ist zu beachten, dass dieses
Auswahlkriterium nur in Verbindung mit Aggregatsfunktionen zulässig ist.
Wie viele Kunden haben mehr als 30 Artikel gekauft?
SELECT
FROM
GROUP BY
HAVING
v.kid, COUNT(v.vid) AS "Anzahl Artikel"
verkauf AS v
v.kid
COUNT(v.vid) > 30;
Mit AS können auch Aliase für Tabellennamen erzeugt werden. Diese sind im ganzen SQL-Statement gültig.
kid
29
53
68
Anzahl Artikel
37
36
31
SQL-Abfragen
12. Vereinigung
Der entsprechende Operator heisst UNION. Für eine Vereinigung
müssen die Tabellen vereinigungsverträglich sein.
Welche Artikel stammen von Lieferant 3 oder von Lieferant 5?
SQL-Abfragen
12. Vereinigung
Der entsprechende Operator heisst UNION. Für eine Vereinigung
müssen die Tabellen vereinigungsverträglich sein.
Welche Artikel stammen von Lieferant 3 oder von Lieferant 5?
(SELECT * FROM artikel WHERE lid = 3)
UNION
(SELECT * FROM artikel WHERE lid = 5);
SQL-Abfragen
12. Vereinigung
Der entsprechende Operator heisst UNION. Für eine Vereinigung
müssen die Tabellen vereinigungsverträglich sein.
Welche Artikel stammen von Lieferant 3 oder von Lieferant 5?
(SELECT * FROM artikel WHERE lid = 3)
UNION
(SELECT * FROM artikel WHERE lid = 5);
Die Klammern können auch weggelassen werden, da UNION schwächer bindet als SELECT.
SQL-Abfragen
12. Vereinigung
Der entsprechende Operator heisst UNION. Für eine Vereinigung
müssen die Tabellen vereinigungsverträglich sein.
Welche Artikel stammen von Lieferant 3 oder von Lieferant 5?
(SELECT * FROM artikel WHERE lid = 3)
UNION
(SELECT * FROM artikel WHERE lid = 5);
Die Klammern können auch weggelassen werden, da UNION schwächer bindet als SELECT.
aid
8
9
...
16
bezeichnung
Apfel
Banane
...
Ei
preis
2.30
2.70
...
0.60
menge
1
1
...
1
einheit
Kilogramm
Kilogramm
...
Stück
SQL-Abfragen
lid
3
3
...
5
13. Durchschnitt und Differenz
MySQL kennt keine direkte Unterstützung für die
SQL-Mengenoperationen
INTERSECT und
EXCEPT (oder MINUS)
Daher müssen diese Operationen über einen Umweg gebildet
werden. Das ersparen wir uns aber.
SQL-Abfragen
14. Kartesisches Produkt
Das kartesische Produkt ist nichts anderes als ein Verbund mit
einem leeren Prädikat.
SQL-Abfragen
14. Kartesisches Produkt
Das kartesische Produkt ist nichts anderes als ein Verbund mit
einem leeren Prädikat.
Achtung: Ohne Prädikat führt das kartesische Produkt schnell zu
sehr grossen Produkttabellen“.
”
SQL-Abfragen
14. Kartesisches Produkt
Das kartesische Produkt ist nichts anderes als ein Verbund mit
einem leeren Prädikat.
Achtung: Ohne Prädikat führt das kartesische Produkt schnell zu
sehr grossen Produkttabellen“.
”
SELECT *
FROM
artikel, lieferant;
SQL-Abfragen
14. Kartesisches Produkt
Das kartesische Produkt ist nichts anderes als ein Verbund mit
einem leeren Prädikat.
Achtung: Ohne Prädikat führt das kartesische Produkt schnell zu
sehr grossen Produkttabellen“.
”
SELECT *
FROM
artikel, lieferant;
Wie viele Zeilen hat das obige kartesische Produkt aus den
Tabellen artikel und lieferant?
SQL-Abfragen
14. Kartesisches Produkt
Das kartesische Produkt ist nichts anderes als ein Verbund mit
einem leeren Prädikat.
Achtung: Ohne Prädikat führt das kartesische Produkt schnell zu
sehr grossen Produkttabellen“.
”
SELECT *
FROM
artikel, lieferant;
Wie viele Zeilen hat das obige kartesische Produkt aus den
Tabellen artikel und lieferant?
243 = 27 · 9
SQL-Abfragen
15. Geschachtelte Abfragen
Manchmal ist es nötig, eine SQL-Abfrage innerhalb einer anderen
zu formulieren.
In einem früheren Beispiel haben wir den tiefsten Preis bestimmt,
den ein Artikel in unserem Sortiment haben kann. Möchte man
auch noch wissen, um welchen (welche) Artikel es sich handelt,
müssen SQL-Abfragen geschachtelt werden:
SQL-Abfragen
15. Geschachtelte Abfragen
Manchmal ist es nötig, eine SQL-Abfrage innerhalb einer anderen
zu formulieren.
In einem früheren Beispiel haben wir den tiefsten Preis bestimmt,
den ein Artikel in unserem Sortiment haben kann. Möchte man
auch noch wissen, um welchen (welche) Artikel es sich handelt,
müssen SQL-Abfragen geschachtelt werden:
SELECT
FROM
WHERE
bezeichnung, preis
artikel
preis >= ALL (SELECT preis
FROM
artikel);
SQL-Abfragen
15. Geschachtelte Abfragen
Manchmal ist es nötig, eine SQL-Abfrage innerhalb einer anderen
zu formulieren.
In einem früheren Beispiel haben wir den tiefsten Preis bestimmt,
den ein Artikel in unserem Sortiment haben kann. Möchte man
auch noch wissen, um welchen (welche) Artikel es sich handelt,
müssen SQL-Abfragen geschachtelt werden:
SELECT
FROM
WHERE
bezeichnung, preis
artikel
preis >= ALL (SELECT preis
FROM
artikel);
bezeichnung
Waschmittel
preis
12.00
SQL-Abfragen
16. Was es sonst noch gibt
Tabellen erzeugen und löschen (CREATE TABLE, DROP TABLE)
Datensätze einfügen und löschen (INSERT, DELETE)
Datensätze verändern und akutalisieren (ALTER, UPDATE)
Tabellen mischen (MERGE)
Benutzerrechte vergeben (GRANT)
usw.
SQL-Abfragen
Quelle
A. Meier, Relationale und postrelationale Datenbanken,
Springer Berlin, 2007
SQL-Abfragen
Herunterladen