Übersicht SQL- Cheat Sheet - Daten abfrage

Der SQL-Befehl für das Auslesen von Daten ist SELECT. Weitere Befehle sind zum Beispiel UPDATE oder DELETE FROM. Diese Übersicht konzentriert sich jedoch auf SELECT.

 

Aufbau einer Query:

SELECT [Column 1], [Column 2],....[Column N]

FROM [Datasource]

WHERE [Column Name] {Comparison Operator} {Filter Criteria}

GROUP BY [Colun Name]

HAVING {[Aggregate Function]} {Comparison Operator} {Filter Criteria}

ORDER BY {[Column Name], [Column Alias], [Column Ordina]} [ASEC/DESC]

 

Beispiele für "Comparison Operator":  <, >, =, !=

Beispiel für "Aggregate functions": MAX, MIN, COUNT, AVG, SUM

 

Beschreibung SQL

Spezifische Daten auslesen

Abfrage aller Daten einer Tabelle

SELECT *

FROM source

Kalkulationen bei SELECT sind möglich = kalkulierte Spalten

SELECT feld1 + feld2

FROM source

 

SELECT preis + preis*0.19

FROM source

 

SELECT name, population/area

FROM source

 

Umbenennung / ALIAS

SELECT preis + preis*0,19 AS Preis_mit_MwST

FROM source

Weitere Funktionen

 

COUNT = Liefert die Anzahl der nicht leeren Zellen

SELECT MAX(preis) FROM source

 

SELECT MIN(preis) FROM source

 

SELECT AVG(preis) FROM source

 

SELLECT COUNT(preis) FROM source

 

SELECT SUM(preis) FROM source

Klausel ORDER BY, GROUP BY, HAVING oder wie man Daten sortiert und gruppiert

Daten sortieren

SELECT *

FROM source

ORDER BY DESC name

GROUP BY = Gruppierung mit Aggregatsfunktion = Wie viele Nobelpreise wurden pro Fach vergeben?

SELECT subject, COUNT(subject)

FROM nobel

GROUP BY subject

 

SELECT name, AVG(revenue)

FROM source

GROUP BY name

 

SELECT name, SUM(revenue)

FROM source

GROUP BY name

GROUP BY GROUPING SETS

Vorteil ist die Vereinfachung von Queries.

SELECT a1, a2, aggregate (a3)

FROM source

GROUP BY GROUPING SETS (

              (a1, a2),

              (a1),

              (a2),

              ()

)

HAVING = Ähnlich wie WHERE aber bezieht sich auf Datensatzgruppen nicht auf einzelne Datensätze

SELECT COUNT (name), country

FROM source

GROUP BY country

HAVING COUNT(name) >5

Klausel WHERE oder wie man Daten aus bestimmten Datensätzen ausliest

Abfrage spezifischer Daten

SELECT population

FROM source
WHERE name = 'Germany'

IN = Selektion von verschiedenen Items

Statt name='Germany' OR name ='Sweden' or name='Norway'

SELECT name, population

