# Cheatsheet
Good links:
https://devhints.io/mysql
https://www.w3schools.com/mysql
## Browsing
```sql
SHOW DATABASES;
USE name;
SHOW TABLES;
SHOW GRANTS FOR customers;
SELECT * FROM tablename; -- Zeight Tabelleninhalte an
SELECT * FROM dbname.tablename
```
SHOW für Liste von verfügbaren Datenbanken/Tabellen,
SELECT für Inhalte einer Tabelle
## Users and Privileges

Rechte entfernen mit REVOKE anstatt GRANT!
```sql
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
-- Localhost bedutet hier das 'user' sich nur von localhost aus mit dem
DROP USER 'user'@'host';
```
## Create/Delete databases
```sql
CREATE DATABASE DatabaseName;
CREATE DATABASE DatabaseName CHARACTER SET utf8;
USE DatabaseName;
DROP DATABASE DatabaseName;
```
DATE
INSERT INTO .. () VALUES (1412-12-12, )
## Datatypes
```sql
INT
DOUBLE
TIME -- Format 'hh:mm:ss'
YEAR -- Format 'yyyy'
DATE -- Format 'YYYY-MM-DD'
DATETIME -- Format 'YYYY-MM-DD hh:mm:ss'
CHAR
VARCHAR(size)
TEXT
BLOB
```
CREATE TABLE users (id INT, name VARCHAR(20));
## Tables
field = Spaltenname
```sql
CREATE TABLE table (field1 type1, field2 type2);
CREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1));
CREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1,field2));
```
Mit constraints
```sql
CREATE TABLE table (field1 type1 constraint1, field2 type2 constraint2);
```
```sql
CREATE TABLE IF NOT EXISTS table;
```
```sql
INSERT INTO table1 (field1, field2) VALUES (value1, value2);
```
```sql
DROP TABLE table;
DROP TABLE IF EXISTS table;
DROP TABLE table1, table2, ...
```
```sql
UPDATE table1 SET field1=new_value1 WHERE condition;
UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... WHERE
table1.id1 = table2.id2 AND condition;
DELETE FROM table1 WHERE condition =
DELETE FROM table1, table2 WHERE table1.id1 =
table2.id2 AND condition
```
## Select
```sql
SELECT * FROM table;
SELECT * FROM table1, table2;
SELECT field1, field2 FROM table1, table2;
SELECT ... FROM ... WHERE condition
SELECT ... FROM ... WHERE condition ORDER BY field1, field2;
SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC;
SELECT ... FROM ... WHERE condition LIMIT 10;
```
Conditions:
LIKE '%irgendetwas%' % matcht beliebigen text
IN z.B 'London' ist IN ('Paris', 'London')
=,!=
<
>
<=
=>
OR
AND
Verknüpfung von Conditions:
(cond1) AND/OR (cond2) ... AND/OR (condN)
## JOIN

## Special keys
```sql
CREATE TABLE table (..., PRIMARY KEY (field1))
CREATE TABLE table (..., PRIMARY KEY (field1, field2))
--Beispiel
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);
```
```sql
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
```
Constraints:
NOT NULL
UNIQUE
PRIMARY KEY = NOT NULL + UNIQUE
FOREIGN KEY
- ForeignKey der Kindstabelle muss in Elterntablle vorhanden sein
- Eintrag in Elterntabelle kann nur gelöscht werden, wenn PrimaryKey nicht in Kindstabelle als ForeignKey vorkomt.
## ER Diagram (Entity-Relation)

