Category Archive Slider

YAD(-C) Tutorial (Yet another docker(-compose) Tutorial)

In den folgenden Zeilen will ich euch eine kurze Einführung geben, wie man einen Server mit Docker und Docker-Compose am besten einrichtet. Dieses Tutorial dient mehr oder minder als Vorbereitung auf einge weitere Tutorials, die auf Docker aufbauen. Daher erklärt es eher, was ihr eingerichtet braucht um Docker so zu verwenden, wie ich es in den anderen Tutorial tue.

Keine Lust alles zu lesen? Soll einfach laufen? -> tl:dr

Da Ubuntu das Lieblings-Unix des Authoren ist, werden wir dieses als Grundlage nutzen. Im Vorliegenden Tutorial handelt es sich um ubuntu-20.04.1-live-server-amd641

Was ist Docker?

Docker ist eine Freie Software zur Isolierung von Anwendungen mit Hilfe von Containervirtualisierung.

Docker vereinfacht die Bereitstellung von Anwendungen, weil sich Container, die alle nötigen Pakete enthalten, leicht als Dateien transportieren und installieren lassen. Container gewährleisten die Trennung und Verwaltung der auf einem Rechner genutzten Ressourcen. Das beinhaltet laut Aussage der Entwickler: Code, Laufzeitmodul, Systemwerkzeuge, Systembibliotheken – alles was auf einem Rechner installiert werden kann

Docker (Software) – https://de.wikipedia.org/wiki/Docker_(Software) [Stand_ 03.01.2021]

Okey wenn ihr die Wikipedia lesen wollen würdet währet ihr wahrscheinlich nicht hier. Also wollen wir das mal übersetzen:

Docker ist eine Virtualisierungssoftware (wer sich an dieser Stelle die Frage stellt, was eine Virtualisierungssoftware ist, liest dann doch besser die Wiki und kommt danach zurück), bei der anders als bei anderen Anwendungen auf diesem Gebiet nicht immer ein ganzes Betriebssystem eingerichtet werden muss. Docker stellt uns vorbereitete Images und Container zur Verfügung auf deren Basis wir unsere Software einrichten können. In der Theorie spart dies sowohl Arbeit als auch Ressourcen, in der Praxis habe ich das Gefühl, dass die Trennung und Wartbarkeit eher der Vorteil sind. Jeder Container (was das ist, dazu kommen wir später) läuft für sich Isoliert und kann andere Container nur in geringen Masse beeinflussen. Da sich bei der Virtualisierung, egal ob Container oder Voll, die virtuellen Maschinen (VMs) dieselbe Hardware teilen, können besonders ressourcenhungrige Vertreter ihrer Art leicht Ressourcen ihrer Kollegen auslasten. Dies kann durch viele Parameter allerdings unterbunden werden.

Hier ein Beispiel für den Fall, dass mehrere VMs versuchen alles für sich zu beanspruchen (IT-Bezeichnung: Overprovisioning2):

Sind keine weiteren Parameter eingestellt, hat jede VM (Virtuellen Maschine) das Gefühl für sich allein die gesamte Hardware zur Verfügung zu haben. Und wird versuchen so viel Ressourcen zu beanspruchen wie sie für richtig hält. Grade Datenbanken neigen dazu dabei bis zu 90 % einfach zu belegen, nicht weil sie müssten, sondern weil sie schneller sind, wenn sie das Tun. Virtualisiert man nun 2 Datenbanken werden beide versuchen 90 % der Ressourcen des Hosts zu beanspruchen, und aus ihrer Sicht Erfolg dabeihaben, was dazu führt das nun 180% des z.B.: Arbeitsspeichers (RAM) beansprucht werden. Leider hat unserer Virtualisierungshost (der Rechner, auf dem die Software physikalisch läuft) dadurch nicht auf einmal mehr Arbeitsspeicher. Also muss er gucken wie er damit klarkommt. Einer VM zur Laufzeit (der Zeit, in der sie eingeschaltet ist) Arbeitsspeicher zu entziehen ist in der Regel nicht möglich und wird durch einen Absturz quittiert (Ausnahmen lassen wir hier mal unter den Tisch fallen), also muss ein anderer Weg her. Dieser Weg nennt sich Auslagerungsdatei (Windows) oder Swap (unixbasierte Betriebssysteme), hierbei werden die Daten des Arbeitsspeichers, die nicht mehr hineinpassen, auf einer Festplatte gespeichert. Das dies langsamer ist brauche ich wohl kaum sagen.

Vorwort , Vorbereitungen und Installation

Bei allen Befehlen wird davon ausgegangen, dass man nicht als root user sondern als ein User mit sogenannten sudo-Rechten3 auf einer Konsole (shell / Terminal / SSH / etc.) angemeldet ist. Solltet ihr als root angemeldet sein könnt ihr auf das sudo zu beginn aller Befehle verzichten ( obwohl es auch als root user nicht schlimm ist dies mitzutippen).

Bevor man irgendetwas unter Ubuntu installiert, sollte man sicherstellen, dass alle Updates installiert sind:

sudo apt update && sudo apt dist-upgrade -y