FROM source
WHERE name IN ('Germany, 'Sweden', 'Norway')

NOT IN

SELECT name, population

FROM source
WHERE name NOT IN ('Germany, 'Sweden', 'Norway')

 

BETWEEN = Datenspanne

Bei BETWEEN gehören die Grenzbereiche immer zu dem angegebenen Wertebereich

 

SELECT name, area

FROM source
 WHERE area BETWEEN 200000 AND 250000

 

SELECT name, area

FROM source

WHERE are BETWEEN 'A' and 'Nzzz'

 

SELECT name, area

FROM source

WHERE area >=200000

AND area <=250000

 LIKE in Kombination mit Platzhaltern: (%,_[])

SELECT name, area

FROM source
WHERE name LIKE 'Ge%'

 

Prozentzeichen demaskieren = Prozentzeichen nicht als Platzhalter interpretieren, sondern als Prozentezeichen werten

SELECT name, area, gdp

FROM source

WHERE gdp LIKE '20#%'

NOT LIKE in Kombination mit Platzhaltern (%, _)

SELECT name

FROM source

WHERE name NOT LIKE 'Ge%'

 OR

SELECT name, area

FROM source

WHERE name LIKE '%y' OR '%a'

 AND 

SELECT name, length

FROM source

WHERE length = 5 AND continent='EUROPE'

AND OR Kombination mit Klammern

SELECT *

FROM source

WHERE name LIKE 'B%'

AND city = 'Stuttgart'

AND (phone LIKE '%8%' OR code LIKE '%8%')

AND NOT

Und seine verschiedene Möglichkeiten

SELECT*

FROM source

WHERE (team1='VFB' OR team2='VFB')

AND NOT teamid = 'VFB'

 

Alternative:

SELECT*

FROM source

WHERE (team1='VFB' OR team2='VFB')

AND teamid != 'VFB'

 

SELECT*

FROM source

WHERE (team1='VFB' OR team2='VFB')

AND teamid <> 'VFB'

 

> <  größer, kleiner

SELECT name, area, population

FROM source

WHERE area > 50000 AND population < 100000

IS NULL = Spalten enthalten einen Nullwert

 

Umgekehrte Ausgabe: IS NOT NULL

SELECT *

FROM source

WHERE phone IS NULL

Beispiel von 2x SELECT = Höhere Bevölkerung als Deutschland?

SELECT name 

FROM source

WHERE population > (SELECT population

                                     FROM source

                                      WHERE name='Germany')

ALL SELECT = Was ist das bevölkerungsreichste Land?

 

Welche Spieler haben in der 2.Liga mehr Tore geschossen als die besten Spieler in der 1. Liga? (es gibt zwei Tabellen)

SELECT name

FROM source

WHERE population >= ALL(SELECT population                                                     FROM source

                                    WHERE population>0) 

 

SELECT name

FROM secondleague

WEHRE goals > ALL(SELECT goals FROM firstleague)

SONSTIGES

ROUND = RUNDEN

0 = 1234

1 = 1234.5

3 = 1000

 

SELECT name, ROUND (length, -3)

FROM source

WHERE name IN ('China', 'Germany, 'France')

SELECT DISTINCT = Abfrage mit eindeutigen Werten = Dies zeigt die Matrikelnummern aller Studenten, die mindestens eine Vorlesung hören, wobei mehrfach auftretende Matrikelnummern nur einmal ausgegeben werden.

SELECT DISTINCT matrikelnummer

FROM source

 CONCAT = Hinzufügen

 SELECT name, CONCAT((population /SELECT population FROM world WHERE name = 'Germany')*100),'%')

FROM world

WHERE continent = 'Europe'

 Correlated Subquery

 

Beispiel 1: Größtes Land pro Kontinent

 

Beispiel 2: Mitarbeiter, die mehr als der Durchschnittsgehalt in ihrer Abteilung haben.

SELECT column1, column2

FROM table1 outer

WHERE column1 operator (SELECT column1

                                       FROM table2

                                       WHERE expr1 = outer.expr2)

 

 

Beispiel 1:

SELECT continent, name, area

FROM world x

WHERE area >= ALL (SELECT area

                                FROM world y

                                WHERE y.continent=x.continent

                                AND area>0)

 

Beispiel 2:

SELECT last_name, salary, department_id

FROM employees outer

WHERE salary > (SELECT AVG (salary) 

       FROM employees

       WHERE department_id = outer.department_id)

LIMIT sinnvoll beim testen der SQL-Abfrage oder in Kombination mit ORDER BY

 

Andere Datenbanksysteme unterstützen auch: SELECT TOP, FETCH FIRST 3 ROWS ONLY oder sogar SELECT TOP 10 PERCENT

SELECT*

FROM source

WHERE name = "Schnitzelbrötchen"

LIMIT 3

CASE Statement

 

Die Ausgabetabelle enthält eine Spalte mit dem Namen "Kundenklassifizierung" mit dem entsprechenden Text.

SELECT BestellID, Bestellmenge,

CASE WHEN Bestellmenge > 20 THEN 'Großkunde'

WHEN Bestellmenge = 20 THEN 'Durchschnittskunde'

ELSE 'Kleinkunde'

END AS Kundenklassifizierung

FROM Tabelle

COALESCE = ein NULL-Wert ersetzen durch einen anderen Wert

SELECT name, COALESCE(mobile,'keine nummer')  FROM source

JOIN

JOINs werden benötigt wenn man Daten in mehreren Tabellen hat

 

Es gibt mehrere Arten von JOINs? (INNER) JOIN, LEFT JOIN, RIGTH JOIN, FULL JOIN

 

Eine der besten Erklärungen: https://learnsql.com/blog/sql-joins-made-easy/

Kurzfassung ist: LEFT/RIGHT JOINs sehr wichtig wenn die Ausgabetabelle NULL-Werte enthalten soll, z.B. Für nicht jedes Haustier kann eine Farbe ausgegeben werden.

SELECT table1.name, table2.name

FROM table1

INNER JOIN table2

ON table1.id1=table2.id2

 

SELECT*

FROM Haustier

RIGHT JOIN Farbe

ON Haustier.Name = Farbe.Name

(Haustier & Farbe sind Tabellen, Name ist eine ID bzw. der matching Key)

Beispiel von zwei JOINs die beide das gleiche Ergebnis bringen

SELECT player,teamid,stadium,mdate

  FROM goal JOIN game ON (matchid=id)

 

SELECT player,teamid,stadium,mdate

  FROM game JOIN goal ON (id=matchid)

JOIN und WHERE

SELECT table1.name, table2.name

FROM table1

INNER JOIN table2

ON table1.id1=table2.id2

WHERE table1.name='Schnitzelbrötchen'

Zweimal JOINs in einer Abfrage

Notwendig wenn eine dritte Tabelle zwei andere Tabellen verlinkt

SELECT name FROM table3

  JOIN table1 ON table1.superid=table3.superid

  JOIN table2 ON  table2.bestid=table3.bestid

  WHERE name = 'Schnitzelbrötchen'

Source:

  • https://sqlzoo.net/wiki/SQL_Tutorial
  • www.wikipedia.de
  • Valade, Janet: PHP & MySQL für dummies, 2018
  • Taylor, Allen G.:SQL für dummies, 2017
  • https://learnsql.com/blog/sql-joins-made-easy/
  • https://www.w3schools.com/sql/sql_case.asp