Initial commit: IHK Ausbildung materials
This commit is contained in:
235
1-Ausbildungsjahr/LF3-Datenbanken/LF3-03-SQL-Grundlagen.md
Normal file
235
1-Ausbildungsjahr/LF3-Datenbanken/LF3-03-SQL-Grundlagen.md
Normal file
@@ -0,0 +1,235 @@
|
||||
# 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*
|
||||
Reference in New Issue
Block a user