Files
ihk-ausbildung/1-Ausbildungsjahr/LF3-Datenbanken/LF3-03-SQL-Grundlagen.md

236 lines
4.8 KiB
Markdown

# 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*