SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
FANCY SQL
FEATURES
Aus der Reihe …

SQL, Grundlagen und Erweiterungen
S. Holzgraefe (miracee) präsentiert …
© Alle Rechte vorbehalten, S. Holzgraefe
Veltins Arena, Jan. 2020
Wer spricht hier?
© Alle Rechte vorbehalten, S. Holzgraefe
Foto: Marco Heggen, Aug. 2018
Regeln
• Du

• Zwischenfragen sind erlaubt

• Keine Individualberatung

• Die Folien gehören zum gesprochenen Wort und haben keine
alleinstehende Aussagekraft

• Jegliche Form der Audio- und Videoaufzeichnung sowie Fotos sind nur
mit vorheriger, expliziter, schriftlicher Genehmigung gestattet
© Alle Rechte vorbehalten, S. Holzgraefe
JOINS
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
Inner Joins
• SELECT * FROM A, B WHERE A.id=B.id

• SELECT * FROM A JOIN B ON A.id=B.id
© Alle Rechte vorbehalten, S. Holzgraefe
Inner Joins
• SELECT * FROM A, B, C, D, E, F WHERE
A.id=B.id AND C.id=B.id AND D.id=C.id
AND E.id=A.id AND F.id=D.id

• SELECT * FROM A JOIN B ON A.id=B.id
JOIN C ON C.id=B.id JOIN D ON D.id=C.id
JOIN E ON E.id=A.id JOIN F ON F.id=D.id
© Alle Rechte vorbehalten, S. Holzgraefe
Automatische Optimierung
© Alle Rechte vorbehalten, S. Holzgraefe
A B C A B C A B C
AB AC CB
ABC ACB CBA
Outer Joins
• SELECT * FROM A LEFT JOIN B ON
A.id=B.id

• SELECT * FROM A RIGHT JOIN B ON
A.id=B.id

• SELECT * FROM A FULL JOIN B ON
A.id=B.id
© Alle Rechte vorbehalten, S. Holzgraefe
Outer Joins
• SELECT * FROM A LEFT JOIN B ON
A.id=B.id WHERE B.id is NULL

• SELECT * FROM A RIGHT JOIN B ON
A.id=B.id WHERE A.id is NULL

• SELECT * FROM A FULL JOIN B ON
A.id=B.id WHERE A.id is NULL OR B.id is
NULL
© Alle Rechte vorbehalten, S. Holzgraefe
Cross Join
© Alle Rechte vorbehalten, S. Holzgraefe
SELECT * FROM a CROSS JOIN b;
ai | ac | bi | bc
----+----+----+----
1 | a | 1 | x
1 | a | 2 | y
1 | a | 3 | z
3 | b | 1 | x
3 | b | 2 | y
3 | b | 3 | z
5 | c | 1 | x
5 | c | 2 | y
5 | c | 3 | z
(9 rows)
SELECT * FROM a;
ai | ac
----+----
1 | a
3 | b
5 | c
(3 rows)
SELECT * FROM b;
bi | bc
----+----
1 | x
2 | y
3 | z
(3 rows)
UNION
© Alle Rechte vorbehalten, S. Holzgraefe
SELECT * FROM a
UNION SELECT * FROM b
ORDER BY ac;
ai | ac
----+----
1 | a
3 | b
5 | c
1 | x
2 | y
3 | z
(6 rows)
SELECT * FROM a;
ai | ac
----+----
1 | a
3 | b
5 | c
(3 rows)
SELECT * FROM b;
bi | bc
----+----
1 | x
2 | y
3 | z
(3 rows)
INTERSECT
SELECT id FROM A

INTERSECT 

SELECT id FROM B
© Alle Rechte vorbehalten, S. Holzgraefe
EXCEPT
SELECT id FROM A

EXCEPT 

SELECT id FROM B
© Alle Rechte vorbehalten, S. Holzgraefe
Korrelierende Unteranfragen
Correlated Subselects
© Alle Rechte vorbehalten, S. Holzgraefe
Correlated Subselects
SELECT * FROM meine_tabelle AS außen
WHERE foobar > (

SELECT AVG(foo) FROM meine_tabelle AS innen 

WHERE innen.bar = außen.bar

)
© Alle Rechte vorbehalten, S. Holzgraefe
Gemeinsamer
Tabellenausdruck
Common Table Expression (CTE)
© Alle Rechte vorbehalten, S. Holzgraefe
Common Table Expression (CTE)
WITH innen AS (

SELECT AVG(foo) AS durchschnitt_foo, bar 

FROM meine_tabelle

GROUP BY bar

)

SELECT * FROM meine_tabelle AS außen 

JOIN innen ON (außen.bar=innen.bar)

WHERE außen.foobar > innen.durchschnitt_foo;
© Alle Rechte vorbehalten, S. Holzgraefe
Komplexe Anfrage
SELECT stadt, gebühren_gesamt

FROM (

SELECT stadt, sum(gebühren) AS gebühren_gesamt 

FROM bußgeld GROUP BY stadt

) AS gesamt

