SQL Select

Werbung
Merkblatt
D-2.1
Datentechnik
SQL SELECT
SQL Select
Datenbasis
Grundlage einer Datenabfrage bilden Tabellen.
Person
Autoschild
Person
PID
AID
1
PID
Name
Name
NR
1
Meier
m Pers (*)
2
Karlen
seit
3
Grüter
4
Fior
5
Meier
Autoschild
AId
NR
1
ZH 23
2
AG3
3
ZH 5
4
ZH 67
5
SG 4
6
ZH 54
7
AG 33
Pers
3
1
4
3
3
4
5
seit
1990
1978
2000
1990
1995
1990
2000
SQL Grundbefehl
SELECT
FROM
WHERE
Person.Name, Autoschild.NR
Person, Autoschild
Person.PID = Autoschild.Pers
Resultat :
Person.Name
Grüter
Meier
Fior
Grüter
Grüter
Fior
Meier
Autoschild.NR
ZH 23
AG 3
ZH 5
ZH 67
SG 4
ZH 54
AG 33
!
Liste der Attribute die angezeigt werden
Liste der benötigten Tabellen
Festlegen der Beziehung über
Schlüssel-Fremdschlüssel Paar
( EQUI-Join)
ACHTUNG :
Meier, AG 3 und
Meier, AG 33
ist nicht die gleiche Person!
Ganz korrekt wäre das Resultat, wenn
auch der Schlüsselwert PID in die Abfrage
einbezogen wäre!
!
Da zu Karlen (PID = 2) kein korrespondierender Eintrag existiert, erscheint diese Person
auch nicht in den Resultatdaten!
(Hinweis : Bei Abfrage mit Outer-Join auf Tabelle Person werden alle Personen angezeigt)
Abteilung Informatik/Technik
Merkblatt D2-1 SQL_a.doc
1/4
Datentechnik
SQL SELECT
Merkblatt
D-2.1
Filter
Filter dienen der Auswahl ganz bestimmter Datensätze
SELECT
Person.Name, Autoschild.NR
FROM
Person, Autoschild
WHERE
Person.PID = Autoschild.Pers
AND Autoschild.NR LIKE ’ZH%’
Resultat :
Person.Name
Grüter
Fior
Grüter
Fior
Text muss in ‘ ‘ angeschrieben
werden
Autoschild.NR
ZH 23
ZH 5
ZH 67
ZH 54
Operatoren
=
>=, <=, <>
LIKE
BETWEEN .. AND ..
AND, OR
Gleichheit von zwei Attributwerten
kleiner, grosser, ungleich
“Ähnlichkeit” von Zeichenketten
Bereich mit Start- und Endwert
logische Verknüpfung mehrerer Bedingungen
Textersatz
%
_
2/4
für viele beliebige Zeichen
für genau ein beliebiges Zeichen
V 1.1
© René Probst
Merkblatt
D-2.1
Datentechnik
SQL SELECT
Aggregationen
Die Attribute der Ausgabe können einer Funktion zugewiesen und so weiter verarbeitet
werden.
Einige Funktionen
COUNT
SUM
AVG
MIN, MAX
usw.
zählt die resultierenden Datensätze
summiert die Datenwert (nur für Zahlen)
ermittelt den arithmetischen Mittelwert
ermittelt den kleinsten, grössten Attributswert
Abfrage für Aggregierung
„Wie viele Autos besitzen die Personen?“
Die Abfrage muss – bis auf die aggregierte Spalte – redundante Datensätze liefern!
SELECT
Person.PID Person.Name, COUNT(Person.PID) AS ’Anzahl Auto’
FROM
Person, Autoschild
WHERE
Person.PID = Autoschild.Pers
GROUP BY Person.PID, Person.Name
Alle Attribute die nicht in die Aggregation eingebunden sind, müssen in der GROUB BY
Klausel aufgelistet werden!
Resultat :
PID
Person.Name
4
Fior
3
Grüter
1
Meier
5
Meier
Anzahl Auto
2
3
1
1
Filter auf aggregierten Wert
„Welche Personen haben mehr als zwei Autos?“
SELECT
Person.PID, Person.Name, COUNT(Person.PID) AS ’Anzahl Auto’
FROM
Person, Autoschild
WHERE
Person.PID = Autoschild.Pers
GROUP BY Person.PID, Person.Name
HAVING
Count(Person.PID) > 2
Resultat :
Person.Name
Grüter
Anzahl Auto
3
Abteilung Informatik/Technik
Merkblatt D2-1 SQL_a.doc
3/4
Datentechnik
SQL SELECT
Merkblatt
D-2.1
Typische Fehlerfälle
Kreuzprodukt
Beziehung zwischen den Tabellen werden nicht berücksichtigt!
SELECT
Person.Name, Autoschild.NR
FROM
Person, Autoschild
Beziehung fehlt!!
5 Einträge in Tabelle Person und 7 Einträge in Tabelle Autoschild
5 * 7 = 35 Datensätze angezeigt
Unnötige Beziehungen
Es werden Tabellen aufgelistet, die für die Abfrage nicht relevant sind!
SELECT
Person.Name
FROM
Person, Autoschild
Autoschild ist nicht nötig, da nur Name!
WHERE
Person.PID = Autoschild.Pers
ohne Beziehung ergibt sich ein
Kreuzprodukt mit 35 Datensätzen!
Es werden alle verknüpften Datensätze angezeigt, d.h. dass auch Mehrfachnennungen
vorkommen und Datensätze ohne Fremdschlüssel nicht erscheinen (hier z.B. Karlen)
Resultat falsch :
Resultat korrekt :
SELECT Person.Name
Person.Name
Person.Name
FROM Person
Grüter
Meier
Meier
Karlen
Abfrage ohne unnötige Tabellen
Fior
Grüter
und Beziehungen!
Grüter
Fior
Grüter
Meier
Fior
Meier
Unnötige Gruppierung
Wird auf eine SQL-Abfrage die GROUP BY Klausel angewendet, so werden gleiche
(redundante) Datensätze zusammengefasst!
SELECT
Person.Name
FROM
Person
GROUP BY Person.Name
Person.Name
Meier
Karlen
Grüter
Fior
4/4
Die beiden Meier werden als ein Datensatz interpretiert!
V 1.1
© René Probst
Herunterladen