Diese Zeile beinhaltet 2 Anweisungen :

apt update:
Aktualisiert die Packetliste, also das Verzeichnis, in dem gespeichert wird, was Installiert werden kann.

apt dist-upgrade -y:
Startet die eigentliche Aktualisierung inclusive Betriebssystem. Das -y sorgt dafür, dass wir nicht noch einmal gefragt werden ob wir das wirklich tun wollen

Nach dem wir nun wissen, dass unser Ubuntu auf dem aktuellen Stand ist, können wir uns daran machen, alles zu installieren was wir brauchen (könnten).

sudo apt install python3-pip -y

Diese Zeile hat eigentlich nichts mit Docker zu tun, sondern installiert einen Python3 Paketmanager. Da wir aber später einige unterstüzende Module aus dem Python Repository benötigen installieren wir dies gleich mit.

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

Bei diesen 5 Paketen handelt es sich um Voraussetzungen, die lt. Docker.com für docker benötigt werden. Ich werde an dieser stelle nicht darauf eingehen, was die einzelnen Pakete tun, da dies den Rahmen sprengen würde. Da in der Unixwelt allerdings Dokumentation recht groß geschrieben wird, lässt sich das bei weitergehender Neugierde sehr leicht mit der Suchmaschine deiner Wahl ermitteln.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

curl, eins der Pakete das im vorangegangenden Schritt installiert wurde, läd nun den Schlüssel für das Docker Repository herunter. Hierdurch können wir Pakete direkt von docker.com installieren.

apt-key add sorgt dafür, dass wir diesem Schlüssel auch vertrauen.

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Nach dem wir dem Repository vertrauen, können wir diesen nun auch unseren Repositories hinzufügen.

sudo apt update && sudo apt install docker-ce docker-ce-cli containerd.io -y

Ähnlich wie bereits zu Anfang werden hier wieder einge befehle direkt hintereinander ausgeführt.

apt update aktualisiert erneut die Liste der installierbaren Paketen, nun allerdings inklusive der Pakete, die unter download.docker.com liegen.

apt install installiert die benötigten Pakete. Das Suffix -ce bei den Dockerpaketen sagt uns das wir die kostenlose Community Edition installieren.

Für docker war es das schon, da docker aber erst so richtig Spass macht wenn wir es auch automatisieren, installieren wir uns gleich auch noch docker-compose. Eine Engine die es uns erlaubt mehrere Container auf einmal zu starten.

Docker-compose Installation

sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker-compose ist ein einzelnes programm, dass wir einfach herunterladen könnten und damit fertig wären. Aber das ist uns ja zu langweilig also wollen wir auch noch, dass es aus egal welchen Ordner heraus aufgerufen werden kann.

sudo chmod +x /usr/local/bin/docker-compose && sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

diese letzte Zeile macht die datei docker-compose ausführbar, sorgt also dafür das unser Linux bereit ist diese auch als Programm anzuerkennen und fügt sie als Verküpfung zu den global verfügbaren Befehlen hinzu.

tl;dr

Wenn ihr einfach nur Docker unter Ubuntu 20.04 ans laufen bekommen wollt könntet ihr einfach alle Befehle von oben in ein einziges .sh Script kopieren, ausführen und glücklich sein. Dieses Script sähe dann wie folgt aus:

install.sh

#!/bin/sh
#System update
sudo apt update && sudo apt -y dist-upgrade

#Setup Python3 deps
sudo apt install python3-pip -y

#SetupDocker
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io -y

#Setup docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Auf der Konsole:

sudo chmod +x ./install.sh && sudo ./install.sh

Sieh zu wie tausende Zeilen über den Bildschirm fliegen, fertig …

Viel Spass

