Jetzt ist es an der Zeit, alles zusammenzubringen und zu lernen, wie man einfache, aber nützliche Abfragen mit einer Kombination aus SELECT, WHERE und ORDER BY schreibt. Diese Fähigkeit brauchst du für viele Aufgaben, von User-Listen bis zu kleinen Reports.
Bevor wir loslegen, hier nochmal die Struktur einer einfachen SQL-Abfrage:
SELECT spalte1, spalte2, spalte3
FROM tabelle
WHERE bedingung
ORDER BY spalte ASC
LIMIT anzahl_zeilen
OFFSET anzahl_zeilen;
Wenn SQL ein literarisches Werk wäre, dann wäre SELECT der Kapitel-Titel, FROM der Inhalt, und WHERE die Erklärung der Handlung. Und ORDER BY bringt Ordnung rein, damit das Lesen mehr Spaß macht!
Die Reihenfolge der Operatoren ist fest. Du kannst manche weglassen, aber die Reihenfolge darfst du nicht ändern.
Beispiel 1: Auswahl von Studentennamen mit sehr guten Noten
Stell dir vor, wir haben eine Tabelle students mit folgender Struktur und Daten:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto | 21 | A |
| 2 | Maria | 22 | B |
| 3 | Alex | 20 | A |
| 4 | Nat | 23 | C |
| 5 | Dan | 25 | B |
Du willst eine Liste aller Studenten mit sehr guter Note (also grade = 'A'), sortiert nach Name. So geht's:
SELECT name
FROM students
WHERE grade = 'A'
ORDER BY name ASC;
Ergebnis:
| name |
|---|
| Alex |
| Otto |
Erklärung:
SELECT name— wir holen nur den Namen. Keine Ressourcen verschwenden für Daten, die wir nicht brauchen.WHERE grade = 'A'— wir filtern nur die mit sehr guter Note.ORDER BY name ASC— wir sortieren die Namen alphabetisch.
Beispiel 2: Produktsuche nach Preis
Jetzt nehmen wir an, wir haben eine Tabelle products mit Infos zu Produkten:
| id | product_name | category | price |
|---|---|---|---|
| 1 | Smartphone | Electronics | 30000 |
| 2 | Fernseher | Electronics | 45000 |
| 3 | Kühlschrank | Appliances | 50000 |
| 4 | Staubsauger | Appliances | 15000 |
| 5 | Glühbirne | Lighting | 500 |
Unsere Aufgabe: Liste aller Produkte aus der Kategorie "Electronics", absteigend nach Preis sortiert. Die Query sieht so aus:
SELECT product_name, price
FROM products
WHERE category = 'Electronics'
ORDER BY price DESC;
Ergebnis:
| product_name | price |
|---|---|
| Fernseher | 45000 |
| Smartphone | 30000 |
Erklärung:
SELECT product_name, price— wir holen Produktname und Preis.WHERE category = 'Electronics'— wir filtern nur Produkte aus der Kategorie "Electronics".ORDER BY price DESC— wir sortieren absteigend nach Preis (das teuerste Produkt zuerst).
Beispiel 3: Komplexe Filter mit Logik
Wir nehmen wieder die Tabelle students. Sagen wir, wir wollen alle Studenten finden, die älter als 21 sind und deren Note B oder C ist, sortiert nach Alter. Hier kombinieren wir mehrere Bedingungen:
SELECT name, age, grade
FROM students
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
ORDER BY age ASC;
Ergebnis:
| name | age | grade |
|---|---|---|
| Maria | 22 | B |
| Nat | 23 | C |
| Dan | 25 | B |
Erklärung:
WHERE age > 21— wir nehmen nur Studenten, die älter als 21 sind.AND (grade = 'B' OR grade = 'C')— wir filtern die, deren Note entwederBoderCist. Die Klammern gruppieren die Bedingungen.ORDER BY age ASC— wir sortieren nach Alter, vom Jüngsten zum Ältesten.
Beispiel 4: Sortierung und Filter kombinieren
Zurück zur Tabelle products. Wir wollen Produkte finden, die weniger als 50.000 kosten, nach Kategorie sortieren und innerhalb jeder Kategorie nach Preis (aufsteigend).
SELECT product_name, category, price
FROM products
WHERE price < 50000
ORDER BY category ASC, price ASC;
Ergebnis:
| product_name | category | price |
|---|---|---|
| Staubsauger | Appliances | 15000 |
| Smartphone | Electronics | 30000 |
| Fernseher | Electronics | 45000 |
| Glühbirne | Lighting | 500 |
Erklärung:
WHERE price < 50000— zuerst filtern wir Produkte, die weniger als 50.000 kosten.ORDER BY category ASC, price ASC— wir sortieren nach Kategorie (alphabetisch), und innerhalb jeder Kategorie nach Preis aufsteigend.
Beispiel 5: Häufiger Fehler – Bedingungen vergessen
Jetzt schauen wir, was schiefgehen kann. Was, wenn wir die Gruppierung der Bedingungen vergessen, wie bei logischen Operatoren?
Falsche Query:
SELECT name, age, grade
FROM students
WHERE age > 21 AND grade = 'B' OR grade = 'C'
ORDER BY age ASC;
Hier wird OR grade = 'C' ohne AND age > 21 ausgeführt, und die Query gibt auch alle mit Note C zurück, selbst wenn sie jünger als 21 sind.
Deshalb immer Klammern für Klarheit nutzen:
WHERE age > 21 AND (grade = 'B' OR grade = 'C')
GO TO FULL VERSION