Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data...

24
Praktische SQL-Befehle Datenbanksysteme I WiSe 2018/2019 Todor Ivanov DB1 WS2018 1

Transcript of Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data...

Page 1: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Praktische SQL-Befehle

Datenbanksysteme I WiSe 2018/2019

Todor Ivanov

DB1 WS2018 1

Page 2: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Praktische SQL-Befehle

• Nested Selects

• Inserts

• Updates

• Views

• Triggers

• Constraints

• Functions

Voraussetzung: Laptop + MySQL/ MariaDB!

DB1 WS2018 2

Page 3: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

SQL = Structured Query Language• SQL ist für Relationale Datenbanksysteme!

Standards:• SQL-1 von 1986 bzw. 1989 (ca. 120 Seiten) • SQL-2 (SQL92) von 1992 (ca. 580 Seiten)

http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

• SQL-3 (SQL99) von 2000 (ca. 1200 Seiten)• SQL 2003 - ISO/IEC 9075:2003 • SQL:2006 - ISO/IEC 9075-14:2006 (SQL/XML)• SQL:2008 - ISO/IEC 9075:2008• SQL:2011 - ISO/IEC 9075:2011• SQL:2016 - ISO/IEC 9075:2016 (JSON)

DB1 WS2018 3

Page 4: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Einteilung der SQL-Funktionen

SQL-Befehle werden in vier Klassen unterteilt:

• DDL – Data Definition LanguageBefehle zur Definition von Tabellen und anderer Datenstrukturen

• DML – Data Manipulation LanguageBefehle zur Datenmanipulation und Datenabfrage

• DCL – Data Control LanguageBefehle zur Kontrolle der Zugriffberechtigungen

• TCL – Transaction Control Language

Befehle zur Kontrolle von Transaktionen

DB1 WS2018 4

Page 5: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

SQL-Befehle werden in Klassen unterteilt:

DDL – Data Definition Language

DML – Data Manipulation Language

DCL – Data Control Language

TCL – Transaction Control Language

Datenbank erzeugen

CREATE DATABASE

Tabelle abfragen

SELECT

Zugriffsrechte gewähren

GRANTCOMMIT

Tabelle erzeugen

CREATE TABLE

Tabellenzeile löschen

DELETE

Zugriffsrechte entziehen

REVOKEROLLBACK

Tabellenaufbau ändern

ALTER TABLE

Tabellenzeile einfügen

INSERT… SAVEPOINT

Tabelle löschen

DROP TABLE

Tabellendaten ändern

UPDATESET TRANSACTION

Tabelle umbenennen

RENAMEEXPLAIN PLAN START TRANSACTION

Virtuelle Tabelle erzeugen

CREATE VIEWCALL ….

Lösche alle TabellenzeileTRUNCATE ….

….

DB1 WS2018 5

Page 6: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

SQL-Befehle werden in Klassen unterteilt:

DDL – Data Definition Language

DML – Data Manipulation Language

DCL – Data Control Language

TCL – Transaction Control Language

Datenbank erzeugen

CREATE DATABASE

Tabelle abfragen

SELECT

Zugriffsrechte gewähren

GRANTCOMMIT

Tabelle erzeugen

CREATE TABLE

Tabellenzeile löschen

DELETE

Zugriffsrechte entziehen

REVOKEROLLBACK

Tabellenaufbau ändern

ALTER TABLE

Tabellenzeile einfügen

INSERT… SAVEPOINT

Tabelle löschen

DROP TABLE

Tabellendaten ändern

UPDATESET TRANSACTION

Tabelle umbenennen

RENAMEEXPLAIN PLAN START TRANSACTION

Virtuelle Tabelle erzeugen

CREATE VIEWCALL ….

Lösche alle TabellenzeileTRUNCATE ….

….

DB1 WS2018 6

Page 7: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Airport Database: 7 Tables (MySQL Workbench View)

DB1 WS2018 7

