![[sql_merged.pdf]]


SQL Tabellen sind multimengen von tupeln
Duplikate möglich!!!

## SQL Data Definition Language DDL
1. CREATE TABLE: zum Erstellen einer neuen Tabelle 
2. ALTER TABLE: zum Ändern einer bestehenden Tabelle 
3. DROP TABLE: zum Löschen einer Tabelle
[[DDL Data Definition Language SQL]]

## SQL Data Manipulation Language DML
1. INSERT
2. UPDATE
3. DELETE

[[DML Data Manipulation Language SQL]]

## SQL Data Query Language DQL


| SQL        | Argumente          | Relationale Algebra |
| ---------- | ------------------ | ------------------- |
| **SELECT** | Liste von Namen    | $\pi$               |
| **FROM**   | Liste von Tabellen | $\times$            |
| **WHERE**  | Bedingung          | $\sigma$            |

[[DQL Data Query Language SQL]]

## Aggregatfunktionen in SQL

COUNT zählt Anzahl der Zeilen
`SELECT COUNT(*) FROM Tabelle WHERE Bedingung;`

SUM summiert werte einer Spalte
`SELECT SUM(Spalte) FROM Tabelle WHERE Bedingung;`

AVG berechnet Durchschnitt
`SELECT AVG(Spalte) FROM Tabelle WHERE Bedingung;`

MIN gibt kleinsten wert einer spalte zurück
`SELECT MIN(Spalte) FROM Tabelle WHERE Bedingung;`

MAX gibt höchsten Wert einer Spalte zurück
`SELECT MAX(Spalte) FROM Tabelle WHERE Bedingung;`


## GROUP BY
Gruppiert Zeilen basierend auf Werten einer oder mehrerer Spalten
`SELECT Spalte1, AVG(Spalte2) FROM Tabelle GROUP BY Spalte1;`


### HAVING
Filtert Abfragen mit Aggregatfunktion UND Group By
`SELECT Spalte1, COUNT(*) FROM Tabelle GROUP BY Spalte1 HAVING COUNT(*) > 5;`


## ORDER BY
Sortiert Ergebnisse
`SELECT Spalte1, Spalte2 FROM Tabelle ORDER BY Spalte1 ASC, Spalte2 DESC`


## LIMIT OFFSET FETCH

LIMIT < n > um max n Zeilen auszugeben
OFFSET < n > überspringe n Zeilen am Anfang
OFFSET FETCH Bsp.:
`SELECT Spalte1 FROM Tabelle ORDER BY Spalte OFFSET n ROWS FETCH NEXT m ROWS ONLY`



## SQL-INJECTIONS

SQL Code in Eingabefelder einfügen.
Nur wenn eingaben nicht überprüft / gereinigt werden!

Um SQL-Injection-Angriffe zu verhindern, sollten Sie folgende Sicherheitsmaßnahmen ergreifen: 
1. Benutzereingaben validieren: Validieren Sie alle Benutzereingaben, um sicherzustellen, dass sie den erwarteten Datentyp und Format aufweisen. 
2. Parameterisierte Abfragen verwenden: Verwenden Sie Prepared Statements oder Parameterized Queries, um sicherzustellen, dass Benutzereingaben nicht als Teil des SQL-Codes interpretiert werden. 
3. Stored Procedures nutzen: Verwenden Sie Stored Procedures, um den Zugriff auf die Datenbank zu kontrollieren und den Umfang der möglichen Angriffe zu reduzieren. 
4. Least Privilege Prinzip anwenden: Gewähren Sie Ihrer Anwendung nur die minimalen Berechtigungen, die sie benötigt, um auf die Datenbank zuzugreifen. 
5. Escaping von Eingaben: Wenn die Verwendung von Parameterized Queries oder Stored Procedures nicht möglich ist, stellen Sie sicher, dass Benutzereingaben korrekt "escaped" werden, um schädliche Zeichen zu neutralisieren.




## SQL Transaction Control Language TCL
1. BEGIN TRANSACTION
2. COMMIT
3. ROLLBACK
4. SAVEPOINT

[[TCL Transaction Control Language SQL]]


## SQL Data Control Language DCL

1. GRANT
2. REVOKE

### GRANT
`GRANT permission ON object TO user_or_role [WITH GRANT OPTION];`

Berechtigungen z.B.: SELECT, INSERT, UPDATE, DELETE, EXECUTE, ALL PRIVILEGES
WITH GRANT OPTION : Berechtigung, Berechtigungen weiterzugeben

### REVOKE 
`REVOKE [GRANT OPTION FOR]
`permission ON object FROM user_or_role [CASCADE | RESTRICT]`

GRANT OPTION FOR: Nur Berechtigung entziehen, Berechtigungen zu verleihen
CASCADE: Entziehe auch alle abgeleiteten Berechtigungen. Optional
RESTRICT: Entziehe nichts wenn es abgeleitete Berechtigungen gibt. Optional
