Mit SQL spricht man mit relationalen Datenbanken.
Ziele
- Verstehe die folgenden SQL Befehle
- 
SELECTWHEREORDER- 
INNER JOIN,LEFT JOIN GROUP BYLIMIT
 UPDATE- 
INSERTandINSERT ... SELECT DELETEEXPLAIN 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 |   |
|---|---|---|