Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Cover image for 🇩🇪 Grundlegende SQL-Befehle für Einsteiger
Pascal Kleindienst
Pascal Kleindienst

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;
Enter fullscreen modeExit fullscreen mode

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;
Enter fullscreen modeExit fullscreen mode

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]);
Enter fullscreen modeExit fullscreen mode

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);
Enter fullscreen modeExit fullscreen mode

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 darf
  • nachname VARCHAR(50) NOT NULL: siehevorname
  • email VARCHAR(100) UNIQUE: Definiert eine email Spalte, die eindeutig sein muss
  • geburtstag DATE: Ein Datumswert für den Geburtstag eines Kunden
  • registrierungsdatum TIMESTAMP DEFAULT CURRENT_TIMESTAMP: 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 127
  • INT: 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 - 1
  • DECIMAL(M, D): Für Festkommazahlen. M ist die Gesamtzahl der Ziffern (Präzision); D ist die Anzahl der Dezimalstellen
  • FLOAT: Für Gleitkommazahlen mit einfacher Genauigkeit
  • DOUBLE: 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 Zeichen
  • LONGTEXT: 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 Werten
  • SET: Ähnlich wieENUM, erlaubt aber die Auswahl mehrerer Werte
  • BLOB: 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 vonINT für ganze Zahlen anstelle vonFLOAT oderDOUBLE, wenn keine Dezimalstellen benötigt werden
  • Benutzen vonVARCHAR anstelle vonCHAR für Zeichenketten variabler Länge, um Speicherplatz zu sparen
  • Verwenden vonENUM 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:

  1. Eindeutigkeit (uniqueness) - keine zwei Datensätze können den gleichen Schlüsselwert haben
  2. Sie dürfen nichtNULL sein
  3. 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));
Enter fullscreen modeExit fullscreen mode

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));
Enter fullscreen modeExit fullscreen mode

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);
Enter fullscreen modeExit fullscreen mode

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);
Enter fullscreen modeExit fullscreen mode

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);
Enter fullscreen modeExit fullscreen mode

Wichtige Punkte die man beachten sollte:

  1. Wenn nicht alle Spalten angegeben werden, werden die ausgelassenen Spalten mit den Standardwerten oderNULL befüllt
  2. Die Reihenfolge der Spalten in derINSERT-Anweisung muss mit der Reihenfolge der Werte übereinstimmen
  3. Für Spalten mitAUTO_INCREMENT (z.B.kunden_id) kannNULL oder0 eingegeben werden, um den nächsten verfügbaren Wert zu benutzen
  4. Datum- und Zeitwerte sollten im FormatYYYY-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];
Enter fullscreen modeExit fullscreen mode

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;
Enter fullscreen modeExit fullscreen mode

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);
Enter fullscreen modeExit fullscreen mode

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%';
Enter fullscreen modeExit fullscreen mode

Übungen

  • Übung 1: Erstelle eine neue TabelleBenutzer in derBibliothek-Datenbank mit den Feldernuser_id (Primärschlüssel),name,adresse,geburtstag,eMail undtelefonnummer.
  • Übung 2: Füge mindestens 10 Benutzer in dieBenutzer Tabelle ein, mit verschiedenen Namen, Adressen und Geburtstagen.
  • Übung 3: Schreibe eineSELECT-Abfrage, die alle Benutzer zurückgibt die mindestens 18 Jahre alt sind.
  • Übung 4: Schreibe eineSELECT-Abfrage, die alle Benutzer zurückgibt die eine E-Mail-Adresse von Googlemail haben (...@googlemail.com oder...@gmail.com)
  • Übung 5: Schreibe eineSELECT-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)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

  • Location
    Berlin, Germany
  • Joined

More fromPascal Kleindienst

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp