Category Archive MySQL

MySQL Select 1: Simple Select

Vorwort

In diesem Tutorial möchte ich euch einmal den Select- Befehl aus MySQL etwas näher bringen. Hierzu möchte ich mit euch Stück für Stück einige Selects aufbauen und euch Tipps und Anregungen geben wie ihr das am besten angeht. Da ich versuche alle Leute mitzunehmen, mögen mir mögliche Experten falsche Benamung oder nicht angewendete Vereinfachungen zu verzeihen. Diesen möchte ich mich Später widmen.

Gegeben ist eine Tabelle Namens Kontakte, diese umfasst die Felder (Attribute) die habe ich der Einfachheit unter https://de.fakenamegenerator.com/ generieren lassen und enthält KEINE echten Daten. Auch dem Thema wie eine Tabelle angelegt wird widme ich mich an einer anderen Stelle, da dieser Post lediglich den Select erklären soll!

Tabellenstruktur:

FieldTypeComment
Numberint(11)Autoincrement
Titlevarchar(255) 
Surnamevarchar(255) 
GivenNamevarchar(255) 
NameSetvarchar(255) 
MiddleInitialvarchar(255) 
Gendervarchar(255) 
StreetAddressvarchar(255) 
Cityvarchar(255) 
ZipCodevarchar(255) 
EmailAddressvarchar(255) 
TelephoneNumbervarchar(255) 
Birthdaydatetime 

Datenauszug

Abbildung1: Klick auf das Bild um die Ansicht in einem neuen Tab zu öffnen

Was ist ein Select-Befehl

Als einen Select beschreibt man eine Abfrage gegen die Datenbank, bei der man eine gewisse Menge an Daten zurück erhält. Dies kann der gesamte Inhalt einer Tabelle aber auch nur eine einzelne Zeile sein.

In diesem Tutorial werden wir nur mit einer Tabelle arbeiten, in der Praxis und späteren Lektionen werde ich euch aber auch zeigen, wie man Daten aus mehreren Tabellen zusammenfügt.

Der erste Select

Der simpelste Select den man sich vorstellen kann, ist der Select der einem den gesamten Inhalt einer Tabelle unsortiert, also in der Reihenfolge, in der die Daten in die Datenbank geschrieben wurden.

SELECT * FROM kontakte

Erster Select-Befehl

Führt man diesen Befehl über einen beliebigen MySql Client (Workbench, phpMyAdmin, Toad….) aus führt er zu der in Abbildung 1 (oben) gezeigten Ausgabe.

SELECT und FROM sind Schlüsselworte, die der Datenbank mitteilen was man von ihnen will. Um die Lesbarkeit eines SQL Statements zu erhöhen empfiehlt es sich Schlüsselworte immer UPPERCASE, also alle Buchstaben groß zu schreiben.

Kontakte ist die Tabelle, aus der wir unsere Daten haben wollen.

Das * an dieser Stelle ist bereits das erste Mogeln. ein * in der Feldliste ersetzt eine Liste ALLER Attribute. Was genau die Feldliste ist erkläre ich euch im nächsten Absatz. Dort gehe ich auch etwas detaillierter auf die Struktur eines Selects ein.

Select mit ausgewählten Feldern (Geburtstagsliste)

In den meisten Fällen braucht man aber gar nicht immer alle Informationen (Attribute) eines Datensatzes sondern nur eine Teilmenge. In der Zeit der schnellen Datenverbindungen und des massenhaften Arbeitsspeichers verzichten viele Entwickler gerne auf diese Einschränkung und selektieren lieber alles, ob sie es Später anzeigen oder nicht. Ich möchte euch bereits an dieser Stelle von diesem Vorgehen DRINGEND abraten. Neben dem Datenmüll den ihr mit euch mit schleppt, der sich in der Performance niederschlägt, schafft ihr euch damit viele Sicherheits- und Datenschutzprobleme.

Möchte ich jetzt zum Beispiel eine Geburtstagsliste erstellen so interessieren mich Informationen wie Adresse, Geschlecht und Kontaktdaten herzlich wenig. Diese machen meine Ausgabe nur unübersichtlich und unbrauchbar. In diesem Fall kann ich einzelne Attribute (Felder) mit einem Komma getrennt aufführen um nur noch diese Auszugeben. Interessant oder auch wichtig zu wissen ist hierbei, dass ich die Reihenfolge frei wählen kann, also auch erst den Geburtstag und dann den Namen ausgeben. Auch kann man ein Feld beliebig oft ausgeben. Der Sinn dahinter mag sich in diesem Tutorial nicht erschließen, wird aber in späteren Lektionen behandelt.

SELECT
Birthday , Surname, GivenName FROM kontakte

Select einer Geburtstagsliste
BirthdaySurnameGivenName
25-06-1964 00:00:00HeadstrongBilcuzal
06-06-1936 00:00:00Bolger-BagginsEsmeralda
12-11-1939 00:00:00OldbuckBertha
03-04-1988 00:00:00LightfootGuido
27-02-1991 00:00:00BrandagambaRowan
03-01-1980 00:00:00BoffinOtho
08-02-1979 00:00:00SackvilleRegina
28-11-1987 00:00:00GoldworthyBelladonna
08-06-1966 00:00:00GaukrogersJago
14-04-1936 00:00:00TunnellyPrisca

Auch bei dieser Ausgabe handelt es sich wieder nur um die ersten 10 Zeilen, da ich keine 500 Zeilen untereinander ausgeben will.

Struktur eines Selects

Der Select, den wir oben sehen unterscheidet sich vom ersten Select ausschließlich durch seine geänderte Fieldlist. Um euch nicht weiter zu verwirren nun einmal die Struktur eines einfachen Selectes vollständig aufgedröselt