WHERE gesamt.gebühren_gesamt > (

SELECT AVG(gebühren_gesamt) 

FROM (

SELECT stadt, SUM(gebühren) AS gebühren_gesamt 

FROM bußgeld GROUP BY stadt

) AS überdurchschnittlich

)
© Alle Rechte vorbehalten, S. Holzgraefe
Umgeschrieben als CTE
WITH gesamt AS (

SELECT stadt, SUM(gebühren) AS gebühren_gesamt

FROM bußgeld GROUP BY stadt

)

SELECT stadt, gebühren_gesamt 

FROM gesamt

WHERE gebühren_gesamt > (

SELECT AVG(gebühren_gesamt) FROM gesamt

)
© Alle Rechte vorbehalten, S. Holzgraefe
Performance
Getestet wurde das vorgestellte Beispiel mit 10 Millionen Datensätzen

• PostgreSQL 10.6

• brauchte bei Verwendung des CTEs nur ein Drittel der Zeit

• MySQL 8.0.14 

• brauchte bei Verwendung des CTEs die Hälfte der Zeit

• MariaDB 10.3.12

• hier gab es keine Geschwindigkeits-Unterschiede
© Alle Rechte vorbehalten, S. Holzgraefe
Komplexe Anfrage
SELECT stadt, verstoß, SUM(anzahl_verstöße) AS menge, SUM(gebühren) AS gebühren_gesamt

FROM bußgeld

WHERE stadt IN (

SELECT stadt FROM (

SELECT stadt FROM (

SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld

GROUP BY stadt

) AS gesamt_je_stadt

WHERE gebühren_gesamt > (

SELECT AVG(gebühren_gesamt) FROM (

SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld

GROUP BY stadt

) AS gesamt_je_stadt_2

)

) AS spitzenreiter

)

GROUP BY stadt, verstoß ORDER BY stadt, gebühren_gesamt DESC;
© Alle Rechte vorbehalten, S. Holzgraefe
Umgeschrieben als CTE
WITH gesamt AS (

SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld

GROUP BY stadt

), 

spitzenreiter AS (

SELECT stadt, gebühren_gesamt FROM gesamt

WHERE gebühren_gesamt > (

SELECT AVG(gebühren_gesamt) FROM gesamt

)

)

SELECT b.stadt, b.verstoß, SUM(b.anzahl_verstöße) AS menge, SUM(b.gebühren) AS gebühren_gesamt

FROM bußgeld AS b JOIN spitzenreiter AS s ON (b.stadt=s.stadt)

GROUP BY b.stadt, b.verstoß

ORDER BY b.stadt, gebühren_gesamt DESC;
© Alle Rechte vorbehalten, S. Holzgraefe
Performance
Getestet wurde das vorgestellte Beispiel mit 10 Millionen Datensätzen

• PostgreSQL 10.6

• brauchte bei Verwendung des CTEs nur 65% der Zeit

• MySQL 8.0.14 

• brauchte bei Verwendung des CTEs 85% der Zeit

• MariaDB 10.3.12

• hier gab es keine Geschwindigkeits-Unterschiede
© Alle Rechte vorbehalten, S. Holzgraefe
Rekursion
WITH RECURSIVE t(n) AS (

SELECT 1

UNION ALL

SELECT n+1 FROM t WHERE n < 100

)

SELECT SUM(n) FROM t;
© Alle Rechte vorbehalten, S. Holzgraefe
Rekursion
WITH RECURSIVE personal_rekursiv(entfernung, name_angestellte, name_vorgesetzte) AS (

SELECT 1, name_angestellte, name_vorgesetzte

FROM personal

WHERE name_vorgesetzte = 'Tiedenschwenke'

UNION ALL

SELECT pr.entfernung + 1, p.name_angestellte, p.name_vorgesetzte

FROM personal_rekursiv AS pr, personal AS p

WHERE pr.name_angestellte = p.name_vorgesetzte

)

SELECT entfernung, name_angestellte FROM personal_rekursiv;
© Alle Rechte vorbehalten, S. Holzgraefe
Beispiel Rekursion
© Alle Rechte vorbehalten, S. Holzgraefe
entfernung | name_angestellte
------------+------------------
1 | Janssen
1 | Lohse
2 | Bergmann
2 | Grotjohann
2 | Himmelreich
2 | Grünspecht
2 | Weitkamp
2 | Baumann
3 | Döring
3 | Blaumeyer
3 | Tjarksen
3 | Reismüller
3 | Döries
3 | Holzmann
4 | Schreiber
4 | Brahms
4 | Nolte
5 | Albrecht
5 | Möller
5 | Schröter
(20 rows)
Tiedenschwenke
Lohse Janssen
Grotjohann Bergmann HimmelreichGrünspechtWeitkampBaumann
BlaumeyerTjarksenDöringReismüllerHolzmannDoris
Brahms SchreiberNolte
Albrecht SchröterMöller
CTE und DML
WITH datensätze_archivieren AS (

DELETE FROM produkt

WHERE

datum >= '2019-12-01' AND

datum < '2020-01-01'

RETURNING *

)

INSERT INTO produkt_archiv