Show 3 footnotes
  1. Download (https://releases.ubuntu.com/20.04.1/ubuntu-20.04.1-live-server-amd64.iso)
  2. Ich weiß, dass Overprovisioning ursprünglich nur Speicherplatz bezeichnete, aber in der letzten Zeit wird der Ausdruck auch immer öffter für alle Ressourcen genutzt
  3. Sudoer sind Nutzer die Systemnahe Befehle ausführen dürfen, hierzu müssen sie jedoch ihr eigenes Passwort erneut eingeben. Goth sei dank müssen sie dass allerdings nur 1 mal innerhalb eines bestimmten Zeitraums und nicht für jeden Befehl einzeln

PHP Kapitel 1: Installation und Einrichtung

1.Einleitung

In diesem Artikel will ich euch die Installation bzw. Einrichtung von PHP auf euren Computern erklären und die wichtigsten Grundbegriffe einmal aufzählen. Da ich ein Windowsnutzer bin erfolgen die Beispiele anhand von Windowsscreens, eine seperate Anleitung für Mac und Linux folgt ggf. später. Alle Kapitel außer diesem sind für alle Betriebssysteme identisch.

PHP war ursprünglich die Abkürzung für Personal Homepage Tool wird heute aber mit PHP: Hypertextpreprocessor übersetzt. Wikipedia

Obwohl PHP auch in der Console genutzt werden kann, erkläre ich in diesem Tutorial die Verwednung in Verbindung mit einem Webserver. Die Einrichtung eines solchen Webservers soll nicht Hauptaugenmerk dieses Tutorials sein, da Anfänger in der Regel ihre Seiten auf Webservern von Webhostern hosten. Zur lokalen Entwicklung sollte man einen Webserver auf seinem PC haben. Hierzu empfehle ich XAMPP ((X)cross-plattform, Apache, MariaDB (früher Mysql), PHP und Perl) einen vollständig zu Entwicklungszwecken vorkonfigurieren Webserver. Wie auch schon auf der Webseite beschrieben möchte ich hier allerdings noch einmal eindringlich darauf hinweisen, dass XAMPP für die Entwicklung vorkonfiguriert ist und unter keinen Umständen für den Livebetrieb verwendet werden sollte.

2. XAMPP Installation

Wie bereits in der Einleitung verlinkt kann XAMPP unter https://www.apachefriends.org kostenfrei für das jeweilige Betriebssystem herruntergeladen werden. Nach dem Download startet man die xampp-*-installer.exe wie gewohnt mittels Doppelklick.

Windowsnutzer werden nun durch eine Fehlermeldung begrüßt:

 Warning
 Important! Because an activated User Account Control (UAC) on your system some functions of XAMPP are possibly restricted. With UAC please avoid to install XAMPP to C:\Program Files (missing write permisssions). Or deactivate UAC with msconfig after this setup.

Warning
Important! Because an activated User Account Control (UAC) on your system some functions of XAMPP are possibly restricted. With UAC please avoid to install XAMPP to C:\Program Files (missing write permisssions). Or deactivate UAC with msconfig after this setup.

Diese sagt, ins deutsche übersetzt, soviel wie: „Installieren sie diese Software nicht unter C:\Program Files, da die Software von hier aus auf Grund von Beschränkungen nicht richtig arbeiten kann…“ der Hinweiß, dass man alternativ auch die UNC Einstellungen von Windows anpassen kann sollte dringend ignoriert werden, da dies ein riesiges Sicherheitsproblem schafft. Dieser Dialog kann getrost weggeklickt werden.

Danach zeigt sich wie gewohnt ein geführter Installer, der uns nach der Begrüßung fragt, was wir alles installieren wollen. Wie eingehens erwähnt möchte ich hier nicht alle Möglichkeiten von XAMPP durchgehen und rate dazu, einfach alles wie Vorgeschlagen zu belassen und dann auf Weiter (Next) zu klicken.

Im nächsten Schritt fragt und der Installer wo wir hin Installieren wollen. Dankenswerterweise schlagen die aktuellen Versionen des Installers direkt „C:\xampp“ vor. Also einen Pfad außerhalb von „C:\Program Files“. Wenn man kein Mehrfestplattensystem oder andere Preferenzen hat ist man mit dieser Vorauswahl gut beraten. Im Laufe dieses Tutorials wird immer wieder davon ausgegangen, dass es sich beim Installationsverzeichnis um diesen Pfad handelt.

Hat man einen Installationspfad festgelegt so gelangt man auf eine Seite, die es einem ermöglicht, weitere Programme zu installieren. Hier kann man getrost den Harken bei „Learn more …“ entfernen.

So nach dem das geschafft ist und man noch einigemale auf Weiter und Fertig geklickt hat sieht man zum erstenmal das Controlpanel vor sich

XAMPP Controlpanel
Controlpanel

Sollte dies nicht automatisch aufgegangen sein, findet man es im Startmenu unter „XAMPP Control Panel“

Zur reinen Entwicklung von PHP braucht man nur den Apache Server. Dieses sollte idealerweise nur dann gestartet sein, wenn man auch entwickelt. Wenn ein Modul, wie z.B.: der Apache Webserver gestartet ist, wird dieser Grün hinterlegt.

3. Der Editor

Als Editor oder IDE (Integrated Development Enviroment) für PHP reicht im Prinzip der normale Texteditor (notepad.exe), allerdings gibt es auch eine ganze Reihe coole Entwicklungsumgebungen wie z.B.: Eclipse (als Vertreter der kostenlosen) und PHP Storm (als Vertreter der kostenpflichtigen).
Diese Entwicklungsumgebungen nehmen uns allerhand ab, daher verzichten wir am Anfang auf diese und einigen uns auf ein Mittelding: Notepad++.

Notepad ++ ist ein mittelding zwischen IDE und stumpfen Editor. Es bietet Syntax Highlighting und eine milde Autocompletion sowie Tabs, wenn man mal mehr als eine Datei offen haben will.

Notepad++ kann unter https://notepad-plus-plus.org/ herruntergeladen werden. Da bei der Installation nichts weiter Beachtet werden muss, verzichte ich an dieser Stelle auf die Erklärung der Installation.

4. Zusammenfassung

So nun haben wir alles, was es braucht um PHP lokal auf unserem Rechner zu entwickeln. Aller Anfang ist Trocken und schwer aber ich verspreche, ab hier wird es nicht mehr so Staubig.

Ich freue mich darauf euch in meinem nächsten Artikel zum Thema PHP wieder begrüßen zu dürfen.

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