MySQL-HM-Abfragen Flashcards
Operationen für Auswertungs- und Abfrageoptionen
Projektion * Auswahl von Spalten Selektion * Auswahl bestimmter Zeilen nach Kriterien Join * Zusammenfassen mehrerer Tabellen
select feldname [Projektion]
from tabellenname [Join]
where bedingung; [Selektion]
Projektion
* es sollen nur bestimmte Felder aus der Tabelle angezeigt werden select feldname1, feldname2from tabellenname;
Selektion
* es sollen nur Datensätze angezeigt werden, die auf eine betimmte Bedingung zutreffen select *from tabellennamewhere feldname = “bedingung”;
Join
* zeigt Werte aus zwei oder mehr Tabellen in einer Ergebnistabelle an * Verbindung wird meist über Primary und Foreign Keys hergestellt
alternativer Join
select *from tabellenname1, tabellenname2where feldname = bedingung; * Verarbeitung langsamer, da zuerst kartesisches Produkt gebildet wrid und dann die Bedingung überprüft wird
Inner Join
* zeigt Datensätze sooft an, wie in der anderen Tabelle verwandte Datensätze vorhanden sind
select *from tabellenname1 [inner] join tabellenname2on tabellenname1.primärschlüssel = tabellenname2.fremdschlüssel;
Jion über mehrere Tabellen
select *from tabellenname1 join tabellenname2 on tabellenname1.pk = tabellenname2.fk join tabellenname3 on tabellenname2.pk = tabellenname3.fk;
Left [Outer] Join
zeigt Datensätze der rechten Tabelle sooft an, wie in der linken Tabelle verwandte Datensätze vorhanden sind jeder Datensatz der linken Tabelle wird mindestens einmal angezeigt
select * from tabellenname1 left [outer] join tabellenname2 on tabellenname1.pk = tabellenname2.fk
Right [Outer] Join
* zeigt Datensätze der rechten Tabelle sooft an, wie in der linken Tabelle verwandte Datensätze vorhanden sind * jeder Datensatz der rechten Tabelle wird mindestens einmal angezeigt
select * from tabellenname1 right [outer] join tabellenname2 on tabellenname1.pk = tabellenname2.fk
gleiche Spaltennamen / Alias
* werden in verschiedenen Tabellen die gleichen Spaltenbezeichnungen verwendet muss der Tabellenname angegeben werden. * Alias kürzt Tabellenname ab
select t.feldname, t.feldname2, t.feldname3 from tabellenname1 [as] t join tabellenname2 [as] t2on t.pk = t2.fk;
Self Join
* Verknüpfung einer Tabelle mit sich selbst * zusätzlicher Feldname für die Projektion muss angegeben werden
Anwendungsbeispiel 1 (Vorgesetzen anzeigen):
select ma1.persnr, ma1.vorname, ma1.nachname, ma2.vorname v_vorn, ma2.nachname v_nachnfrom mitarbeiter ma1 join mitarbeiter ma2 on ma1.vorgesetzter = ma2.persnr;
Anwendungsbeispiel 2 (Duplikate finden):
select *from kunde as a join kunde as bon a.kdnr != b.kdnrwhere a.vorname = b.vornameand a.nachname = b.nachnameand a.geburtsdatum = b.geburtsdatum;
Cross Join
* berechnet das karthesische Produkt => Datensatz aus jeder Tabelle wird angezeigt * belastet u. U. Datenbankserver und soll nicht verwendet werden
select * from tabellennamejoin tabellenname1join tabellenname2join tabellenname3;
Projektion, Selektion, Join in einem Statement
select feldname1, feldname2, feldname3 from tabellenname join tabellenname2 on tabellenname.pk = tabellenname2.fk where feldname3 = bedingung;
distinct
* zeigt jeden Datensatz nur einmal an, egal wie oft er im Join vorkommt
select distinct feldname1, feldname2, feldname3 from tabellenname join tabellenname2on tabellename.pk = tabellenname.fk;
and und [x]or
and
select feldname1, feldname2, feldname3 from tabellennamewhere feldname1 = wert and feldname2 = wert;
[x]or
select feldname1, feldname2, feldname3 from tabellennamewhere feldname1 = wert[x]or feldname2 = wert;
in
mehrere or-Abfragen auf ein Feld können mit in ersetzt werden
select feldname1, feldname2, feldname3 from tabellennamewhere feldname1 in (“wert1”, “wert2”);
gleichzeitige Verwendung von and und [x]or
bei gleichzeitige Verwendung ist and stärker als [x]or
select kdnr, nachname, ort from kunde where ort = “essen” and rabatt 0.06 or kdnr 1000;
=> Kunde kommt aus Essen und hat weniger als 6% Rabatt oder er hat eine Kundennummer unter 1000 * es kann auch geklammert werden
select kdnr, nachname, ort from kundewhere ort = “essen” and (rabatt 0.06 or kdnr 1000);
=> Kunde muss aus Essen kommen und hat entweder weniger als 6% Rabatt oder eine Kundennummer unter 1000
not
Ausdrücke können mit not negiert werden
select kdnr, nachname, ort from kunde where not ort = “essen”;
select kdnr, nachname, ort from kunde where ort != “essen”;
between
between schränkt einen Wertebereich ein
select *from kundewhere rabatt >= 0.03 AND rabatt <= 0.06;
select *from kundewhere rabatt between 0.03 and 0.06;
like
like wertet Teil von Feldern aus
% => beliebig viele beliebige Zeichen
_ => ein beliebiges Zeichen
select * from kundewhere ort like “m%”;