Upload
others
View
7
Download
0
Embed Size (px)
Citation preview
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 • 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