SELECT * FROM datensätze_archivieren;
© Alle Rechte vorbehalten, S. Holzgraefe
Window Functions
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
Beispieldatenbank
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
id | band | song | mio_downloads
----+---------------------+-------------------------------+---------------
1 | Héroes del Silencio | Entre dos tierras | 5.91
2 | Metallica | Nothing else matters | 5.69
3 | Metallica | Enter Sandman | 1.94
4 | U2 | With or Without You | 6.49
5 | U2 | Where The Streets Hve No Name | 4.48
6 | Rammstein | Engel | 7.94
7 | Rammstein | Ohne Dich | 5.22
8 | Rammstein | Sonne | 2.61
9 | Die Ärzte | Zu Spät | 7.48
10 | Die Ärzte | Westerland | 8.31
11 | Die Ärzte | Schlaflied | 1.64
12 | Die Ärzte | Schrei nach Liebe | 2.97
(12 rows)
WINDOW FUNCTION MIT AVG
SELECT band, song, mio_downloads,

AVG(mio_downloads) OVER (PARTITION BY band) AS durchschnitt

FROM downloads;
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe AVG Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
band | song | mio_downloads | durchschnitt
---------------------+-------------------------------+---------------+--------------
Die Ärzte | Zu Spät | 7.48 | 5.10
Die Ärzte | Schrei nach Liebe | 2.97 | 5.10
Die Ärzte | Schlaflied | 1.64 | 5.10
Die Ärzte | Westerland | 8.31 | 5.10
Héroes del Silencio | Entre dos tierras | 5.91 | 5.91
Metallica | Enter Sandman | 1.94 | 3.81
Metallica | Nothing else matters | 5.69 | 3.81
Rammstein | Sonne | 2.61 | 5.26
Rammstein | Engel | 7.94 | 5.26
Rammstein | Ohne Dich | 5.22 | 5.26
U2 | Where The Streets Hve No Name | 4.48 | 5.49
U2 | With or Without You | 6.49 | 5.49
(12 rows)
WINDOW
SELECT band, song, mio_downloads,

SUM (mio_downloads) OVER fenster, 

AVG(mio_downloads) OVER fenster

FROM downloads
WINDOW fenster AS (PARTITION BY band ORDER BY mio_downloads);
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe WINDOW Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
band | song | mio_downloads | sum | avg
---------------------+-------------------------------+---------------+-------+------
Die Ärzte | Westerland | 8.31 | 8.31 | 8.31
Die Ärzte | Zu Spät | 7.48 | 15.79 | 7.90
Die Ärzte | Schrei nach Liebe | 2.97 | 18.76 | 6.25
Die Ärzte | Schlaflied | 1.64 | 20.40 | 5.10
Héroes del Silencio | Entre dos tierras | 5.91 | 5.91 | 5.91
Metallica | Nothing else matters | 5.69 | 5.69 | 5.69
Metallica | Enter Sandman | 1.94 | 7.63 | 3.82
Rammstein | Engel | 7.94 | 7.94 | 7.94
Rammstein | Ohne Dich | 5.22 | 13.16 | 6.58
Rammstein | Sonne | 2.61 | 15.77 | 5.26
U2 | With or Without You | 6.49 | 6.49 | 6.49
U2 | Where The Streets Hve No Name | 4.48 | 10.97 | 5.49
(12 rows)
RANK
SELECT band, song, mio_downloads,

RANK() OVER (PARTITION BY band ORDER BY mio_downloads DESC) 

AS top

FROM downloads;
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe RANK Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
band | song | mio_downloads | top
---------------------+-------------------------------+---------------+-----
Die Ärzte | Westerland | 8.31 | 1
Die Ärzte | Zu Spät | 7.48 | 2
Die Ärzte | Schrei nach Liebe | 2.97 | 3
Die Ärzte | Schlaflied | 1.64 | 4
Héroes del Silencio | Entre dos tierras | 5.91 | 1
Metallica | Nothing else matters | 5.69 | 1
Metallica | Enter Sandman | 1.94 | 2
Rammstein | Engel | 7.94 | 1
Rammstein | Ohne Dich | 5.22 | 2
Rammstein | Sonne | 2.61 | 3
U2 | With or Without You | 6.49 | 1
U2 | Where The Streets Hve No Name | 4.48 | 2
(12 rows)
LAG
SELECT mio_downloads, song,

LAG(song) OVER (ORDER BY mio_downloads DESC) 

AS davor

FROM downloads;
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe LAG Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
mio_downloads | song | davor
---------------+-------------------------------+-------------------------------
8.31 | Westerland |
7.94 | Engel | Westerland
7.48 | Zu Spät | Engel
6.49 | With or Without You | Zu Spät
5.91 | Entre dos tierras | With or Without You
5.69 | Nothing else matters | Entre dos tierras
5.22 | Ohne Dich | Nothing else matters
4.48 | Where The Streets Hve No Name | Ohne Dich
2.97 | Schrei nach Liebe | Where The Streets Hve No Name
2.61 | Sonne | Schrei nach Liebe
1.94 | Enter Sandman | Sonne
1.64 | Schlaflied | Enter Sandman
(12 rows)
LEAD
SELECT mio_downloads, song,

LEAD(song) OVER (ORDER BY mio_downloads DESC) 

AS dahinter

