236 lines
4.8 KiB
Markdown
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*
|