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

Post on 29-Sep-2020

7 views 0 download

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

Praktische SQL-Befehle

Datenbanksysteme I WiSe 2018/2019

Todor Ivanov

DB1 WS2018 1

Praktische SQL-Befehle

• Nested Selects

• Inserts

• Updates

• Views

• Triggers

• Constraints

• Functions

Voraussetzung: Laptop + MySQL/ MariaDB!

DB1 WS2018 2

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

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

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

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

Airport Database: 7 Tables (MySQL Workbench View)

DB1 WS2018 7

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

DB1 WS2018 8

Select-Befehl (1)

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

DB1 WS2018 9

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

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

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

Select-Befehl (3)

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

DB1 WS2018 13

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

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

DB1 WS2018 15

Update-Befehl (1)

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

DB1 WS2018 16

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

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

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

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

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

SQL-Online-Tutorial

• http://sqlzoo.net/

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

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