# SQL - DQL

## Demo
```sql
SELECT a, b AS c, avg(d), 1000
    FROM f NATURAL JOIN g JOIN h ON g.a = g.h
    WHERE Name LIKE '%u%' AND NOT (Name LIKE 't%' OR Name LIKE '%t')
    GROUP BY a, c
    HAVING sum(e) > 1234
UNION (
    SELECT DISTINCT i
        FROM j JOIN k USING l LEFT JOIN m
    )
LIMIT 5678;
```
```sql
SELECT (SELECT COUNT(∗)∗1.0 FROM Training) / (SELECT COUNT (∗) FROM Benutzer) AS FOO;
```

## Bemerkenswert
- bei `GROUP BY` müssen alle selektierten Attribute, die nicht durch eine Aggregatfunktion gejagt werden, in der `GROUP BY`-Klausel stehen
- `LIKE` vergleicht den ganzen string, aber `%` ist eine Wildcart, also basically `.*`
- `HAVING` erlaubt quasi `WHEN` mit Aggregatfunktionen über `GROUP BY`-Mengen
- Sub`SELECT`s nach `UNION` oder `EXCEPT` kommen in Klammern
- `RIGHT` bzw. `LEFT JOIN` geben alle Tupel der spezifizierten Seite aus und ergänzen diese mit Daten der anderen Seite falls vorhanden
- nach `COUNT` kommt idR `(*)
- cast to float zum Teilen mit `*1.0`