# Lernziele
```
use CompanyDB;
/*
Geben Sie Anzahl Mitarbeiter aus, welche in der Abteilung 'Sales' arbeiten.
*/
select count(*) from employees;
-- 107
/*
Geben Sie alle Mitarbeiter mit Nach- und Vornamen, deren Vorname David ist.
*/
SELECT LAST_NAME, FIRST_NAME from employees
where FIRST_NAME ='david';
/*
Geben Sie alle Mitarbeiter mit Namen, Vornamen und Telefonnummer,
deren Telefonnummer mit 079 beginnt, sortiert aufsteigend nach Nachnamen.
*/
select LAST_NAME,FIRST_NAME,PHONE_NUMBER from employees
where PHONE_NUMBER like '%079%'
order by LAST_NAME asc;
/*
Ermitteln Sie den Mitarbeiter (Frau oder Mann), welcher am längsten
in der Firma angestellt ist.
Geben Sie als Resultat die ID, Nachnamen und Vornamen aus.
*/
SELECT min(HIRE_DATE), EMPLOYEE_ID,LAST_NAME,FIRST_NAME,HIRE_DATE from employees;
-- oder
select EMPLOYEE_ID,LAST_NAME,FIRST_NAME, HIRE_DATE from employees
order by HIRE_DATE asc;
/*
Geben Sie alle Mitarbeiter aus, welche in der Abteilung 'Finance' arbeiten.
Als Resultat soll der Nachnamen und Vorname, absteigend sortiert nach Nachnamen
ausgegeben werden.
*/
select e.LAST_NAME, e.FIRST_NAME, d.DEPARTMENT_NAME from employees e
inner join departments d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
where d.DEPARTMENT_NAME = 'Finance'
order by LAST_NAME desc ;
/*
Geben Sie alle Mitarbeiter aus, welche in der Abteilung 'IT', 'Marketing' und 'Human Resources' arbeiten.
Als Resultat soll der Nachnamen, Vorname und Abteilung, aufsteigend sortiert nach Abteilung-ID ausgegeben werden.
*/
select e.LAST_NAME, e.FIRST_NAME, d.DEPARTMENT_NAME from employees e
inner join departments d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
where d.DEPARTMENT_NAME IN ('IT', 'Marketing', 'Human Resources')
order by d.DEPARTMENT_ID asc ;
-- oder
select e.LAST_NAME, e.FIRST_NAME, d.DEPARTMENT_NAME from employees e
inner join departments d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
where d.DEPARTMENT_NAME = 'IT' or d.DEPARTMENT_NAME = 'Marketing' or d.DEPARTMENT_NAME = 'Human Resources'
order by d.DEPARTMENT_ID asc;
/*
Fripp Adam ist ein Manager aus der Abteilung 'Shipping'. Für bevorstehende Lohngespräche mit seinen Mitarbeitern
benötigt er eine Liste seiner Mitarbeiter (aus derselben Abteilung).
Als Resultat soll der Nachnamen, Vorname, Gehalt und das Lohnband mit Min-/Max-Gehalt
absteigend sortiert nach Gehalt ausgegeben werden.
*/
select LAST_NAME, FIRST_NAME, EMPLOYEE_ID from employees
where FIRST_NAME='Adam' and LAST_NAME='Fripp';
select LAST_NAME, FIRST_NAME, SALARY, MIN_SALARY,MAX_SALARY from employees e
inner join jobs j on e.JOB_ID = j.JOB_ID
inner join departments d on e.DEPARTMENT_ID = d.DEPARTMENT_ID
where DEPARTMENT_NAME='shipping' and e.MANAGER_ID = 121
order by e.SALARY desc ;
```
## Verbindung zu Mysql
1. Ich kann den Datenbank Server starten und stoppen.
2. Ich kann überprüfen ob der Datenbank-Server gestartet ist.
Systemeinstellung -> MySQL
## Einfaches Datenbankmanagment von Mysql
1. Ich kann eine Datenbank importieren
2. Ich kann eine Leere Datenbank erstellen und löschen
3. Ich kann einen Benutzer für den Zugriff auf die Datenbank erstellen
4. Ich kann Zugriffsrechte einem Benutzer zuweisen oder entfernen
## Datenbank mit einer Tabelle einrichten
1. Ich kann mit SQl-statments eine leere Datenbank erstellen und löschen
2. Ich kann mit SQL-statments eine leere Datenbank-Tabelle erstellen oder löschen
3. Ich kann mit SQL-statments Daten in eine leere Datenbank-Tabelle korrekt einfügen
## Mit SQL Daten abfragen
## Daten mit SQL mutieren
## Constraints