Zum Hauptinhalt springen
Version: 28Wa

Einstieg SQL

db-sql.ch

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 OR oder AND verknü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 BY Statement werden Attribute angegeben, nach denen sortiert werden soll. Für eine aufsteigende Reihenfolge (1, 2, 3, ...) wird ASC spezifiziert, für eine absteigende Reihenfolge DESC (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
1. Ausprobieren

Was passiert mit dieser Abfrage? Probieren Sie es aus!

SELECT name, beschreibung, bild FROM legodudes;
Laden...
2. Ausprobieren

Was passiert mit dieser Abfrage? Probieren Sie es aus!

SELECT * FROM legodudes;
Laden...
3. Ausprobieren

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;
Laden...
4. Ausprobieren

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;
Laden...
5. Ausprobieren

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';
Laden...

Konkrete Aufgaben

6. Haustiere

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.

Laden...
Laden...
7. Nur Hunde

Fragen Sie bei den Haustieren alle Hunde ab, wobei alle Attribute ausgegeben werden sollen.

Laden...
Laden...

Logische Operatoren

Mit den logischen Operatoren AND, OR und NOT können mehrere Bedingungen miteinander verknüpft werden.

Zwei Bedingungen, die erste und die zweite müssen erfüllt sein
SELECT * FROM haustiere
WHERE lieblingsfutter='Körner' AND tierart='Hamster';
Zwei Bedingungen, die Eine oder die Andere muss erfüllt sein
SELECT * FROM haustiere
WHERE lieblingsfutter='Körner'
OR lieblingsfutter='Fisch';
Kombinierte Bedingung - die Klammerung gibt an, was zusammengehört.
SELECT * FROM haustiere
WHERE
NOT lieblingsfutter='Körner' AND (tierart='Hund' OR tierart='Katze');
Beachte
  • Das NOT bezieht sich jeweils nur auf den direkt folgenden Ausdruck.
  • Spalten-Namen müssen bei jeden Vergleich erneut angegeben werden.
8. Klammerung

Wo liegt der Unterschied?

  1. Probieren Sie die Abfragen aus
  2. vergleichen Sie die Resultate
  3. 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');
Laden...

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;
9. Distinct

Geben Sie alle Länder in welchen Legodudes wohnen in alphabetisch absteigender Reihenfolge aus.

Laden...
Laden...