Zum Hauptinhalt springen

1) SELECT-Anweisungen

Ein Zusammentrag der meiner Meinung nach wichtigsten Befehle in Zusammenhang mit der SELECT-Anweisung.

ER-Modell der verwendeten Datenbank und Daten

ER-Modell

SaisonFahrerweltmeisterKonstrukteursWMWM_PunkteTeam_Punkte
1991Ayrton SennaMcLaren-Honda96139
1992Nigel MansellWilliams-Renault108164
1993Alain ProstWilliams-Renault99168
1994Michael SchumacherWilliams-Renault92118
1995Michael SchumacherBenetton-Renault102137
1996Damon HillWilliams-Renault97175
1997Jaques VilleneuveWilliams-Renault81123
1998Mika HäkinnenMcLaren-Mercedes100156
1999Mika HäkinnenFerrari76128
2000Michael SchumacherFerrari108170
2001Michael SchumacherFerrari123179
2002Michael SchumacherFerrari144221

Wie eine einfache relationale Datenbank gehostet werden kann und man Werte einfügt, erfährst du hier

Grundlegend

Jede SQL-Abfrage enthält die drei Hauptbefehle select, from und where. Mit select gibt man an, welche Spalten man ausgegeben haben möchte; mit from gibt man die Tabelle an, aus der die Spalten stammen; mit where gibt man die Bedingung an, unter der die Datensätze ausgesucht werden. Where muss nicht vorkommen, wenn es keine Bedingung gibt.

Mit dieser Abfrage selektieren wir alle Einträge mit 'Michael Schumacher' aus den Spalten Saison, Fahrerweltmeister, Konstrukteurswm.

MariaDB [wmtitel]> SELECT Saison, Fahrerweltmeister, Konstrukteurswm FROM wmtitel WHERE Fahrerweltmeister = 'Michael Schumacher';
+--------+--------------------+------------------+
| Saison | Fahrerweltmeister | Konstrukteurswm |
+--------+--------------------+------------------+
| 1994 | Michael Schumacher | Williams-Renault |
| 1995 | Michael Schumacher | Benetton-Renault |
| 2000 | Michael Schumacher | Ferrari |
| 2001 | Michael Schumacher | Ferrari |
| 2002 | Michael Schumacher | Ferrari |
+--------+--------------------+------------------+
5 rows in set (0.000 sec)

Damit sollte der Grundaufbau einer Abfrage zu erkennen sein. Diese Abfrage können wir weiter abwandeln indem wir zum Beispiel Vergleiche einfügen oder Bereichsvergleiche:

Vergleich
MariaDB [wmtitel]> SELECT Saison, Fahrerweltmeister, WM_Punkte
-> FROM wmtitel
-> WHERE Fahrerweltmeister = 'Michael Schumacher'
-> and WM_Punkte > 100;
+--------+--------------------+-----------+
| Saison | Fahrerweltmeister | WM_Punkte |
+--------+--------------------+-----------+
| 1995 | Michael Schumacher | 102 |
| 2000 | Michael Schumacher | 108 |
| 2001 | Michael Schumacher | 123 |
| 2002 | Michael Schumacher | 144 |
+--------+--------------------+-----------+
4 rows in set (0.000 sec)
Bereichsvergleich mittels between-Operator
MariaDB [wmtitel]> SELECT Saison, Fahrerweltmeister, WM_Punkte
-> FROM wmtitel
-> WHERE Fahrerweltmeister = 'Michael Schumacher'
-> and WM_Punkte between 80 and 100;
+--------+--------------------+-----------+
| Saison | Fahrerweltmeister | WM_Punkte |
+--------+--------------------+-----------+
| 1994 | Michael Schumacher | 92 |
+--------+--------------------+-----------+
1 row in set (0.000 sec)

Wir können die ausgegebenen Daten auch mittels 'ORDER BY' ordnen:

MariaDB [wmtitel]> SELECT Fahrerweltmeister, WM_Punkte
-> FROM wmtitel
-> ORDER BY WM_Punkte desc;
+--------------------+-----------+
| Fahrerweltmeister | WM_Punkte |
+--------------------+-----------+
| Michael Schumacher | 144 |
| Michael Schumacher | 123 |
| Nigel Mansell | 108 |
| Michael Schumacher | 108 |
| Michael Schumacher | 102 |
| Mika Häkinnen | 100 |
| Alain Prost | 99 |
| Damon Hill | 97 |
| Ayrton Senna | 96 |
| Michael Schumacher | 92 |
| Jaques Villeneuve | 81 |
| Mika Häkinnen | 76 |
+--------------------+-----------+
12 rows in set (0.000 sec)

In der select-Klausel können mit den Grundrechenarten (+, -, *, /) Berechnungen durchgeführt werden. Den berechneten Ergebnisspalten kannst Du mit dem as-Operator Bezeichnungen geben.

Beispiel: Es soll die prozentuale Ausbeute der WM-Punkte ermittelt werden. Bei 16 Rennen und jeweils 10 Punkten können maximal 160 WM-Punkte erreicht werden.

MariaDB [wmtitel]> SELECT Fahrerweltmeister, WM_Punkte/160*100 AS Ausbeute
-> FROM wmtitel;
+--------------------+----------+
| Fahrerweltmeister | Ausbeute |
+--------------------+----------+
| Ayrton Senna | 60.0000 |
| Nigel Mansell | 67.5000 |
| Alain Prost | 61.8750 |
| Michael Schumacher | 57.5000 |
| Michael Schumacher | 63.7500 |
| Damon Hill | 60.6250 |
| Jaques Villeneuve | 50.6250 |
| Mika Häkinnen | 62.5000 |
| Mika Häkinnen | 47.5000 |
| Michael Schumacher | 67.5000 |
| Michael Schumacher | 76.8750 |
| Michael Schumacher | 90.0000 |
+--------------------+----------+
12 rows in set (0.000 sec)