Einstieg SQL
Erstellen Sie unter 👉 https://db-sql.ch mit Ihrer Schul-E-Mail-Adresse einen Account. Sie erhalten anschliessend eine E-Mail mit einem Link, um Ihr Konto zu aktivieren.
Sobald Sie dies erledigt haben, können Sie auf die für Sie freigegebenen Datenbankverbindungen zugreifen.
SQL
Eine SQL-Abfrage ist vom Aufbau her immer gleich:
SELECT
[DISTINCT]
Auswahlliste
FROM Quelle [Alias-Name]
[WHERE Where-Klausel]
[ [GROUP BY {Group-by-Attribut}] +
[HAVING Having-Klausel]]
[ORDER BY {Sortierungsattribut [ASC|DESC]}
[LIMIT {Datensatz-Anzahl}];
wobei alles, was in eckigen Klammern steht, optional ist.
DISTINCT- Jeder Datensatz wird nur einmal ausgegeben, auch wenn er mehrfach in der Tabelle vorkommt.
Auswahlliste- Bestimmt, welche Attribute (Spalten) der Quelle angezeigt werden sollen (
*für alle) und ob Aggregationsfunktionen angewendet werden sollen. Aufgezählte Elemente sind mit einem Komma voneinander getrennt. Quelle [Alias-Name]- Spezifiziert, wo die Daten herkommen. Es können Relationen angegeben werden und miteinander als kartesisches Produkt oder als Verbund (
JOIN) verknüpft werden. Durch die Angabe eines Alias-Namen können die Relationen für die Abfrage umbenannt werden. Where-Klausel- Bestimmt die Bedingungen, unter denen die Daten ausgegeben werden sollen. Einzelne Bedingungen können mit
ORoderANDverknüpft werden. Group-by-Attribut- Legt fest, ob unterschiedliche Werte als einzelne Zeilen ausgegeben werden sollen oder ob alle Attributwerte aggregiert (bspw. aufsummiert (
SUM), gemittelt (AVG), kleinster Wert (MIN), grösster Wert (MAX),...) zu einem einzelnen Ergebniswert zusammengefasst werden. Having-by-Attribut- Ist wie die
WHERE-Klausel, nur dass sich die angegebenen Bedingungen auf das Ergebnis einer Aggregationsfunktion beziehen. Sortierungsattribut- Nach dem
ORDER BYStatement werden Attribute angegeben, nach denen sortiert werden soll. Für eine aufsteigende Reihenfolge (1, 2, 3, ...) wirdASCspezifiziert, für eine absteigende ReihenfolgeDESC(99, 80, 13, ...). LIMIT- Gibt an wie viele Datensätze angezeigt werden sollen. Besonders hilfreich bei grossen Datensätzen, oder wenn nur eine gewisse Anzahl der grössten/kleinsten Attributwerte gesucht werden.
Beispiele zum ausprobieren
- Datenbank
- hfr_wms_dbs
- 👉 👉 https://db-sql.ch/connections/3567ba88-a01d-4c46-9912-e802d128d2eb/hfr_wms_dbs
Was passiert mit dieser Abfrage? Probieren Sie es aus!
SELECT name, beschreibung, bild FROM legodudes;
Was passiert mit dieser Abfrage? Probieren Sie es aus!
SELECT * FROM legodudes;
Was passiert mit diesen Abfragen? Wo liegt der Unterschied? Probieren Sie es aus!
SELECT *
FROM legodudes
ORDER BY name ASC;
SELECT *
FROM legodudes
ORDER BY name DESC;
Was macht das LIMIT? Wo liegt der Unterschied zum zweiten Query? Probieren Sie es aus!
SELECT *
FROM legodudes
LIMIT 5;
SELECT *
FROM legodudes
ORDER BY name
LIMIT 5;
Was passiert mit diesen Abfragen? Wo liegt der Unterschied? Probieren Sie es aus!
--- nur mit der id 4
SELECT *
FROM legodudes
WHERE id=4;
SELECT *
FROM legodudes
WHERE land='USA';
Konkrete Aufgaben
Fragen Sie alle Haustiere ab, wobei nur die Tierart, der Name und das Bild (in dieser Reihenfolge) ausgegeben werden sollen. Die Resultate sollen zudem alphabetisch absteigend nach der Tierart sortiert sein.
Fragen Sie bei den Haustieren alle Hunde ab, wobei alle Attribute ausgegeben werden sollen.
Logische Operatoren
Mit den logischen Operatoren AND, OR und NOT können mehrere Bedingungen miteinander verknüpft werden.
SELECT * FROM haustiere
WHERE lieblingsfutter='Körner' AND tierart='Hamster';
SELECT * FROM haustiere
WHERE lieblingsfutter='Körner'
OR lieblingsfutter='Fisch';
SELECT * FROM haustiere
WHERE
NOT lieblingsfutter='Körner' AND (tierart='Hund' OR tierart='Katze');
- Das
NOTbezieht sich jeweils nur auf den direkt folgenden Ausdruck. - Spalten-Namen müssen bei jeden Vergleich erneut angegeben werden.
Wo liegt der Unterschied?
- Probieren Sie die Abfragen aus
- vergleichen Sie die Resultate
- Erklären Sie das Verhalten
SELECT * FROM haustiere
WHERE (NOT lieblingsfutter='Körner' AND tierart='Hund') OR tierart='Hamster';
SELECT * FROM haustiere
WHERE NOT lieblingsfutter='Körner' AND (tierart='Hund' OR tierart='Hamster');
Distinct
Mit dem Schlüsselwort DISTINCT kann angegeben werden, dass jeder Datensatz nur einmal ausgegeben werden soll, auch wenn er mehrfach in der Tabelle vorkommt.
Beispiel: Es sollen alle Tierarten ausgegeben werden, die in der Tabelle haustiere vorkommen.
SELECT DISTINCT tierart FROM haustiere;
Geben Sie alle Länder in welchen Legodudes wohnen in alphabetisch absteigender Reihenfolge aus.