
Posted on • Originally published atinformatik-ninja.de
🇩🇪 Grundlegende SQL-Befehle für Einsteiger
Einführung in SQL und Datenbanken
Wie im letzten Eintrag erwähnt sind Datenbanken aus der heutigen Zeit nicht mehr wegzudenken. SQL(Structured Query Language) ist dabei die Basis für Datenbank Manipulationen und Abfragen. Egal ob Datenbankadministrator, oder Web-/Softwareentwickler, Kenntnisse in SQL sind unerlässlich.
Was ist SQL
Bei SQL (Structured Query Language) handelt es sich um eine standardisierte Sprache für die Verwaltung und Manipulation von relationalen Datenbanken. Sie wurde in den 1970er Jahren von IBM entwickelt und hat sich zum De-facto Standard bei relationalen Datenbanken entwickelt.
SQL ermöglicht es einem Daten zu erstellen, zu lesen, zu aktualisieren und zu löschen (CRUD-Operationen,CREATE-READ-UPDATE-DELETE). Außerdem können damit auch komplexe Abfragen durchgeführt werden und die Struktur von Datenbanken verwaltet werden.
Datenbank und Tabellen erstellen
Bevor man mit einer Datenbank arbeiten kann, muss diese aber erst erstellt und die Struktur definiert werden. Im ersten Schritt wird also die DB und die Tabellen erstellt und deren Struktur definiert.
CREATE DATABASE
Um eine neue Datenbank zu erstellen, wird der Befehl CREATE DATABASE verwendet. Die Syntax ist dabei wie folgt:
CREATEDATABASEmein_datenbank_name;
Dieser Befehl erstellt eine neue, leere Datenbank namens "mein_datenbank_name". Nach dem Erstellen müssen wir die Datenbank noch auswählen, um mit ihr zu arbeiten. Das geschieht mit demUSE
Befehl, welcher MySQL mitteilt, dass alle nachfolgenden Befehle im Kontext der gewählten Datenbank ausgeführt werden sollen.
USEmein_datenbank_name;
CREATE TABLE
Da eine leere Datenbank nicht allzu sinnvoll ist, können wir nun ein paar Tabellen erstellen. Tabellen sind die grundlegenden Strukturen, in denen die Daten einer relationalen Datenbank gespeichert werden. Die Syntax sieht dabei wie folgt aus:
CREATETABLEtabellen_name(spalte1datentyp[einschränkungen],spalte2datentyp[einschränkungen],...[tabelleneinschränkungen]);
Lass uns als Beispiel eine "Kunden" Tabelle erstellen:
CREATETABLEKunden(kunden_idINTPRIMARYKEYAUTO_INCREMENT,vornameVARCHAR(50)NOTNULL,nachnameVARCHAR(50)NOTNULL,emailVARCHAR(100)UNIQUE,geburtstagDATE,registrierungsdatumTIMESTAMPDEFAULTCURRENT_TIMESTAMP,kundenstatusENUM('aktiv','inaktiv','gesperrt')DEFAULT'aktiv',kreditlimitDECIMAL(10,2)DEFAULT1000.00);
Die einzelnen Befehle kurz erklärt:
kunden_id INT PRIMARY KEY AUTO_INCREMENT
: Definiert eine Ganzzahl (Integer
)-Spalte als Primärschlüssel, deren Wert automatisch für jeden neuen Eintrag erhöht wird (AUTO_INCREMENT
)vorname VARCHAR(50) NOT NULL
: Definiert Zeichenkette mit variabler Länge (max. 50 Zeichen), die nicht leer (NULL) sein darfnachname VARCHAR(50) NOT NULL
: siehevorname
email VARCHAR(100) UNIQUE
: Definiert eine email Spalte, die eindeutig sein mussgeburtstag DATE
: Ein Datumswert für den Geburtstag eines Kundenregistrierungsdatum TIMESTAMP DEFAULT CURRENT_TIMESTAM
P: Ein Zeitstempel, welcher als Standardwert die aktuelle Zeit gesetzt hat, wenn ein neuer Datensatz eingefügt wird.kundenstatus ENUM('aktiv', 'inaktiv', 'gesperrt') DEFAULT 'aktiv'
: Ein Aufzählungstyp mit vordefinierten Werten und dem Standardwert 'aktiv'kreditlimit DECIMAL(10,2) DEFAULT 1000.00
: Ein Dezimalwert mit einem Standardwert
Datentypen in MySQL
Ein paar Datentypen haben wir im Beispiel eben ja schon kennengelernt, aber MySQL bietet noch eine Vielzahlweiterer Datentypen. Die Wahl des richtigen Datentyps ist wichtig, um die Informationen effizient zu speichern und die Integrität der Datenbank zu gewährleisten. Ein paar der am häufigsten verwendeten Datentypen:
Numerische Typen:
TINYINT
: Für ganze Zahlen (Integers) zwischen -128 und 127INT
: Für ganze Zahlen (Integers) zwischen -2.147.483.648 und 2.147.483.647 (-231 und 231 - 1)BIGINT
: Für ganze Zahlen (Integers) zwischen -263 und 263 - 1DECIMAL(M, D)
: Für Festkommazahlen. M ist die Gesamtzahl der Ziffern (Präzision); D ist die Anzahl der DezimalstellenFLOAT
: Für Gleitkommazahlen mit einfacher GenauigkeitDOUBLE
: Für Gleitkommazahlen mit doppelter Genauigkeit
Zeichenketten:
CHAR(n)
: Für Zeichenketten mit fester Längen
VARCHAR(n)
: Für Zeichenketter mit variabler Länge (max.n
Zeichen)TEXT
: Für lange Texte mit bis zu 65.535 ZeichenLONGTEXT
: Für sehr lange Texte mit bis zu 4 GB
Datum- und Zeittypen:
DATE
: Für Datumswerte. Format:YYYY-MM-DD
TIME
: Für Zeitwerte. Format:HH:MM:SS
DATETIME
: Für Datums- und Zeitwerte. Format:YYYY-MM-DD HH:MM::SS
TIMESTAMP
: Ähnlich wie DATETIME; Speichert den UNIX Timestamp zwischen1970-01-01 00:00:01
UTC bis2038-01-19 03:14:07
UTC.
Sonstige Typen:
BOOLEAN
: Für Wahrheitswerte (true/false
)ENUM
: Für vordefinierte Listen von WertenSET
: Ähnlich wieENUM
, erlaubt aber die Auswahl mehrerer WerteBLOB
: Für binäre Daten (binary large object) wie zum Beispiel Bilder
Die Wahl des richtigen Datentypen kann erheblichen Einfluss auf die Leistung und Speichereffizienz der Datenbank haben. Zum Beispiel:
- Verwenden von
INT
für ganze Zahlen anstelle vonFLOAT
oderDOUBLE
, wenn keine Dezimalstellen benötigt werden - Benutzen von
VARCHAR
anstelle vonCHAR
für Zeichenketten variabler Länge, um Speicherplatz zu sparen - Verwenden von
ENUM
oderSET
für Spalten mit einer begrenzten Anzahl möglicher Werte, um Datenintegrität zu verbessern und Speicherplatz zu sparen
Primärschlüssel und Fremdschlüssel
Primärschlüssel und Fremdschlüssel sind entscheidend für die Strukturierung relationaler Datenbanken und die Gewährleistung der Datenintegrität.
Primärschlüssel (Primary Key)
Bei einem Primärschlüssel handelt es sich um ein Feld (oder eine Kombination von Feldern), welches den Datensatz eindeutig identifiziert. Im obigen Beispiel mit derKunden
-Tabelle ist das Feldkunden_id
der Primärschlüssel. Die Eigenschaften von Primärschlüsseln sind:
- Eindeutigkeit (uniqueness) - keine zwei Datensätze können den gleichen Schlüsselwert haben
- Sie dürfen nicht
NULL
sein - Unveränderbarkeit (immutability) - einmal zugewiesen, sollte der Wert konstant bleiben
Primärschlüssel können auf verschiedene Weise definiert werden:
-- Als Teil der SpaltendefinitionCREATETABLEbeispiel1(idINTPRIMARYKEY,nameVARCHAR(50));-- Als separate EinschränkungCREATETABLEbeispiel2(idINT,nameVARCHAR(50),PRIMARYKEY(id));-- Zusammengesetzter PrimärschlüsselCREATETABLEbeispiel3(id1INT,id2INT,nameVARCHAR(50),PRIMARYKEY(id1,id2));
Fremdschlüssel
Ein Fremdschlüssel (FK) ist ein Feld in der Tabelle, welches auf einen Primärschlüssel in einer anderen Tabelle verweist. Das ermöglicht es Beziehungen (Relationen) zwischen Tabellen zu erstellen und die referenzielle Integrität zu gewährleisten. Hier ein Beispiel für eineBestellungen
-Tabelle, welche einen Fremdschlüssel auf unsereKunden
Tabelle enthält. In dem Beispiel verweistkunden_id
in derBestellungen
Tabelle aufkunden_id
in derKunden
Tabelle. Dies stellt eine Beziehung zwischen Kunden und ihren Bestellungen her.
CREATETABLEBestellungen(bestell_idINTPRIMARYKEYAUTO_INCREMENT,kunden_idINT,bestelldatumDATE,gesamtbetragDECIMAL(10,2),FOREIGNKEY(kunden_id)REFERENCESKunden(kunden_id));
Fremdschlüssel haben mehrere wichtige Funktionen:
- stellen sicher, dass nur gültige Daten in die FK Spalte eingefügt werden können
- ermöglichen das Löschen und Aktualisieren von verknüpften Datensätzen in mehreren Tabellen (kaskasierende Aktionen)
- verbessern die Datenintegrität und -konsitenz
Das Verhalten von Fremdschlüsseln bei Aktualisierungen oder Löschungen kann mit den KlauselnON UPDATE
undON DELETE
gesteuert werden:
CREATETABLEBestellungen(bestell_idINTPRIMARYKEYAUTO_INCREMENT,kunden_idINT,bestelldatumDATE,gesamtbetragDECIMAL(10,2),FOREIGNKEY(kunden_id)REFERENCESKunden(kunden_id)ONDELETECASCADEONUPDATERESTRICT);
Hier würde das Löschen eines Kunden automatisch alle seine Bestellungen löschen (CASCADE
), während eine Änderung derkunden_id
verhindert würde (RESTRICT
).
Daten einfügen und abfragen
Daten einfügen und abfragen gehört zu den grundlegendsten Operation, da man Sie am häufigsten nutzt.
INSERT INTO
Mit demINSERT INTO
Befehl können neue Datensätze in eine Tabelle eingefügt werden. Die grundlegende Syntax sieht dabei wie folgt aus:
INSERTINTOtabellen_name(spalte1,spalte2,spalte3,...)VALUES(wert1,wert2,wert3);
Hier einige Beispiele für unsereKunden
-Tabelle
-- Einzelnen Datensatz hinzufügenINSERTINTOKunden(vorname,nachname,email,geburtstag)VALUES('Max','Mustermann','max@example.com','1990-01-01');-- Mehrere Datensätze gleichzeitig einfügenINSERTINTOKunden(vorname,nachname,email,geburtstag)VALUES('John','Doe','john.doe@example.com','1970-01-01'),('Jane','Doe','jane.doe@example.com','1980-01-01'),('Maria','Musterfrau','maria@example.com','1990-11-11');-- Alle Spalten in der definierten Reihenfolge (nicht empfohlen !)INSERTINTOKundenVALUES(NULL,'Peter','Meier','2000-01-01',CURRENT_TIMESTAMP,'aktiv',1000.00);
Wichtige Punkte die man beachten sollte:
- Wenn nicht alle Spalten angegeben werden, werden die ausgelassenen Spalten mit den Standardwerten oder
NULL
befüllt - Die Reihenfolge der Spalten in der
INSERT
-Anweisung muss mit der Reihenfolge der Werte übereinstimmen - Für Spalten mit
AUTO_INCREMENT
(z.B.kunden_id
) kannNULL
oder0
eingegeben werden, um den nächsten verfügbaren Wert zu benutzen - Datum- und Zeitwerte sollten im Format
YYYY-MM-DD
bzwYYYY-MM-DD HH:MM:SS
angegeben werden
SELECT Abfragen
DerSELECT
-Befehl ist der Grundstein für das Abfragen von Daten in einer Datenbank. Die grundlegende Syntax sieht wie folgt aus:
SELECTspalte1,spalte2,...FROMtabellen_name[WHEREbedingung][ORDERBYspalte1[ASC|DESC],...][LIMITanzahl];
Einige Beispiele mit unsererKunden
-Tabelle:
-- Alle Spalten aller Kunden abrufenSELECT*FROMKunden;-- Nur bestimmte Spalten abrufenSELECTvorname,nachname,emailFROMKunden;-- Daten sortieren (ORDER BY spalte1 [ASC|DESC], spalte2 [ASC|DESC], ...)SELECT*FROMKundenORDERBYnachnameASC,vornameDESC;-- Begrenzte Anzahl von ErgebnissenSELECT*FROMKundenLIMIT10;
WHERE-Bedingungen
DieWHERE
Klausel ermöglicht es dieSELECT
-Abfrage zu filtern und nur bestimmte Datensätze zurückzugeben. Dabei können verschiedene Operatoren und logische Ausdrücke verwendet werden:
-- Einfache VergleicheSELECT*FROMKundenWHEREgeburtstag<'1990-01-01';SELECT*FROMKundenWHEREkundenstatus='aktiv';-- Logische OperatorenSELECT*FROMKundenWHEREgeburtstag<'1990-01-01'ANDkreditlimit>2000;SELECT*FROMKundenWHEREkundenstatus='aktiv'ORkreditlimit>5000;-- IN-Operator -> überprüft ob der Wert in einer Liste aus Werten ist-- Bsp: Selektiert alle Kunden, deren kundenstatus entweder 'aktiv' oder 'inaktiv' istSELECT*FROMKundenWHEREkundenstatusIN('aktiv','inaktiv');-- BETWEEN-Operator -> überprüft ob ein Datums-/Zeitwert zwischen zwei Werten ist-- Bsp: Selektiert alle Kunden die in den 1980ern geboren wurdenSELECT*FROMKundenWHEREgeburtstagBETWEEN'1980-01-01'AND'1989-12-31';-- NULL-Werte prüfenSELECT*FROMKundenWHEREgeburtstagISNULL;-- Komplexe Bedingungen-- Bsp: Selektiert alle Kunden, die 'aktiv' sind und ein Kreditlimit > 1000 haben-- ODER die inaktiv sind mit einem Kreditlimit > 5000SELECT*FROMKundenWHERE(kundenstatus='aktiv'ANDkreditlimit>1000)OR(kundenstatus='inaktiv'ANDkreditlimit>5000);
LIKE-Operator
DerLIKE
-Operator wird für Mustervergleiche in Zeichenketten verwendet. Das%
ist dabei als Platzhalter zu verwenden:
-- Kunden, deren Nachname mit 'M' beginnt, zb MustermannSELECT*FROMKundenWHEREnachnameLIKE'M%';-- Kunden, deren Nachname mit 'er' endet, zb Becker, MüllerSELECT*FROMKundenWHEREnachnameLIKE'%er';-- Kunden mit 'ei' irgendwo im Nachnamen, zb Meier, oder SchneiderSELECT*FROMKundenWHEREnachnameLIKE'%ei%';
Übungen
- Übung 1: Erstelle eine neue Tabelle
Benutzer
in derBibliothek
-Datenbank mit den Feldernuser_id
(Primärschlüssel),name
,adresse
,geburtstag
,eMail
undtelefonnummer
. - Übung 2: Füge mindestens 10 Benutzer in die
Benutzer
Tabelle ein, mit verschiedenen Namen, Adressen und Geburtstagen. - Übung 3: Schreibe eine
SELECT
-Abfrage, die alle Benutzer zurückgibt die mindestens 18 Jahre alt sind. - Übung 4: Schreibe eine
SELECT
-Abfrage, die alle Benutzer zurückgibt die eine E-Mail-Adresse von Googlemail haben (...@googlemail.com
oder...@gmail.com
) - Übung 5: Schreibe eine
SELECT
-Abfrage, die die 10 ältestens Benutzer zurückgibt.
Diese Übungen decken die wichtigsten Konzepte ab, die wir in diesem Tutorial behandelt haben. Versuche sie selbstständig zu lösen, bevor du nach Lösungen suchst. Die praktische Anwendung ist der beste Weg, um SQL zu lernen und zu beherrschen.
Die Lösungen zu den Übungen findest du in unseremGitHub Repository
Fazit
In diesem Eintrag haben wir die grundlegenden SQL-Befehle und Konzepte kennengelernt, die für die Arbeit mit relationalen Datenbanksystemen unerlässlich sind. Wir haben uns angeschaut, wie man Datenbanken und Tabellen erstellt und wie man Daten einfügt und abfragt.
Die beste Art, SQL zu lernen, ist durch praktische Übung. Versuche also die Übungsaufgaben selbständig zu lösen und experimentiere selbst mit verschiedenen Abfragen. Je mehr Übung man hat, desto vertrauter wird man mit der Sprache.
Referenzen
Top comments(0)
For further actions, you may consider blocking this person and/orreporting abuse