SQL Anfragen Flashcards
Generelle Form von Anfragen
select A1, ..., An from R1, ..., Rn where P A = Attribute R = Relationen P = Prädikat
Anfrage “select A from R1, R2 where P” in Relationenalgebra
pi A (sigma P (R1 x R2))
- > Kreuzen von Relationen R1 & R2
- > Selektion auf Prädikat
- > Ausgeben von bestimmtem Attribut
Formuliereung für Prädikatzeile “where”
where prädikatname = “prädikat”;
Ausgeben von allen Tabellenspalten
select *
Ist Ausgabe ohne Projektion möglich? Wie?
Über “select A from R;”
Limitierung der Selektion ohne Projektion
select A from R limit n;
wobei n = Anzahl d. ausgegebenen Zeilen
Limitierung der Stringlänge eines Attributs einer Selektion ohne Projektion
select substring (attributname, n, j) from R; wobei n = beginnendes Zeichen (ab 1) und j = Länge d. Substring
Sortieren der Ausgabe einer Selektion ohne Projektion (+Reihenfolge umkehren)
select A1, A2 from R order by A1;
select A1, A2 from R oder by A1 desc;
Kreuzprodukt zweier ganzer Tabellen
select * from R1, R2;
Selektion des Kreuzproduktes zweier Tabellen auf identische Attribute
select * from R1, R2
where R1.attributname = R1.attributname;
Auf mehrere Prädikate filtern
select A
from R1, R2
where P1 and P2;
Was muss beim Joinen mehrer Tabbellen gemacht werden?
Bei n Tabellen muss auf n-1 identische Attribute selektiert werden (Verknüpfung in Prädikat mit “and”)
Join über Befehl “join … using …”? Was ist Vorraussetzung?
select A
from R1 join R2
using (attributname);
Vorraussetzung: attributname ist identisch
Join über Befehl “natural join”?
select A
from R1 natural join R2
Was macht natural join? Vorraussetzung?
Joint Tabellen anhand von identischem Attribut
Vorraussetzung: attributname ist identisch
Gleichheiten von Prädikaten überprüfen
über = / > / >=
auch bei Strings
Boolsches Vergleichen von Prädikaten
über not / or / and
Komplexe Textvergleiche von Prädikaten
über like / regexp
Verwendung von “not”: Wie notiert?
where not (attributname = "attribut") Geht auch mit > oder < oder <= oder like etc.
Welche Ähnlichkeiten bei String-Vergleich mit “like” müssen gegeben sein/welchw Unterschiede darf es geben?
a like b
Wenn b “_” enthält kann a irgend ein Zeichen der gleichen länge enthalten
Wenn b “%” enthält kann a beliebig lange Zeichenkette enthalten
Zeilenweise Anwendung von Funktionen (als Relationenalgebra)
zetta(erstes Zeichen von(A1), Länge(A2), Länge(A3)) (Relation)
Zeilenweise Anwendung in SQL
select substring (attributname, n, j), length(attributname) + length(attributname) from R;
Mögliche Operatoren für Zeilenweise Anwendungen in SQL (mglw. nachschlagen)
Addition/Subtraktion + / - Absolutbetrag einer Zahl abs Sinus einer Zahl sin Länge d. Strings length Verkettung v. Strings concat substring
Wofür werden Aggregate genutzt?
Ausagen über Anzahl von Zeilen in einer bestimmten Spalte
Grundform der Aggregatsfunktion?
select aggregatsfunktion (spaltenname/n)
from R
where P;
Aggregatsfunktion: Durchschnitt d. Attributs a
avg(a)
Aggregatsfunktion: Anzahl d. Attributs a
count(a)
Aggregatsfunktion: Anzahl unterschiedliche Zeilen d. Attributs a
count(distinct a)
Aggregatsfunktion: Maximum & Minimum
max(a), min(a)
Aggregatsfunktion: Standardabweichung d. Attributs a
std(a), stddev(a)
Aggregatsfunktion: Summe v. Attribut a
sum(a)
Was kann nach der Aggregatsfunktion stehen um Spalte zu differenzieren?
Attribut -> attributname
Ausdrücke z.B. length (attributname)
Wenn 1 Aggregat steht können nur Aggregate folgen
Gruppieren v. Aggregatsfunktionen: Was?
Ausgabe soll nicht für 1 bestimmte Entität sein, sondern mehrere (durch Prädikat beschriebene) Entitäten
Generelle Form von gruppierten Aggregatsfunktionen
select attributname1, attributname2, aggregatsfunktion (spaltenname/n)
from R
where P
group by attributname1, attributname2;
Einschränken der Ausgabe einer Aggregatsfunktion: Problem & Lösung?
Geht nicht mit “where”, da “where” vor Aggregatsfunktion durchgeführt wird
Lösung: mit “having”
Generelle Form von gruppierter & eingeschränkter Aggregatsfunktion
select attributname1, aggregatsfunktion (spaltenname/n) from R where P1 group by attributname1 having P2;
Unteranfragen als Tabellen Grundform
nach “from”:
(select . . .) as tabellenname
wobei . . . ein beliebig komplizierter Ausdruck sein kann
Tabellenspalten in Unteranfragen neu benennen
über "as": select aggregatsfunktion (neuername) from (select attributname, aggregatsfunktion (attributname) as neuername from tabellenname) group by attributname as tabellenname;
Was macht Befehl “as”, wo kann er verwendet werden?
Gibt Tabellen oder Tabellenspalten (Attributen) neue Namen:
immer nach “select” oder “from”
Unteranfragen als Wert Grundform
nach “from”:
(select . . .)
wobei . . . ein beliebig komplizierter Ausdruck sein kann
Was ist Vorraussetzung für Unteranfrage als Wert? Wo können Werte verwendet werden?
Ausdruck in (select . . .) muss Tabelle mit genau 1 Zeile und 1 Spalte ausgeben Verwendung an allen Stellen in Anfrage, an denen einfacher Wert stehen kann
Unteranfragen als Quantile Grundform
nach “where”:
where attributname in (select . . .)
Wann wird Anfrage der Quantile wahr?
wenn mindestens eine Zeile d. neuen Tabelle mit dem Statement links von “in” übereinstimmt
Quantile bei denen nach Ungleichheit verglichen wird
”= any” -> Gleichheit
Ungleichheit:
, >= any
Quantile bei denen alle Zeilen d. neuen Tabelle mit dem Statement übereinstimmen müssen
, >= all
Quantile bei denen auf Gegensatz verglichen wird
<> any
not all
<> all
Prüfen ob Unteranfrage leer ist oder nicht
exists ( select . . .)