Mit SQL spricht man mit relationalen Datenbanken.
Ziele
- Verstehe die folgenden SQL Befehle
- 
SELECT- WHERE
- ORDER
- 
INNER JOIN,LEFT JOIN
- GROUP BY
- LIMIT
 
- UPDATE
- 
INSERTandINSERT ... SELECT
- DELETE
- EXPLAIN ANALYZE
 
- 
- Du weißt was eine transactionist.
- Du verstehst was ein indexist- Was ist der Zweck eines index?
- Für was kann ich den Index benutzen?
- Was ist ein "multiple column index"? Ist die Reihenfolge der Spalten relevant?
 
- Was ist der Zweck eines 
- Du weißt wie du dir die PostgreSQL Settings anzeigen lassen kannst.
- Wie kann man sich aktuelle Verbindungen/Prozesse usw. anzeigen lassen?
- Was ist MVCCund warum braucht man das?
- Du weißt, was VACUUMist und warum das regelmäßig laufen muss.
- Was ist die "visibility map"?
- Was ist ein "replication slot"?
- Unter welchen Umständen kann hot_standby_feedbackzu Problemen mitVACUUMund Indizes führen?
Inhalte
- SQLZOO Tutorial Show archive.org snapshot : Übungsaufgaben in Tutorials
- 
  Joins Visualizer
  
    Show archive.org snapshot
  
: Explains the differences between various types of JOINstatements
- SQL Fiddle Show archive.org snapshot : Lets you play with databases from within your browser
- SQL in PostgreSQL Show archive.org snapshot : PostgreSQL supports many powerful extensions of the SQL standard
- PostgreSQL Indexes Show archive.org snapshot
- PostgreSQL Mathematical Operators Show archive.org snapshot
- Useful PostgreSQL commands
- PostgreSQL MVCC Show archive.org snapshot
- How does MVCC work? Show archive.org snapshot
- Write-Ahead Logging (WAL) Show archive.org snapshot
- Log-Shipping Standby Servers Show archive.org snapshot
- PostgreSQL VACUUM Show archive.org snapshot
- Investigating slow PostgreSQL Index Only scans
Aufgaben
- 
Starte PostgreSQL mit einem Docker Container. Erstelle eine Datenbank mit dem Namen vacationplan
- 
Erstelle 3 tablemit den folgendencolumns:- 
travel_destinations: id, country, city, cost_per_day
- 
tourists: id, last_name, first_name
- 
vacations: tourist_id, travel_destination_id, travel_duration_days
 
- 
- 
Befülle deine vacationplanTabelle:- Touristen: Dieter Doedel, Karl Karlsen, Judith Jubilae, Maria Moment
- Reiseziele: Paris(Frankreich), New York(USA), Singapur(Singapur), Dublin(Irland), (bestimme den Preis selbst)
- Dieter und Judith reisen für 14 Tage nach New York
- Karl reist für 30 Tage nach Singapur
- Maria reist für 5 Tage nach Dublin und 7 Tage nach New York
- Judith reist 14 Tage nach Singapur
 
- 
Lass dir mit einem SELECTalle Urlaube anzeigen. Dabei sollen folgendecolumns sichtbar sein: Vorname, Nachname, Reiseziel (Ort und Land) und die Reisedauer.
- 
Dieter verlängert seine New York Reise auf 21 Tage. Aktualisiere das entsprechend. 
- 
Schreibe ein SELECTdas den Gesamtpreis für die Reisen ausgibt.
- 
Erstelle einen neuen Touristen Dieter Dopf. Schreibe eine SELECTquery die dir Touristen mit dem VornamenDieterausgibt.
- 
Befülle deine touristen Tabelle mit zufälligen Daten. Diese benötigst du damit die anderen Aufgaben gut funktionieren. INSERT INTO tourists VALUES (generate_series(100, 1000), md5(random()::text), md5(random()::text));
- 
Führe die vorherige SELECTquery mitEXPLAINundEXPLAIN ANALYZEaus. Anschließend erstellst du einen Index für diesen Table mit dem Vornamen. Schau dirEXPLAINjetzt nochmal an.
- 
Schau dir SELECT * FROM pg_file_settings;an. Was wird die hier angezeigt?
- 
Öffne zwei SQL Konsolen. In einer führst du select pg_sleep(5 * 60);aus. In der anderenSELECT * FROM pg_stat_activity;. Was kannst du hier sehen?
- 
Schau dir den output von SELECT * FROM pg_stat_database;an und besprich das mit deinem Mentor.
- 
Besprich mit deinem Mentor Anhang A. Thema ist Multi Column Index.
- 
Schau dir zusammen mit deinem Mentor deine Datenbank an. 
Anhang A
  A   B   C
-------------
|   | f |   |
| 1 |---|   |
|   | t |   |
|---|---|   |
|   |   |   |
|   | f | 4 |
| 2 |   |   |
|   |---|   |
|   | t |   |
|   |---|   |
|   | n |   |
|---|---|---|