SQL

SQL (Structured Query Language) ist eine standardisierte Programmiersprache zur Verwaltung und Bearbeitung von Daten in relationalen Datenbanken.

Insgesamt ist SQL ein unverzichtbares Werkzeug für Entwickler und Datenanalysten, um mit Daten effizient zu arbeiten.

Datenbank erstellen

Am besten fangen wir an in den wir lernen wie man einer SQL Datenbank erstellt.

CREATE DATABASE schule;
USE schule;

Tabellen erstellen

Als nächstes erstellen wir ein paar SQL Tabellen.
CREATE TABLE Schueler (
    schueler_id INT PRIMARY KEY,      -- Primärschlüssel
    vorname VARCHAR(50),
    nachname VARCHAR(50),
    geburtsdatum DATE
);
CREATE TABLE Kurse (
    kurs_id INT PRIMARY KEY,          -- Primärschlüssel
    kurs_name VARCHAR(100),
    lehrer_name VARCHAR(100)
);
CREATE TABLE Einschreibung (
    einschreibung_id INT PRIMARY KEY, -- Primärschlüssel
    schueler_id INT,                  -- Fremdschlüssel zu Schueler
    kurs_id INT,                      -- Fremdschlüssel zu Kurse
    einschreibedatum DATE,
    FOREIGN KEY (schueler_id) REFERENCES Schueler(schueler_id),
    FOREIGN KEY (kurs_id) REFERENCES Kurse(kurs_id)
);
Die SQL Tabellen wurden erstellt, sind aber noch leer.

Werten in die Tabellen einsetzen

Mit SQL INSERT können wir SQL Zeilen in die SQL Spalten einsetzen.

INSERT INTO Schueler (schueler_id, vorname, nachname, geburtsdatum) VALUES
(1, 'Max', 'Muster', '2005-04-15'),
(2, 'Anna', 'Beispiel', '2006-05-20'),
(3, 'Tom', 'Schneider', '2004-08-12'),
(4, 'Lisa', 'Müller', '2005-11-01');
INSERT INTO Kurse (kurs_id, kurs_name, lehrer_name) VALUES
(1, 'Mathematik', 'Schmidt'),
(2, 'Deutsch', 'Müller'),
(3, 'Biologie', 'Wagner'),
(4, 'Chemie', 'Schmidt');
INSERT INTO Einschreibung (einschreibung_id, schueler_id, kurs_id, einschreibedatum) VALUES
(1, 1, 1, '2023-09-01')
(2, 1, 2, '2023-09-01'),
(3, 2, 1, '2023-09-01'), 
(4, 3, 3, '2023-09-01'),  
(5, 4, 4, '2023-09-01');  

So sehen die SQL Tabellen aus (in Tabell Format):

Schueler:

schueler_id vorname nachname geburtsdatum
1 Max Muster 2005-04-15
2 Anna Beispiel 2006-05-20
3 Tom Schneider 2004-08-12
4 Lisa Müller 2005-11-01

Kurse:

kurs_id kurs_name lehrer_name
1 Mathematik Schmidt
2 Deutsch Müller
3 Biologie Wagner
4 Chemie Schmidt

Einschreibung:

einschreibung_id schueler_id kurs_id einschreibedatum
1 1 1 2023-09-01
2 1 2 2023-09-01
3 2 1 2023-09-01
4 3 3 2023-09-01
5 4 4 2023-09-01
Note

Jetzt wissen wir wie man ein Datenbank erstellt und wie man Tabellen erstellt.
Nun.... Wie lesen kriegen wir die Werten ?

Das lernen wir gleich 😊

Tabellen bearbeiten - ALTER

Info

Mit SQL ALTER kannst du die Struktur einer bereits existierenden SQL Tabelle ändern.

Du kannst SQL Spalten hinzufügen, entfernen, umbenennen oder deren Datentyp ändern.

Spalte hinzufügen

ALTER TABLE Schueler 
ADD email VARCHAR(100);
Unsere Schueler-Tabelle bekommt jetzt eine neue Spalte "email":
schueler_id vorname nachname geburtsdatum email
1 Max Muster 2005-04-15 NULL
2 Anna Beispiel 2006-05-20 NULL
3 Tom Schneider 2004-08-12 NULL
4 Lisa Müller 2005-11-01 NULL

Spalte entfernen

ALTER TABLE Schueler 
DROP COLUMN email;

Spalte umbenennen

ALTER TABLE Schueler 
RENAME COLUMN vorname TO first_name;

Datentyp ändern