FROM downloads;
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe LEAD Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
mio_downloads | song | dahinter
---------------+-------------------------------+-------------------------------
8.31 | Westerland | Engel
7.94 | Engel | Zu Spät
7.48 | Zu Spät | With or Without You
6.49 | With or Without You | Entre dos tierras
5.91 | Entre dos tierras | Nothing else matters
5.69 | Nothing else matters | Ohne Dich
5.22 | Ohne Dich | Where The Streets Hve No Name
4.48 | Where The Streets Hve No Name | Schrei nach Liebe
2.97 | Schrei nach Liebe | Sonne
2.61 | Sonne | Enter Sandman
1.94 | Enter Sandman | Schlaflied
1.64 | Schlaflied |
(12 rows)
FIRST_VALUE
SELECT band, song, mio_downloads,

FIRST_VALUE(mio_downloads)
OVER (PARTITION BY band ORDER BY mio_downloads DESC) 

AS top

FROM downloads;
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe FIRST_VALUE Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
band | song | mio_downloads | top
---------------------+-------------------------------+---------------+------
Die Ärzte | Westerland | 8.31 | 8.31
Die Ärzte | Zu Spät | 7.48 | 8.31
Die Ärzte | Schrei nach Liebe | 2.97 | 8.31
Die Ärzte | Schlaflied | 1.64 | 8.31
Héroes del Silencio | Entre dos tierras | 5.91 | 5.91
Metallica | Nothing else matters | 5.69 | 5.69
Metallica | Enter Sandman | 1.94 | 5.69
Rammstein | Engel | 7.94 | 7.94
Rammstein | Ohne Dich | 5.22 | 7.94
Rammstein | Sonne | 2.61 | 7.94
U2 | With or Without You | 6.49 | 6.49
U2 | Where The Streets Hve No Name | 4.48 | 6.49
(12 rows)
LAST_VALUE
SELECT band, song, mio_downloads,

LAST_VALUE(mio_downloads)
OVER (PARTITION BY band ORDER BY mio_downloads DESC RANGE
BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) 

AS wenigste

FROM downloads;
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe LAST_VALUE Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
band | song | mio_downloads | wenigste
---------------------+-------------------------------+---------------+----------
Die Ärzte | Westerland | 8.31 | 1.64
Die Ärzte | Zu Spät | 7.48 | 1.64
Die Ärzte | Schrei nach Liebe | 2.97 | 1.64
Die Ärzte | Schlaflied | 1.64 | 1.64
Héroes del Silencio | Entre dos tierras | 5.91 | 5.91
Metallica | Nothing else matters | 5.69 | 1.94
Metallica | Enter Sandman | 1.94 | 1.94
Rammstein | Engel | 7.94 | 2.61
Rammstein | Ohne Dich | 5.22 | 2.61
Rammstein | Sonne | 2.61 | 2.61
U2 | With or Without You | 6.49 | 4.48
U2 | Where The Streets Hve No Name | 4.48 | 4.48
(12 rows)
ROW_NUMBER
SELECT band, song, mio_downloads,

ROW_NUMBER() OVER (PARTITION BY band ORDER BY mio_downloads
DESC) 

AS top

FROM downloads;
© Alle Rechte vorbehalten, S. Holzgraefe
Ausgabe ROW_NUMBER Beispiel
© Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
band | song | mio_downloads | top
---------------------+-------------------------------+---------------+-----
Die Ärzte | Westerland | 8.31 | 1
Die Ärzte | Zu Spät | 7.48 | 2
Die Ärzte | Schrei nach Liebe | 2.97 | 3
Die Ärzte | Schlaflied | 1.64 | 4
Héroes del Silencio | Entre dos tierras | 5.91 | 1
Metallica | Nothing else matters | 5.69 | 1
Metallica | Enter Sandman | 1.94 | 2
Rammstein | Engel | 7.94 | 1
Rammstein | Ohne Dich | 5.22 | 2
Rammstein | Sonne | 2.61 | 3
U2 | With or Without You | 6.49 | 1
U2 | Where The Streets Hve No Name | 4.48 | 2
(12 rows)
–miracee
„CTEs und Window Functions sind aus der heutigen Datenbankwelt
nicht mehr wegzudenken. Durch sie wird die Kommunikation mit der
Datenbank nicht nur einfacher und effektiver sondern auch
zielgerichteter und performanter.“
© Alle Rechte vorbehalten, S. Holzgraefe
–miracee
„SQL ist ein mächtiges Werkzeug, mit dem sich einfach und schnell
auch komplex zusammenhängende Informationen aus einer
Datenbank herausholen lassen.“
© Alle Rechte vorbehalten, S. Holzgraefe

Weitere ähnliche Inhalte

Kürzlich hochgeladen

FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationOPEN KNOWLEDGE GmbH
 
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...DNUG e.V.
 
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Markus Unterauer
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudOPEN KNOWLEDGE GmbH
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...OPEN KNOWLEDGE GmbH
 
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...DNUG e.V.
 

Kürzlich hochgeladen (6)

FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (2) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
 
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
Rückwärts denken vorwärts handeln - Requirements Reverse Engineering bei Syst...
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
 
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
Slides (1) zu Teil 3 der Veranstaltungsreihe Anwendungsentwicklung mit Volt M...
 

