# 3.3 SQL-Grundlagen ## Was ist SQL? **SQL** (Structured Query Language) ist die Standardsprache für die Kommunikation mit relationalen Datenbanken. ### SQL-Teilsprachen ``` SQL - Kategorien ├── DDL (Data Definition Language) │ ├── CREATE → Objekte erstellen │ ├── ALTER → Objekte ändern │ └── DROP → Objekte löschen ├── DML (Data Manipulation Language) │ ├── SELECT → Daten abfragen │ ├── INSERT → Daten einfügen │ ├── UPDATE → Daten ändern │ └── DELETE → Daten löschen ├── DCL (Data Control Language) │ ├── GRANT → Rechte vergeben │ └── REVOKE → Rechte entziehen └── TCL (Transaction Control Language) ├── COMMIT → Transaktion abschließen ├── ROLLBACK → Transaktion zurücksetzen └── SAVEPOINT → Speicherpunkt ``` --- ## Datentypen ### Numerisch | Datentyp | Beschreibung | Bereich | |----------|-------------|---------| | INT | Ganzzahl | -2 Mrd. bis 2 Mrd. | | DECIMAL(p,s) | Dezimalzahl | p= Stellen, s= Nachkommastellen | | FLOAT | Gleitkommazahl | ~7 Stellen | | DOUBLE | Doppelte Präzision | ~15 Stellen | ### Zeichenketten | Datentyp | Beschreibung | max. Länge | |----------|-------------|-------------| | CHAR(n) | Festlänge | 255 | | VARCHAR(n) | Variable Länge | 65.535 | | TEXT | Langer Text | 65.535+ | | LONGTEXT | Sehr langer Text | 4 GB | ### Datum/Zeit | Datentyp | Beschreibung | |----------|-------------| | DATE | Datum (JJJJ-MM-TT) | | TIME | Zeit (HH:MM:SS) | | DATETIME | Datum + Zeit | | TIMESTAMP | Unix-Zeitstempel | --- ## DDL - Datenbankobjekte erstellen ### Tabelle erstellen (CREATE TABLE) ```sql CREATE TABLE Kunde ( Kunden_ID INT PRIMARY KEY, Vorname VARCHAR(50) NOT NULL, Nachname VARCHAR(50) NOT NULL, E-Mail VARCHAR(100) UNIQUE, Geburtsdatum DATE, Erstellt_AM TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ``` ### Tabelle ändern (ALTER TABLE) ```sql -- Spalte hinzufügen ALTER TABLE Kunde ADD Telefon VARCHAR(20); -- Spalte ändern ALTER TABLE Kunde MODIFY E-Mail VARCHAR(150); -- Spalte löschen ALTER TABLE Kunde DROP COLUMN Telefon; ``` ### Tabelle löschen (DROP TABLE) ```sql DROP TABLE Kunde; ``` --- ## DML - Daten bearbeiten ### Daten einfügen (INSERT) ```sql -- Einzelne Zeile INSERT INTO Kunde (Kunden_ID, Vorname, Nachname, E-Mail) VALUES (1, 'Max', 'Mustermann', 'max@example.com'); -- Mehrere Zeilen INSERT INTO Kunde (Kunden_ID, Vorname, Nachname) VALUES (2, 'Anna', 'Schmidt'), (3, 'Peter', 'Müller'); ``` ### Daten ändern (UPDATE) ```sql -- Ein Datensatz UPDATE Kunde SET E-Mail = 'max.neu@example.com' WHERE Kunden_ID = 1; -- Mehrere Datensätze UPDATE Kunde SET Nachname = 'Meier' WHERE Nachname = 'Müller'; ``` ### Daten löschen (DELETE) ```sql -- Bestimmte Zeilen DELETE FROM Kunde WHERE Kunden_ID = 1; -- Alle Zeilen (Tabelle bleibt) DELETE FROM Kunde; ``` --- ## SELECT - Daten abfragen ### Grundstruktur ```sql SELECT -- Was? Spalten FROM -- Woher? Tabelle WHERE -- Filter Bedingung ORDER BY -- Sortierung Spalte; ``` ### Einfache Abfragen ```sql -- Alle Spalten SELECT * FROM Kunde; -- Bestimmte Spalten SELECT Vorname, Nachname FROM Kunde; -- Mit Alias SELECT Vorname AS 'Vorname', Nachname AS 'Nachname' FROM Kunde; ``` ### WHERE-Klausel ```sql -- Einfache Bedingung SELECT * FROM Kunde WHERE Nachname = 'Mustermann'; -- Vergleichsoperatoren SELECT * FROM Kunde WHERE Alter >= 18; SELECT * FROM Produkt WHERE Preis > 100 AND Preis < 500; -- LIKE (Mustervergleich) SELECT * FROM Kunde WHERE Name LIKE 'M%'; -- beginnt mit M SELECT * FROM Kunde WHERE Name LIKE '%er%'; -- enthält 'er' SELECT * FROM Kunde WHERE Name LIKE '___'; -- genau 3 Zeichen -- IN (in Liste) SELECT * FROM Kunde WHERE Stadt IN ('Berlin', 'Hamburg', 'München'); -- BETWEEN (Bereich) SELECT * FROM Produkt WHERE Preis BETWEEN 100 AND 500; ``` --- ## Übung: SQL-Grundlagen ### Aufgaben 1. Erstelle eine Tabelle "Produkt" mit ID, Name, Preis, Kategorie 2. Füge 3 Produkte ein 3. Ändere den Preis des ersten Produkts auf 99,99 4. Lösche das teuerste Produkt ### Lösung ```sql -- 1. Tabelle erstellen CREATE TABLE Produkt ( Produkt_ID INT PRIMARY KEY, Name VARCHAR(100), Preis DECIMAL(10,2), Kategorie VARCHAR(50) ); -- 2. Daten einfügen INSERT INTO Produkt VALUES (1, 'Laptop', 1299.99, 'Elektronik'), (2, 'Maus', 29.99, 'Zubehör'), (3, 'Tastatur', 79.99, 'Zubehör'); -- 3. Preis ändern UPDATE Produkt SET Preis = 99.99 WHERE Produkt_ID = 1; -- 4. Teuerstes löschen DELETE FROM Produkt WHERE Preis = (SELECT MAX(Preis) FROM Produkt); ``` --- ## Querverweise - [[LF3-02-Datenmodellierung|Zurück: Datenmodellierung]] - [[LF3-04-SQL-Abfragen|Nächstes Thema: SQL-Abfragen]] - [[LF6-04-Sicherheit-Web|Sicherheit: SQL-Injection]] --- *Stand: 2024*