Page 8: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Select Syntax (MySQL https://dev.mysql.com/doc/refman/8.0/en/select.html )

DB1 WS2018 8

Page 9: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Select-Befehl (1)

• Geben Sie alle Flüge nach Düsseldorf Flüghafen (EDDL) sortiert nachZeit aus.

DB1 WS2018 9

Page 10: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Select-Befehl (1)

• Geben Sie der nächstmögliche Flüge nach Düsseldorf Flüghafen(EDDL) aus.

select flightexecution.FlightNo, flightexecution.DepartureDateAndTimeUTC, airport.AirportName

from flightexecution, airport

where flightexecution.ICAO_Code_Destination = 'EDDL'

and airport.ICAO_Code = 'EDDL‘

order by flightexecution.DepartureDateAndTimeUTC;

DB1 WS2018 10

Page 11: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Select-Befehl (2)

• Geben Sie ID, Vorname und Nachname der Kunden aus, die insgesamt (in der Summe über alle Reservierungen hinweg) genau zwei Sitzplätze reserviert haben. Geben Sie zur Überprüfung zusätzlich die Anzahl der reservierten Plätze aus.

DB1 WS2018 11

Page 12: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Select-Befehl (2)

• Geben Sie ID, Vorname und Nachname der Kunden aus, die insgesamt (in der Summe über alle Reservierungen hinweg) genau zwei Sitzplätze reserviert haben. Geben Sie zur Überprüfung zusätzlich die Anzahl der reservierten Plätze aus.

SELECT c.firstname AS Vorname, c.lastname AS Nachname, r.customerid AS KundenID, SUM(r.NoReservedSeats) AS ReservierteSitze

FROM reservation r, customer c

WHERE r.customerid = c.id

GROUP BY r.customerid

HAVING SUM(r.NoReservedSeats) = 2;

DB1 WS2018 12

Page 13: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Select-Befehl (3)

• Geben Sie die Flugnummer und die Anzahl aller reservierten Sitze für diese Flugnummer aus.

DB1 WS2018 13

Page 14: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Select-Befehl (3)

• Geben Sie die Flugnummer und die Anzahl aller reservierten Sitze für diese Flugnummer aus.

SELECT DISTINCT r.FlightNo,

(SELECT

SUM(rv.NoReservedSeats)

FROM reservation rv

WHERE rv.FlightNo = r.FlightNo)

AS AnzahlReservierteSitze

FROM reservation r;

DB1 WS2018 14

Page 15: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Update Syntax (MySQL https://dev.mysql.com/doc/refman/8.0/en/update.html)

DB1 WS2018 15

Page 16: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Update-Befehl (1)

• Die Flugdauer von Flug IBE1684 nach Flughafen Oslo-Gardermoen soll nach 140 Minuten geändert werden.

DB1 WS2018 16

Page 17: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Update-Befehl (1)

• Die Flugdauer von Flug IBE1684 nach Flughafen Oslo-Gardermoen soll nach 140 Minuten geändert werden.

update flightexecution

set flightexecution.FlightDurationInMinutes = 140

where flightexecution.FlightNo = 'IBE1684';

DB1 WS2018 17

Page 18: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Update-Befehl (2)• Ändern Sie der Startzeit von Flug LH 1167 von 10:30 nach 12:30.

• Was passiert?

• Wie können wir dieses Problem lösen?

DB1 WS2018 18

Page 19: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Referenzielle Integrität in SQL

Delete Actions:

• Cascade: Tupel, die Fremdschlüssel enthalten werden auch gelöscht.

• No action: Von Fremdschlüssel abhängige Tupel dürfen nicht gelöscht werden.

• Set null: Fremdschlüssel wird auf „NULL“ gesetzt.

• Set default: Fremdschlüssel wird auf einen DefaultWert gesetzt.

Anmerkung:Die gleichen Actions können analog auch für Update Actions verwendet werden.

DB1 WS2018 19

Page 20: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Update-Befehl (2)

• Ändern Sie der Startzeit von Flug LH 1167 von 10:30 nach 12:30.

ALTER TABLE airport.reservation

DROP FOREIGN KEY `reservation_ibfk_2`;

ALTER TABLE airport.reservation

add CONSTRAINT `reservation_ibfk_2`

FOREIGN KEY (`FlightNo`, `DepartureDateAndTimeUTC`)

REFERENCES `flightexecution` (`FlightNo`, `DepartureDateAndTimeUTC`)

ON DELETE NO ACTION ON UPDATE CASCADE;

DB1 WS2018 20

Page 21: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

Update-Befehl (2)

• Ändern Sie der Startzeit von Flug LH 1167 von 10:30 nach 12:30.

update flightexecution

set flightexecution.DepartureDateAndTimeUTC = '2018-12-31 12:30:45' where flightexecution.FlightNo = 'LH1167';

DB1 WS2018 21

Page 22: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

SQL-Online-Tutorial

• http://sqlzoo.net/

Page 23: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

SQL Online Tutorial • Anfragen können interaktiv ausgeführt werden.

Page 24: Praktische SQL-Befehle · 2018. 11. 29. · SQL-Befehle werden in Klassen unterteilt: DDL –Data Definition Language DML –Data Manipulation Language DCL –Data Control Language

SQL – Web Links

• SQL Tutorial (deutsch): http://www.sqltutorial.de/

• SQL Tutorial (englisch): http://www.w3schools.com/sql/

• SQL Online ausprobieren: http://sqlzoo.net/

• SQL Operationen https://tinohempel.de/info/info/datenbank/sql.htm