ALTER TABLE Schueler 
MODIFY nachname VARCHAR(75);
Bei SQL ALTER solltest du vorsichtig sein! Änderungen an der Tabellenstruktur können Daten verloren gehen lassen. Mache immer ein Backup bevor du ALTER verwendest.
SQL ALTER ist besonders nützlich wenn deine SQL Datenbank bereits produktiv läuft und du nachträglich Änderungen brauchst.

Diese Ergänzung fügt sich nahtlos in deine bestehende SQL-Notiz ein und folgt deinem Stil mit praktischen Beispielen und der gleichen Formatierung.

Werten anpassen / updaten

Mit SQL UPDATE kannst du bereits existierende Daten in einer SQL Tabelle ändern.

Du bearbeitest die Werte in den SQL Spalten, ohne neue SQL Zeilen hinzuzufügen.

UPDATE Schueler 
SET vorname = 'Maximilian' 
WHERE schueler_id = 1;
Vorher:
schueler_id vorname nachname geburtsdatum
1 Max Muster 2005-04-15
2 Anna Beispiel 2006-05-20
Nachher:
schueler_id vorname nachname geburtsdatum
1 Maximilian Muster 2005-04-15
2 Anna Beispiel 2006-05-20

Mehrere Spalten gleichzeitig ändern

UPDATE Schueler 
SET vorname = 'Maximilian', 
    nachname = 'Mustermann' 
WHERE schueler_id = 1;

Alle Zeilen ändern

UPDATE Kurse 
SET lehrer_name = 'Neu';
Ohne SQL WHERE wird ALLES geändert! Immer WHERE verwenden, außer du willst wirklich alle SQL Zeilen ändern.
SQL UPDATE ändert nur existierende Daten. Für neue Daten nutze SQL INSERT.

Werten löschen / entfernen

Mit SQL DELETE kannst du komplette SQL Zeilen aus einer SQL Tabelle entfernen.

Du löschst ganze Datensätze, nicht nur einzelne SQL Spalten.

DELETE FROM Schueler 
WHERE schueler_id = 1;
Vorher:
schueler_id vorname nachname geburtsdatum
1 Max Muster 2005-04-15
2 Anna Beispiel 2006-05-20
3 Tom Schneider 2004-08-12
Nachher:
schueler_id vorname nachname geburtsdatum
2 Anna Beispiel 2006-05-20
3 Tom Schneider 2004-08-12

Mehrere Zeilen löschen

DELETE FROM Schueler 
WHERE YEAR(geburtsdatum) < 2005;

Alle Zeilen löschen

DELETE FROM Kurse;
Ohne SQL WHERE wird ALLES gelöscht! Die SQL Tabelle bleibt bestehen, aber komplett leer.
SQL DELETE löscht komplette Datensätze. Für einzelne SQL Spalten nutze SQL UPDATE mit NULL.

Werte aus den Tabellen extrahieren

Bevor wir anfangen, ist es wichtig zu verstehen, wie SQL unter der Haube funktioniert.

Es ist dir wahrscheinlich aufgefallen, dass SQL mit SQL Tabellen arbeitet.
Jede SQL Tabelle hat ihre eigenen SQL Spalten (Variablen) und kann mit SQL SELECT und SQL FROM abgefragt werden.

SELECT *
FROM Tabellename;

In unser Bsp wurde etwas so aussehen:

SELECT *
FROM Schueler;
schueler_id vorname nachname geburtsdatum
1 Max Muster 2005-04-15
2 Anna Beispiel 2006-05-20
3 Tom Schneider 2004-08-12
4 Lisa Müller 2005-11-01

Es ist das IF in SQL.

Alle Schüler, die vor 2005 geboren sind:

SELECT vorname, nachname, geburtsdatum
FROM Schueler
WHERE geburtsdatum <= '2005-12-31';

ODER

SELECT vorname, nachname, geburtsdatum
FROM Schueler
WHERE YEAR(geburtsdatum) <= 2005;

Info

Jetzt, dass du die Grundlage über SQL gelernt hast.
Es ist Zeit auf die Vertiefung an den Thema.

Ab hier wirst du bestimmten Anweisungen, Syntax und noch viel mehr.

SQL Algorithmus

Es gibt unendlich viele Wege, um eine Aufgabe in SQL zu lösen.
Ich zeige dir, wie ich es immer mache.

Patient:

patient_ID first_name last_name birthdate
1 Max Müller 1980-01-15
2 Maria Doe 1975-09-10
3 Lux Schmitz 1992-05-22
Weight:
weight_ID patient_ID date kg
1 1 2024-10-10 82.5
2 1 2024-11-15 80.0
3 2 2024-10-05 68.4
4 3 2024-10-12 90.2
Aufgabe