Empfohlen

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Empfohlen (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

Fancy SQL Features

  • 1. FANCY SQL FEATURES Aus der Reihe … SQL, Grundlagen und Erweiterungen S. Holzgraefe (miracee) präsentiert … © Alle Rechte vorbehalten, S. Holzgraefe Veltins Arena, Jan. 2020
  • 2. Wer spricht hier? © Alle Rechte vorbehalten, S. Holzgraefe Foto: Marco Heggen, Aug. 2018
  • 3. Regeln • Du • Zwischenfragen sind erlaubt • Keine Individualberatung • Die Folien gehören zum gesprochenen Wort und haben keine alleinstehende Aussagekraft • Jegliche Form der Audio- und Videoaufzeichnung sowie Fotos sind nur mit vorheriger, expliziter, schriftlicher Genehmigung gestattet © Alle Rechte vorbehalten, S. Holzgraefe
  • 4. JOINS © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
  • 5. Inner Joins • SELECT * FROM A, B WHERE A.id=B.id • SELECT * FROM A JOIN B ON A.id=B.id © Alle Rechte vorbehalten, S. Holzgraefe
  • 6. Inner Joins • SELECT * FROM A, B, C, D, E, F WHERE A.id=B.id AND C.id=B.id AND D.id=C.id AND E.id=A.id AND F.id=D.id • SELECT * FROM A JOIN B ON A.id=B.id JOIN C ON C.id=B.id JOIN D ON D.id=C.id JOIN E ON E.id=A.id JOIN F ON F.id=D.id © Alle Rechte vorbehalten, S. Holzgraefe
  • 7. Automatische Optimierung © Alle Rechte vorbehalten, S. Holzgraefe A B C A B C A B C AB AC CB ABC ACB CBA
  • 8. Outer Joins • SELECT * FROM A LEFT JOIN B ON A.id=B.id • SELECT * FROM A RIGHT JOIN B ON A.id=B.id • SELECT * FROM A FULL JOIN B ON A.id=B.id © Alle Rechte vorbehalten, S. Holzgraefe
  • 9. Outer Joins • SELECT * FROM A LEFT JOIN B ON A.id=B.id WHERE B.id is NULL • SELECT * FROM A RIGHT JOIN B ON A.id=B.id WHERE A.id is NULL • SELECT * FROM A FULL JOIN B ON A.id=B.id WHERE A.id is NULL OR B.id is NULL © Alle Rechte vorbehalten, S. Holzgraefe
  • 10. Cross Join © Alle Rechte vorbehalten, S. Holzgraefe SELECT * FROM a CROSS JOIN b; ai | ac | bi | bc ----+----+----+---- 1 | a | 1 | x 1 | a | 2 | y 1 | a | 3 | z 3 | b | 1 | x 3 | b | 2 | y 3 | b | 3 | z 5 | c | 1 | x 5 | c | 2 | y 5 | c | 3 | z (9 rows) SELECT * FROM a; ai | ac ----+---- 1 | a 3 | b 5 | c (3 rows) SELECT * FROM b; bi | bc ----+---- 1 | x 2 | y 3 | z (3 rows)
  • 11. UNION © Alle Rechte vorbehalten, S. Holzgraefe SELECT * FROM a UNION SELECT * FROM b ORDER BY ac; ai | ac ----+---- 1 | a 3 | b 5 | c 1 | x 2 | y 3 | z (6 rows) SELECT * FROM a; ai | ac ----+---- 1 | a 3 | b 5 | c (3 rows) SELECT * FROM b; bi | bc ----+---- 1 | x 2 | y 3 | z (3 rows)
  • 12. INTERSECT SELECT id FROM A INTERSECT SELECT id FROM B © Alle Rechte vorbehalten, S. Holzgraefe
  • 13. EXCEPT SELECT id FROM A EXCEPT SELECT id FROM B © Alle Rechte vorbehalten, S. Holzgraefe
  • 14. Korrelierende Unteranfragen Correlated Subselects © Alle Rechte vorbehalten, S. Holzgraefe
  • 15. Correlated Subselects SELECT * FROM meine_tabelle AS außen WHERE foobar > ( SELECT AVG(foo) FROM meine_tabelle AS innen WHERE innen.bar = außen.bar ) © Alle Rechte vorbehalten, S. Holzgraefe
  • 16. Gemeinsamer Tabellenausdruck Common Table Expression (CTE) © Alle Rechte vorbehalten, S. Holzgraefe
  • 17. Common Table Expression (CTE) WITH innen AS ( SELECT AVG(foo) AS durchschnitt_foo, bar FROM meine_tabelle GROUP BY bar ) SELECT * FROM meine_tabelle AS außen JOIN innen ON (außen.bar=innen.bar) WHERE außen.foobar > innen.durchschnitt_foo; © Alle Rechte vorbehalten, S. Holzgraefe
  • 18. Komplexe Anfrage SELECT stadt, gebühren_gesamt FROM ( SELECT stadt, sum(gebühren) AS gebühren_gesamt FROM bußgeld GROUP BY stadt ) AS gesamt WHERE gesamt.gebühren_gesamt > ( SELECT AVG(gebühren_gesamt) FROM ( SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld GROUP BY stadt ) AS überdurchschnittlich ) © Alle Rechte vorbehalten, S. Holzgraefe
  • 19. Umgeschrieben als CTE WITH gesamt AS ( SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld GROUP BY stadt ) SELECT stadt, gebühren_gesamt FROM gesamt WHERE gebühren_gesamt > ( SELECT AVG(gebühren_gesamt) FROM gesamt ) © Alle Rechte vorbehalten, S. Holzgraefe
  • 20. Performance Getestet wurde das vorgestellte Beispiel mit 10 Millionen Datensätzen • PostgreSQL 10.6 • brauchte bei Verwendung des CTEs nur ein Drittel der Zeit • MySQL 8.0.14 • brauchte bei Verwendung des CTEs die Hälfte der Zeit • MariaDB 10.3.12 • hier gab es keine Geschwindigkeits-Unterschiede © Alle Rechte vorbehalten, S. Holzgraefe
  • 21. Komplexe Anfrage SELECT stadt, verstoß, SUM(anzahl_verstöße) AS menge, SUM(gebühren) AS gebühren_gesamt FROM bußgeld WHERE stadt IN ( SELECT stadt FROM ( SELECT stadt FROM ( SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld GROUP BY stadt ) AS gesamt_je_stadt WHERE gebühren_gesamt > ( SELECT AVG(gebühren_gesamt) FROM ( SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld GROUP BY stadt ) AS gesamt_je_stadt_2 ) ) AS spitzenreiter ) GROUP BY stadt, verstoß ORDER BY stadt, gebühren_gesamt DESC; © Alle Rechte vorbehalten, S. Holzgraefe
  • 22. Umgeschrieben als CTE WITH gesamt AS ( SELECT stadt, SUM(gebühren) AS gebühren_gesamt FROM bußgeld GROUP BY stadt ), spitzenreiter AS ( SELECT stadt, gebühren_gesamt FROM gesamt WHERE gebühren_gesamt > ( SELECT AVG(gebühren_gesamt) FROM gesamt ) ) SELECT b.stadt, b.verstoß, SUM(b.anzahl_verstöße) AS menge, SUM(b.gebühren) AS gebühren_gesamt FROM bußgeld AS b JOIN spitzenreiter AS s ON (b.stadt=s.stadt) GROUP BY b.stadt, b.verstoß ORDER BY b.stadt, gebühren_gesamt DESC; © Alle Rechte vorbehalten, S. Holzgraefe
  • 23. Performance Getestet wurde das vorgestellte Beispiel mit 10 Millionen Datensätzen • PostgreSQL 10.6 • brauchte bei Verwendung des CTEs nur 65% der Zeit • MySQL 8.0.14 • brauchte bei Verwendung des CTEs 85% der Zeit • MariaDB 10.3.12 • hier gab es keine Geschwindigkeits-Unterschiede © Alle Rechte vorbehalten, S. Holzgraefe
  • 24. Rekursion WITH RECURSIVE t(n) AS ( SELECT 1 UNION ALL SELECT n+1 FROM t WHERE n < 100 ) SELECT SUM(n) FROM t; © Alle Rechte vorbehalten, S. Holzgraefe
  • 25. Rekursion WITH RECURSIVE personal_rekursiv(entfernung, name_angestellte, name_vorgesetzte) AS ( SELECT 1, name_angestellte, name_vorgesetzte FROM personal WHERE name_vorgesetzte = 'Tiedenschwenke' UNION ALL SELECT pr.entfernung + 1, p.name_angestellte, p.name_vorgesetzte FROM personal_rekursiv AS pr, personal AS p WHERE pr.name_angestellte = p.name_vorgesetzte ) SELECT entfernung, name_angestellte FROM personal_rekursiv; © Alle Rechte vorbehalten, S. Holzgraefe
  • 26. Beispiel Rekursion © Alle Rechte vorbehalten, S. Holzgraefe entfernung | name_angestellte ------------+------------------ 1 | Janssen 1 | Lohse 2 | Bergmann 2 | Grotjohann 2 | Himmelreich 2 | Grünspecht 2 | Weitkamp 2 | Baumann 3 | Döring 3 | Blaumeyer 3 | Tjarksen 3 | Reismüller 3 | Döries 3 | Holzmann 4 | Schreiber 4 | Brahms 4 | Nolte 5 | Albrecht 5 | Möller 5 | Schröter (20 rows) Tiedenschwenke Lohse Janssen Grotjohann Bergmann HimmelreichGrünspechtWeitkampBaumann BlaumeyerTjarksenDöringReismüllerHolzmannDoris Brahms SchreiberNolte Albrecht SchröterMöller
  • 27. CTE und DML WITH datensätze_archivieren AS ( DELETE FROM produkt WHERE datum >= '2019-12-01' AND datum < '2020-01-01' RETURNING * ) INSERT INTO produkt_archiv SELECT * FROM datensätze_archivieren; © Alle Rechte vorbehalten, S. Holzgraefe
  • 28. Window Functions © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe
  • 29. Beispieldatenbank © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe id | band | song | mio_downloads ----+---------------------+-------------------------------+--------------- 1 | Héroes del Silencio | Entre dos tierras | 5.91 2 | Metallica | Nothing else matters | 5.69 3 | Metallica | Enter Sandman | 1.94 4 | U2 | With or Without You | 6.49 5 | U2 | Where The Streets Hve No Name | 4.48 6 | Rammstein | Engel | 7.94 7 | Rammstein | Ohne Dich | 5.22 8 | Rammstein | Sonne | 2.61 9 | Die Ärzte | Zu Spät | 7.48 10 | Die Ärzte | Westerland | 8.31 11 | Die Ärzte | Schlaflied | 1.64 12 | Die Ärzte | Schrei nach Liebe | 2.97 (12 rows)
  • 30. WINDOW FUNCTION MIT AVG SELECT band, song, mio_downloads, AVG(mio_downloads) OVER (PARTITION BY band) AS durchschnitt FROM downloads; © Alle Rechte vorbehalten, S. Holzgraefe
  • 31. Ausgabe AVG Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe band | song | mio_downloads | durchschnitt ---------------------+-------------------------------+---------------+-------------- Die Ärzte | Zu Spät | 7.48 | 5.10 Die Ärzte | Schrei nach Liebe | 2.97 | 5.10 Die Ärzte | Schlaflied | 1.64 | 5.10 Die Ärzte | Westerland | 8.31 | 5.10 Héroes del Silencio | Entre dos tierras | 5.91 | 5.91 Metallica | Enter Sandman | 1.94 | 3.81 Metallica | Nothing else matters | 5.69 | 3.81 Rammstein | Sonne | 2.61 | 5.26 Rammstein | Engel | 7.94 | 5.26 Rammstein | Ohne Dich | 5.22 | 5.26 U2 | Where The Streets Hve No Name | 4.48 | 5.49 U2 | With or Without You | 6.49 | 5.49 (12 rows)
  • 32. WINDOW SELECT band, song, mio_downloads, SUM (mio_downloads) OVER fenster, AVG(mio_downloads) OVER fenster FROM downloads WINDOW fenster AS (PARTITION BY band ORDER BY mio_downloads); © Alle Rechte vorbehalten, S. Holzgraefe
  • 33. Ausgabe WINDOW Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe band | song | mio_downloads | sum | avg ---------------------+-------------------------------+---------------+-------+------ Die Ärzte | Westerland | 8.31 | 8.31 | 8.31 Die Ärzte | Zu Spät | 7.48 | 15.79 | 7.90 Die Ärzte | Schrei nach Liebe | 2.97 | 18.76 | 6.25 Die Ärzte | Schlaflied | 1.64 | 20.40 | 5.10 Héroes del Silencio | Entre dos tierras | 5.91 | 5.91 | 5.91 Metallica | Nothing else matters | 5.69 | 5.69 | 5.69 Metallica | Enter Sandman | 1.94 | 7.63 | 3.82 Rammstein | Engel | 7.94 | 7.94 | 7.94 Rammstein | Ohne Dich | 5.22 | 13.16 | 6.58 Rammstein | Sonne | 2.61 | 15.77 | 5.26 U2 | With or Without You | 6.49 | 6.49 | 6.49 U2 | Where The Streets Hve No Name | 4.48 | 10.97 | 5.49 (12 rows)
  • 34. RANK SELECT band, song, mio_downloads, RANK() OVER (PARTITION BY band ORDER BY mio_downloads DESC) AS top FROM downloads; © Alle Rechte vorbehalten, S. Holzgraefe
  • 35. Ausgabe RANK Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe band | song | mio_downloads | top ---------------------+-------------------------------+---------------+----- Die Ärzte | Westerland | 8.31 | 1 Die Ärzte | Zu Spät | 7.48 | 2 Die Ärzte | Schrei nach Liebe | 2.97 | 3 Die Ärzte | Schlaflied | 1.64 | 4 Héroes del Silencio | Entre dos tierras | 5.91 | 1 Metallica | Nothing else matters | 5.69 | 1 Metallica | Enter Sandman | 1.94 | 2 Rammstein | Engel | 7.94 | 1 Rammstein | Ohne Dich | 5.22 | 2 Rammstein | Sonne | 2.61 | 3 U2 | With or Without You | 6.49 | 1 U2 | Where The Streets Hve No Name | 4.48 | 2 (12 rows)
  • 36. LAG SELECT mio_downloads, song, LAG(song) OVER (ORDER BY mio_downloads DESC) AS davor FROM downloads; © Alle Rechte vorbehalten, S. Holzgraefe
  • 37. Ausgabe LAG Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe mio_downloads | song | davor ---------------+-------------------------------+------------------------------- 8.31 | Westerland | 7.94 | Engel | Westerland 7.48 | Zu Spät | Engel 6.49 | With or Without You | Zu Spät 5.91 | Entre dos tierras | With or Without You 5.69 | Nothing else matters | Entre dos tierras 5.22 | Ohne Dich | Nothing else matters 4.48 | Where The Streets Hve No Name | Ohne Dich 2.97 | Schrei nach Liebe | Where The Streets Hve No Name 2.61 | Sonne | Schrei nach Liebe 1.94 | Enter Sandman | Sonne 1.64 | Schlaflied | Enter Sandman (12 rows)
  • 38. LEAD SELECT mio_downloads, song, LEAD(song) OVER (ORDER BY mio_downloads DESC) AS dahinter FROM downloads; © Alle Rechte vorbehalten, S. Holzgraefe
  • 39. Ausgabe LEAD Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe mio_downloads | song | dahinter ---------------+-------------------------------+------------------------------- 8.31 | Westerland | Engel 7.94 | Engel | Zu Spät 7.48 | Zu Spät | With or Without You 6.49 | With or Without You | Entre dos tierras 5.91 | Entre dos tierras | Nothing else matters 5.69 | Nothing else matters | Ohne Dich 5.22 | Ohne Dich | Where The Streets Hve No Name 4.48 | Where The Streets Hve No Name | Schrei nach Liebe 2.97 | Schrei nach Liebe | Sonne 2.61 | Sonne | Enter Sandman 1.94 | Enter Sandman | Schlaflied 1.64 | Schlaflied | (12 rows)
  • 40. FIRST_VALUE SELECT band, song, mio_downloads, FIRST_VALUE(mio_downloads) OVER (PARTITION BY band ORDER BY mio_downloads DESC) AS top FROM downloads; © Alle Rechte vorbehalten, S. Holzgraefe
  • 41. Ausgabe FIRST_VALUE Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe band | song | mio_downloads | top ---------------------+-------------------------------+---------------+------ Die Ärzte | Westerland | 8.31 | 8.31 Die Ärzte | Zu Spät | 7.48 | 8.31 Die Ärzte | Schrei nach Liebe | 2.97 | 8.31 Die Ärzte | Schlaflied | 1.64 | 8.31 Héroes del Silencio | Entre dos tierras | 5.91 | 5.91 Metallica | Nothing else matters | 5.69 | 5.69 Metallica | Enter Sandman | 1.94 | 5.69 Rammstein | Engel | 7.94 | 7.94 Rammstein | Ohne Dich | 5.22 | 7.94 Rammstein | Sonne | 2.61 | 7.94 U2 | With or Without You | 6.49 | 6.49 U2 | Where The Streets Hve No Name | 4.48 | 6.49 (12 rows)
  • 42. LAST_VALUE SELECT band, song, mio_downloads, LAST_VALUE(mio_downloads) OVER (PARTITION BY band ORDER BY mio_downloads DESC RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS wenigste FROM downloads; © Alle Rechte vorbehalten, S. Holzgraefe
  • 43. Ausgabe LAST_VALUE Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe band | song | mio_downloads | wenigste ---------------------+-------------------------------+---------------+---------- Die Ärzte | Westerland | 8.31 | 1.64 Die Ärzte | Zu Spät | 7.48 | 1.64 Die Ärzte | Schrei nach Liebe | 2.97 | 1.64 Die Ärzte | Schlaflied | 1.64 | 1.64 Héroes del Silencio | Entre dos tierras | 5.91 | 5.91 Metallica | Nothing else matters | 5.69 | 1.94 Metallica | Enter Sandman | 1.94 | 1.94 Rammstein | Engel | 7.94 | 2.61 Rammstein | Ohne Dich | 5.22 | 2.61 Rammstein | Sonne | 2.61 | 2.61 U2 | With or Without You | 6.49 | 4.48 U2 | Where The Streets Hve No Name | 4.48 | 4.48 (12 rows)
  • 44. ROW_NUMBER SELECT band, song, mio_downloads, ROW_NUMBER() OVER (PARTITION BY band ORDER BY mio_downloads DESC) AS top FROM downloads; © Alle Rechte vorbehalten, S. Holzgraefe
  • 45. Ausgabe ROW_NUMBER Beispiel © Alle Rechte vorbehalten, S. Holzgraefe© Alle Rechte vorbehalten, S. Holzgraefe band | song | mio_downloads | top ---------------------+-------------------------------+---------------+----- Die Ärzte | Westerland | 8.31 | 1 Die Ärzte | Zu Spät | 7.48 | 2 Die Ärzte | Schrei nach Liebe | 2.97 | 3 Die Ärzte | Schlaflied | 1.64 | 4 Héroes del Silencio | Entre dos tierras | 5.91 | 1 Metallica | Nothing else matters | 5.69 | 1 Metallica | Enter Sandman | 1.94 | 2 Rammstein | Engel | 7.94 | 1 Rammstein | Ohne Dich | 5.22 | 2 Rammstein | Sonne | 2.61 | 3 U2 | With or Without You | 6.49 | 1 U2 | Where The Streets Hve No Name | 4.48 | 2 (12 rows)
  • 46. –miracee „CTEs und Window Functions sind aus der heutigen Datenbankwelt nicht mehr wegzudenken. Durch sie wird die Kommunikation mit der Datenbank nicht nur einfacher und effektiver sondern auch zielgerichteter und performanter.“ © Alle Rechte vorbehalten, S. Holzgraefe
  • 47. –miracee „SQL ist ein mächtiges Werkzeug, mit dem sich einfach und schnell auch komplex zusammenhängende Informationen aus einer Datenbank herausholen lassen.“ © Alle Rechte vorbehalten, S. Holzgraefe