SELECT [Fieldlist] FROM [Tabelle]

Wie bereits oben Erklärt, handelt es sich bei SELECT und FROM um sogenannte Schlüsselworte, die der Datenbank mitteilen was wir eigentlich tun wollen. Diese Schlüsselworte muss man leider stumpf Auswendig lernen. Ins ein deutschen Satz verpackt seht da oben nun:

Hol mir folgende Informationen [Fieldlist] aus der Tabelle.

Die Fieldlist

Die Fieldlist hat allerdings noch so einiges zu bieten, so können hier neben der einfachen Auswahl auch Berechnungen und Funktionen in ihr ausgeführt werden. Ich möchte auch auf Funktionen erst etwas weiter unten eingehen stelle euch aber eine Funktion (NOW) vor um euch einmal zu zeigen wie das ganze aussieht.

Eine Besonderheit von MySql ist übrigens, dass man für einen Select eigentlich nur das Schlüsselwort SELECT und eine Fieldlist braucht. Solange die Fieldlist keine Felder einer Tabelle beinhaltet reicht dies bereits aus

SELECT 1+1, 1+2, 3-1, 5*2, 3/2

1+11+23-15*23/2
232101,5000

Eine Funktion wird einfach mit Klammer auf, Klammer zu in die Fieldlist geschrieben. Im folgenden das Beispiel mit NOW() was uns die aktuelle Uhrzeit und das Datum gibt. WICHTIG diese Zeitdaten werden von der Systemuhr des Datenbankserver geliefert, geht diese Falsch oder steht in einer anderen Zeitzone, kann das zu Verwirrung führen!

SELECT NOW()

08-02-2019 12:34:28

Das soll es an dieser Stelle erst einmal von der Fieldlist gewesen sein. Weitere Möglichkeiten und wozu der Quatsch benötigt wird werden wir im Verlauf nach und nach sehen.

Sortierung

Um bei unserem Beispiel von oben zu bleiben, der Geburtstagsliste spinnen wir das ganze einmal weiter. Eine Liste macht ja erst so richtig Sinn wenn man sie auch irgendwie Sortiert… Im Falle von Geburtstagen bietet es sich an, von wer hat zu erst nach wer hat als letztes Geburtstag

Die Schlüsselworte ORDER BY sind hier unsere Helfer und stehen rechtweit hinten im Select Befehl.

SELECT
Birthday , Surname, GivenName FROM kontakte ORDER BY
Birthday

Select einer sortierten Geburtstagsliste
BirthdaySurnameGivenName
14-04-1936 00:00:00TunnellyPrisca
06-06-1936 00:00:00Bolger-BagginsEsmeralda
12-11-1939 00:00:00OldbuckBertha
25-06-1964 00:00:00HeadstrongBilcuzal
08-06-1966 00:00:00GaukrogersJago
08-02-1979 00:00:00SackvilleRegina
03-01-1980 00:00:00BoffinOtho
28-11-1987 00:00:00GoldworthyBelladonna
03-04-1988 00:00:00LightfootGuido
27-02-1991 00:00:00BrandagambaRowan

Diese Liste ist zwar sortiert, aber nicht so, wie wir es uns wünschen würden. Denk man an eine Geburtstagsliste Wünscht man sich doch eher eine Sortierung nach Monat und Tag und nicht von Alt nach Jung.

Da wir das aber noch nicht können, begnügen wir uns damit die Tabelle nach Nachnamen zu sortieren

SELECT
Birthday , Surname, GivenName FROM kontakte ORDER BY
Surname

Select einer sortierten Nachname

Bei der Sortierung haben wir noch einige Möglichkeiten, so können wir zum Einen entscheiden, ob wir etwas Aufsteigen (ascending) oder Absteigend (descending) Sortieren wollen. Die Schlüsselworte hierfür sind ASC für Aufsteigend und DESC für Absteigend. Wie euch beim nochmal Ansehen der vorangegangenen Select Befehlen sicher aufgefallen ist, habe ich darauf verzichtet das ASC mit zu tippen. Der Grund dafür ist, dass die meisten, eigentlich alle mir bekannten, Datenbanken bei einer Sortierung standartmäßig ASC sortieren, wenn man ihnen nichts anderes sagt. Bei der Sortierung werden Zahlen Nummerisch und Text wie Text behandelt.
Das klingt erstmal komisch ist aber schnell erklärt:
Speichert man die Zahlen 1-20 in jeweils einer Zeile in einer Spalte die als Text markiert ist (varchar, text, …) würde eine sortierte Ausgabe wie folgt aussehen

1
10
11
12
13
14
15
16
17
18
19
2
20
3
4
5
6
7
8
9

SELECT
Birthday , Surname, GivenName FROM kontakte ORDER BY
Surname DESC

Select einer sortierten Nachname Absteigend

Die Zweite und genau so wichtige Möglichkeit der Sortierung ist nach mehreren Feldern zu sortieren. Das kann nützlich sein, wenn man zum Beispiel in unserer Liste alle Familienmitglieder zusammen ausgeben will.

SELECT
Birthday , Surname, GivenName FROM kontakte ORDER BY
Surname, GivenName

Select einer sortierten Nachname, Vorname

BirthdaySurnameGivenName
30-09-1996 00:00:00BagginsAngelica
05-01-1935 00:00:00BagginsArnor
17-03-1942 00:00:00BagginsCamelia
29-07-1981 00:00:00BagginsElanor
17-07-1936 00:00:00BagginsFerumbras
12-05-1984 00:00:00BagginsHob
04-07-1992 00:00:00BagginsLily