Erstelle eine SQL-Abfrage, die den Vornamen, Nachnamen, das Datum und das Gewicht (kg) jedes Patienten anzeigt.

  1. Welche SQL Spalten sind hier gefragt ?

    Vorname, Nachname, Datum und KG

    Deise füge ich in den SQL SELECT ein.

SELECT Patient.first_name, Patient.last_name, Weight.date, Weight.kg
patient_ID first_name last_name birthdate
1 Max Müller 1980-01-15
2 Maria Doe 1975-09-10
3 Lux Schmitz 1992-05-22
weight_ID patient_ID date kg
1 1 2024-10-10 82.5
2 1 2024-11-15 80.0
3 2 2024-10-05 68.4
4 3 2024-10-12 90.2
  1. Welchen Tabellen werden hier benötigen?

    Patient und Weight

    Diese füge ich in den SQL FROM ein.

SELECT Patient.first_name, Patient.last_name, Weight.date, Weight.kg
FROM Patient, Weight
  1. Welchen Bedingungen müssen erfühlen werden?

    Bei diese Aufgabe, müssen die patient_ID und weight_ID übereinstimmen.

    Diese Bedingung kommt in den SQL WHERE.

SELECT Patient.first_name, Patient.last_name, Weight.date, Weight.kg
FROM Patient, Weight
WHERE Patient.patient_ID = Weight.patient_ID; 
und das war's!!!

JOINs

Wir haben gelernt, dass man mit SQL FROM und SQL WHERE eine Verbindung zwischen SQL Tabelle herstellen kann, indem man die Primärschlüssel verwendet, um nur die relevanten Datensätze zu filtern.

Im Vergleich dazu ermöglicht ein INNER JOIN eine klarere und effizientere Methode zur Verknüpfung von Tabellen, indem die Beziehung zwischen ihnen explizit definiert wird, wodurch die Abfrage lesbarer und die Verarbeitungsgeschwindigkeit optimiert wird.

JOINs in SQL sind nur da, um SQL Tabelle zu verbinden.
Es gibt natürlicherweise andere Wege, um das zu machen, man verwendet aber JOIN, um die Übersichtlichkeit nicht zu verlieren.

Mit JOINs kann man spezifische Verknüpfungen zwischen Tabellen herstellen, wie INNER JOIN, LEFT JOIN und RIGHT JOIN, die es ermöglichen, Daten gezielt auszuwählen und nur die relevanten Zeilen anzuzeigen.
Dies verbessert nicht nur die Lesbarkeit der Abfragen, sondern auch die Effizienz, da nur die notwendigen Daten verarbeitet werden.
Durch die Verwendung von JOINs wird die Datenbankabfrage klar strukturiert, was die Wartung und das Verständnis der Abfragen erleichtert.

INNER JOIN

LEFT JOIN

RIGHT JOIN

GROUP BY

Befehl wird verwendet um SQL Zeilen zu gruppieren die gleiche Werte in bestimmten SQL Spalten haben. Oft mit Aggregatfunktionen wie COUNT, SUM, AVG verwendet.

-- Grundlegende Gruppierung
SELECT Spalte_Name, COUNT(*)
FROM Tabell_Name
GROUP BY Spalte_Name;
-- Mit mehreren Spalten
SELECT Spalte1, Spalte2, COUNT(*)
FROM Tabell_Name
GROUP BY Spalte1, Spalte2;
-- Mit Aggregatfunktionen
SELECT lehrer_name, COUNT(*) as anzahl_kurse
FROM Kurse
GROUP BY lehrer_name;
GROUP BY fasst gleiche Werte zusammen und zählt/berechnet sie.

Having

Befehl wird verwendet um Bedingungen auf gruppierte Daten anzuwenden. Funktioniert wie SQL WHERE, aber für SQL GROUP BY Ergebnisse.

-- Grundlegende HAVING Bedingung
SELECT Spalte_Name, COUNT(*)
FROM Tabell_Name
GROUP BY Spalte_Name
HAVING COUNT(*) > 1;
-- Mit verschiedenen Aggregatfunktionen
SELECT lehrer_name, COUNT(*) as anzahl
FROM Kurse
GROUP BY lehrer_name
HAVING COUNT(*) >= 2;
-- Kombiniert mit WHERE
SELECT spalte, AVG(wert)
FROM tabelle
WHERE bedingung = 'wert'
GROUP BY spalte
HAVING AVG(wert) > 50;
WHERE filtert vor GROUP BY, HAVING filtert nach GROUP BY.