SQL
Befehle
'Normale' Abfragen
SELECT * FROM klasse ORDER BY name (ASC); --> aufsteigend Sortieren (Default)
SELECT * FROM klasse ORDER BY name DESC; --> absteigend Sortieren
SELECT * FROM klasse LIMIT 10; --> Nur die ersten 10 Datensätze anzeigen lassen
SELECT datum AS 'Fehlzeit' FROM fehlzeiten; --> Spalte in Ausgabe "umbenennen"
SELECT Datum AS 'Fehlzeit' FROM fehlzeiten GROUP BY Datum; --> Gruppieren / Zusammenführen von gleichen Einträgen
Filter und Bedingungen
SELECT * FROM `user` WHERE `name`="Felix";
SELECT * FROM schueler WHERE SchuelerId > 15000;
SELECT * FROM fehlzeiten WHERE SchuelerId = 16165 AND Stunde = 1; --> Verkettete Bedingung
SELECT * FROM fehlzeiten WHERE Datum BETWEEN "2007-06-01" AND "2007-07-31"; --> Range Between
SELECT * FROM klasse WHERE Name LIKE "%FI%" ORDER BY Name; --> Filter "Like"; Wort enthält irgendwo "FI"
TODO
Ergänzung um Joins und Aggregatfunktionen!
Normalisierung
Probleme eines unsystematischen Entwurfs:
- Verschwendung von Speicher
- Inkonsistente Daten
- Wenig Übersichtlichkeit
--> Entwurf einer Datenbank in drei Schritten normalisiert.
1. Normalform
- Alle Attribute sind elementar (atomar)
- Keine Doppelten Werte pro Attribut
| KursId | AnbieterId | Name | Skript | Preis |
|---|---|---|---|---|
| 100 | 5,7 | Kurz / Maier | 80 / 90 | 4,50 /15,00 |
| 200 | 5 | Kurz | 120 | 10,00 |
--> Nicht in der 1. Normalform, da Name, Skript und Preis mehrere Werte enthalten!
2. Normalform
- Jedes Nicht-Schlüsselattribut hängt voll funktional vom Primärschlüssel ab.
- Nicht-Schlüsselattribut darf nicht nur von einem Teil des PK abhängen
| KursId | AnbieterId | Name | Skript | Preis |
|---|---|---|---|---|
| 100 | 5 | Kurz | 80 | 7,50 |
| 200 | 5 | Kurz | 120 | 10,00 |
| 100 | 7 | Maier | 90 | 15,00 |
--> PK ist Kombination aus AnbieterId und KursId
Lösung: --> Eigene Tabelle für Anbieter; Name fällt aus Tabelle weg, da hier Redundanzen entstehen
| AnbId | Name |
|---|---|
| 5 | Kurz |
| 7 | Maier |
3. Normalform
- Jedes Nicht-Schlüsselattribut muss vom PK abhängig sein
Im Beispiel: Preis hängt vom Skript ab. Preis / Skript wird in weitere Tabelle ausgelagert:
| KursId | AnbieterId | Skript |
|---|---|---|
| 100 | 5 | 80 |
| 200 | 5 | 120 |
| 100 | 7 | 90 |
| Skript | Preis |
|---|---|
| 80 | 7,50 |
| 120 | 10,00 |
| 90 | 15,00 |
| AnbId | Name |
|---|---|
| 5 | Kurz |
| 7 | Maier |