Termin 12: Datenbanksysteme (2) Einführung in SQL Grundlagen der Informatik Sommersemester 2006 Prof. Bernhard Jung Übersicht 1. 2. 3. 4. Einführung SQL Datenbankanfragen mit SQL (select … from … where) Erzeugen, Ändern und Löschen von Tabelleninhalten mit SQL Erzeugen, Ändern und Löschen von Tabellen mit SQL (DDL) Hauptlernziele • Die Umsetzung der Relationenalgebra in SQL verstehen • Fähigkeit, einfachere Datenbankabfragen u. andere Datenbankoperationen in SQL zu formulieren Literatur Gumm & Sommer. Einführung in die Informatik. Oldenbourg. 2004. Lehrhilfe SQL. Institut für Informatik, TU Bergakademie Freiberg. - erhältlich im Institut für Informatik, Fr. Schüttauf, für 1,00 € Prof. B. Jung Grundlagen der Informatik, SS 2006 1 Datenbanksysteme - Statistiken (1) Markt für Datenbanksysteme (nach www.idc.com) 2003: $13.6 Milliarden 2008: ca $20 Milliarden Linux / Open Source Databanken 2003: $299 Millionen Markt-Anteile (2004; IDC / Gartner Dataquest) Oracle: 41.3% IBM: 30.6% Microsoft: 13.4% Prof. B. Jung / 33.9% / 34.2 % / 20.0% Grundlagen der Informatik, SS 2006 Datenbanksysteme – Statistiken (2) Prof. B. Jung Grundlagen der Informatik, SS 2006 2 Datenbanksysteme – Statistiken (3) from http://www.informationweek.com/story/showArticle.jhtml?articleID=23901139 Prof. B. Jung Grundlagen der Informatik, SS 2006 Wdh - Beispielrelationen 1 Assistent: Persnr Name Fachgebiet Boss 3002 3003 3004 3005 3006 3007 Ideenlehre Syllogistik Sprachtheorie Planetenbewegung Keplersche Gesetze Gott und Natur 2125 2125 2126 2127 2127 2134 Platon Aristoteles Wittgenstein Rhetikus Newton Spinoza Student: Professor: Persnr 2125 2126 2127 2133 2134 2136 2137 Name Sokrates Russel Kopernikus Popper Augustinus Curie Kant Prof. B. Jung Matrnr Name 24002 25403 26120 26830 27550 28106 29120 29555 Xenokrates Jonas Fichte Aristoxenos Schopenhauer Carnap Theophrastos Feuerbach Sem Rang Raum C4 C4 C3 C3 C3 C4 C4 226 232 310 52 309 36 7 18 12 10 8 6 3 2 2 Grundlagen der Informatik, SS 2006 3 Wdh - Beispielrelationen 2 Vorlesung: voraussetzen: Vorlnr Titel SWS 5001 5041 5043 5049 4052 5052 5216 5259 5022 4630 4 4 3 2 4 3 2 2 2 4 Grundzüge Ethik Erkenntnistheorie Gewäsch Logik Wissenschaftstheorie Bioethik Der Wiener Kreis Glaube und Wissen Die 3 Kritiken Leser 2137 2125 2126 2125 2125 2126 2126 2133 2134 2137 hören: Vorgänger Nachfolger Matrnr Vorlnr 5001 5001 5001 5041 5043 5041 5052 5041 5043 5049 5216 5052 5052 5259 26120 27550 27550 28106 28106 28106 28106 29120 29120 29120 29555 25403 29555 5001 5001 4052 5041 5052 5216 5259 5001 5041 5049 5022 5022 5001 prüfen: Prof. B. Jung Matrnr Vorlnr Persnr Note 28106 25403 27550 5001 5041 4630 2126 2125 2137 1 2 2 Grundlagen der Informatik, SS 2006 Was ist SQL? SQL = Structured Query Language SQL ist Standardsprache für relationale Datenbankmanagementsysteme (DBMS) SQL stellt Möglichkeiten bereit zur Definition der Struktur von Datenbanken (Datendefinitionssprache; DDL) Manipulation der Datenbankinhalte (Datenmanipulationssprache; DML) i.Ggs. zu imperativen oder objekt-orientierten Programmiersprachen (wie Python, Java, C++, C#, …) SQL ist eine Implementierung der Relationenalgebra aber kleinere Unterschiede anfragen, einfügen, löschen, ändern von Datensätzen SQL ist eine deklarative Programmiersprache z.B. Ordnung der Tabellenzeilen in SQL z.B. Duplikate von Tabellenzeilen in SQL erlaubt Bekannte auf SQL basierende DBMS: Oracle, IBM DB2, Microsoft SQL Server, Access, Ingres, MySQL, … Prof. B. Jung Grundlagen der Informatik, SS 2006 4 SQL Historie ca. 1975 1981 1986 1987 SEQUEL, Vorläufer von SQL wird für das Projekt System R von IBM entwickelt. SQL gelangt mit SQL/Data Systems erstmals durch IBM auf den Markt. SQL1 wird von ANSI als Standard verabschiedet. SQL1 wird jetzt auch von ISO als Standard verabschiedet und 1989 nochmals überarbeitet. 1992 1999 2003 Der SQL2 bzw. SQL-92 Standard wird von der ISO verabschiedet. SQL3 bzw. SQL:1999 wird verabschiedet. SQL:2003 wird von der ISO als Nachfolger des SQL:1999 Standards verabschiedet. Prof. B. Jung Grundlagen der Informatik, SS 2006 Relationale Datenbanksprache SQL Datenbanksprache (DL): - Datendefinitionssprache (DDL) - Datenmanipulationssprache (DML): - Änderungssprache - Anfragesprache Datenmanipulationssprache / Anfrage Standardanfrageschema: select . . . from . . . where . . . all / any / in / exists group by . . . union . . . order by . . . Prof. B. Jung ... Projektion Relation / Produkt / Join Selektion / Differenz / Durchschnitt Division / Quantifizierung Aggregation Vereinigung Sortierung Grundlagen der Informatik, SS 2006 5 SQL – Einfache Anfragen Einfache Anfragen: select Spalte(n) from Tabelle(n) where Bedingung; Anzeigen von Spalte(n) der Zeilen aus Tabelle(n), die einer Bedingung genügen Umfasst Projektion, Selektion und Join der Relationenalgebra! Anfragen über einer Tabelle: select * from Assistent; select distinct SWS from Vorlesung where Leser = 2125 and not TITEL = 'Ethik'; select Matrnr, Name, Sem from Student where Sem < 5; Prof. B. Jung Grundlagen der Informatik, SS 2006 Spaltenauswahl Projektion in Relationenalgebra Spaltenname, Spaltenname,Konstante Konstante ** distinct, distinct,all all SQL> select Boss from Assistent; BOSS --------2125 2125 2126 2127 2127 2134 Auswahl von Spalten, Konstanten Auswahl aller Spalten Duplikatebeseitigung SQL> select distinct Boss from Assistent; BOSS --------2125 2126 2127 2134 gleiches Ergebnis wie bei: select all Boss from Assistent; Prof. B. Jung Grundlagen der Informatik, SS 2006 6 Spaltenauswahl Spaltenname, Spaltenname,Konstante Konstante ** distinct, distinct,all all Auswahl von Spalten, Konstanten Auswahl aller Spalten Duplikatebeseitigung SQL> select 'Guten Tag, ', Name from Assistent; 'GUTENTAG ----------Guten Tag, Guten Tag, Guten Tag, Guten Tag, Guten Tag, Guten Tag, NAME -----------------------------Platon Aristoteles Wittgenstein Rhetikus Newton Spinoza Prof. B. Jung Grundlagen der Informatik, SS 2006 Zeilenauswahl Selektion in Relationenalgebra SQL: durch Formulierung von Bedingungen in WHERE-Klausel: Spaltenname, Spaltenname,Konstante Konstante =, =,!=, !=,<>, <>,>, >,>=, >=,<, <,<= <= and, or, not and, or, not between between... ...and and like like’...%..._...’ ’...%..._...’ is isnull, null,is isnot notnull null Angabe von Spalten und Konstanten Vergleichsoperator logische Verknüpfung Bereichsangabe Zeichenmuster Leerwert select Titel from Vorlesung where Leser = 2125 and not TITEL = 'Ethik'; Prof. B. Jung Grundlagen der Informatik, SS 2006 7 Zeilenauswahl - Beispiele SQL> select * from Vorlesung where Leser = 2125; VORLNR --------5041 5049 4052 TITEL SWS LESER ------------------------------- --------- --------Ethik 4 2125 Gewäsch 2 2125 Logik 4 2125 SQL> select Titel from Vorlesung where Leser = 2125; TITEL --------------------------Ethik Gewäsch Logik Prof. B. Jung SQL> select Titel from Vorlesung where Leser = 2125 and not Titel = 'Ethik'; TITEL ------------------------------Gewäsch Logik Grundlagen der Informatik, SS 2006 SQL – Anfragen über mehrere Tabellen Join in Relationenalgebra in Beispielen jeweils Equi-Join (d.h. Gleichheit von Attributwerten): select Name, Titel from Professor, Vorlesung where Persnr = Leser and Titel = 'Logik'; Join select Name, Titel from Student, hören, Vorlesung where Student.Matrnr = hören.Matrnr and hören.Vorlnr = Vorlesung.Vorlnr; select s.Name, v.Titel from Student s, hören h, Vorlesung v where s.Matrnr = h.Matrnr and h.Vorlnr = v.Vorlnr; Prof. B. Jung Welche Professoren lesen 'Logik'? Welche Studenten hören welche Vorlesung? Welche Studenten hören welche Vorlesung? (alternative Syntax) Grundlagen der Informatik, SS 2006 8 Ergebnisse der Anfragen der vorangehenden Folie NAME TITEL ------------------------------ -----------------------Sokrates Logik NAME -----------------------------Jonas Fichte Schopenhauer Schopenhauer Carnap Carnap Carnap Theophrastos Theophrastos Theophrastos Feuerbach Feuerbach Prof. B. Jung TITEL ------------------------------Glaube und Wissen Grundzüge Logik Grundzüge Ethik Wissenschaftstheorie Der Wiener Kreis Grundzüge Ethik Gewäsch Grundzüge Glaube und Wissen Grundlagen der Informatik, SS 2006 Geschachtelte Anfragen select * from Assistent where Boss = (select Persnr from Professor where Name = 'Sokrates'); Wer sind die Assistenten von Sokrates? Ergebnistabelle PERSNR --------3002 3003 Prof. B. Jung NAME -------------------Platon Aristoteles FACHGEBIET BOSS ------------------------------ --------Ideenlehre 2125 Syllogistik 2125 Grundlagen der Informatik, SS 2006 9 Geschachtelte Anfragen Welche Prüfungen haben mit einer überdurchschnittlichen Note geendet? select * from prüfen where Note < (select avg (Note) from prüfen); Ergebnistabelle MATRNR VORLNR PERSNR NOTE --------- --------- --------- --------28106 5001 2126 1 Prof. B. Jung Grundlagen der Informatik, SS 2006 Mengenoperationen Voraussetzung: Gleichförmigkeit der verknüpften Tabellen gleiche Anzahl und gleicher Typ der Attribute union union (intersect, (intersect,except) except) Vereinigung von Tabellen (Durchschnitt, Differenz) (select Name from Assistent) union (select Name from Professor); Prof. B. Jung Namen von Assistenten und Professoren Grundlagen der Informatik, SS 2006 10 Mengenoperationen Welche Vorlesungen werden von Studenten gehört? (select Vorlnr from Vorlesung) intersect (select Vorlnr from hören); Ergebnistabelle: VORLNR --------4052 5001 5022 5041 5049 5052 5259 Prof. B. Jung Grundlagen der Informatik, SS 2006 Mengenoperationen Welche Vorlesungen werden von keinem Studenten gehört? oder: Für welche Vorlesungen sind keine Studierenden registriert? Nach SQL Standard (klappt nicht in Oracle 8): (select Vorlnr from Vorlesung) except (select Vorlnr from hören); In Oracle 8: Ergebnistabelle: select Vorlnr from Vorlesung where Vorlnr not in (select Vorlnr from hören); Prof. B. Jung VORLNR --------5043 5216 4630 Grundlagen der Informatik, SS 2006 11 Quantifizierung all, all,any, any,some some in, in,not notin in exists, exists,not notexists exists für alle, für ein Element von, nicht Element von es existiert ein, es existiert kein Welche Studenten studieren am längsten? select Name from Student where Sem >= all (select Sem from Student); (Æ Xenokrates mit 18 Semestern) Prof. B. Jung Grundlagen der Informatik, SS 2006 Quantifizierung Welche Professoren halten (dieses Semester) keine Vorlesung? Sämtliche Informationen über Vorlesungen 5001 bzw 5041 Prof. B. Jung select Name from Professor where not exists (select * from Vorlesung where Leser = Persnr); select * from Vorlesung where Vorlnr in (5001, 5041); Grundlagen der Informatik, SS 2006 12 Gruppierungsfunktion count, count,sum, sum,avg, avg,max, max,min min Ausführen von Operationen auf Tupelmengen Durchschnittliche Semesterzahl der Studenten select avg (Sem) from Student; Beste bzw. schlechteste Note in Kursen 5001 oder 5041 select min (Note), max (Note) from prüfen where Vorlnr = 5001 or Vorlnr = 5041; Anzahl der Tupel der Tabelle hören; d.h. Anzahl der registrierten Hörer für alle Vorlesungen select count (*) from hören; Prof. B. Jung Grundlagen der Informatik, SS 2006 Gruppierung group groupby bySpalte(n) Spalte(n) select Leser, sum (Sws) from Vorlesung group by Leser; Summe SWS pro Leser Ergebnistabelle: Prof. B. Jung Gruppierung der Zeilen der Ergebnistabelle LESER SUM(SWS) --------- --------2125 10 2126 8 2133 2 2137 10 Grundlagen der Informatik, SS 2006 13 Gruppierung group groupby bySpalte(n) Spalte(n) having havingBedingung Bedingung Gruppierung der Zeilen der Ergebnistabelle und Ausführung von Gruppierungsfunktionen Summe SWS pro Leser -aber nur für Leser, deren Veranstaltungen insgesamt einen Umfang von mindestens 6 SWS haben select Leser, sum (Sws) from Vorlesung group by Leser having sum (Sws) >= 6; Ergebnistabelle: LESER SUM(SWS) --------- --------2125 10 2126 8 2137 10 Prof. B. Jung Grundlagen der Informatik, SS 2006 Gruppierung Pesrnr, Name, Summe SWS der C4-Professoren, die im Umfang von mindestens 8 SWS Vorlesungen geben select Leser, Name, sum (Sws) from Vorlesung, Professor where Leser = Persnr and Rang = 'C4' group by Leser, Name having sum(Sws) >= 8; Ergebnistabelle: LESER --------2125 2126 2137 Prof. B. Jung NAME SUM(SWS) ------------------------------ --------Sokrates 10 Russel 8 Kant 10 Grundlagen der Informatik, SS 2006 14 Sortierung order orderby by Spalte(n) Spalte(n) asc / desc asc / desc Ausgabe der Studierendendatensätze, geordnet nach Matrikelnr Festlegen der Sortierreihenfolge der Ergebnistabelle (aufsteigend bzw. absteigend) select Name, Matrnr from Student order by Matrnr; Auflistung der Professoren, geordnet nach Rang (lexikalisch absteigend – d.h. C4 vor C3), dann alphabetisch select Persnr, Name, Rang from Professor order by Rang desc, Name asc; Prof. B. Jung Grundlagen der Informatik, SS 2006 Sortierung – Ergebnisse der Anfragen auf voriger Folie select Name, Matrnr from Student order by Matrnr; select Persnr, Name, Rang from Professor order by Rang desc, Name asc; NAME -----------------Xenokrates Jonas Fichte Aristoxenos Schopenhauer Carnap Theophrastos Feuerbach PERSNR --------2136 2137 2126 2125 2134 2127 2133 Prof. B. Jung MATRNR --------24002 25403 26120 26830 27550 28106 29120 29555 NAME ------------------Curie Kant Russel Sokrates Augustinus Kopernikus Popper RA -C4 C4 C4 C4 C3 C3 C3 Grundlagen der Informatik, SS 2006 15 Elementfunktion +, +,-,-,*,*,/,/,... ... char_length, char_length,substring, substring,||,||,...... current_time, current_date, current_time, current_date,+, +,-,-,*,*,... ... arithmetische Funktion Zeichenkettenfunktion Datumsfunktion select Matrnr, Note - 1 from prüfen where Vorlnr = 4630; Um 1.0 verbesserte Noten für Kurs 4630 select Name, Rang || '-Professur' from Professor; Prof. B. Jung NAME RANG||'-PROF ------------------------------ -----------Sokrates C4-Professur Russel C4-Professur Kopernikus C3-Professur Popper C3-Professur Augustinus C3-Professur Curie C4-Professur Kant C4-Professur Grundlagen der Informatik, SS 2006 Elementfunktion Ausgabe von Studentendaten mit Zeitpunkt des Zugriffs auf Datensätze select Matrnr, Sem, current_time from Student; MATRNR SEM CURRENT_T --------- --------- --------24002 18 00:34:50 25403 12 00:34:50 26120 10 00:34:50 26830 8 00:34:50 27550 6 00:34:50 28106 3 00:34:50 29120 2 00:34:50 29555 2 00:34:50 Prof. B. Jung Grundlagen der Informatik, SS 2006 16 Datenmanipulationssprache / Änderung Standard-Änderungsoperationen: insert . . . update . . . delete . . . Prof. B. Jung Einfügen Ändern Löschen Grundlagen der Informatik, SS 2006 Einfügen von Datensätzen insert insertinto intoTabelle Tabelle values valuesTupel; Tupel; Einfügen von Zeilen in eine existierende Tabelle insert insertinto intoTabelle Tabelle Anfrage; Anfrage; Beispiele: Einfügen neuer Datensätze insert into Professor values (2136, 'Einstein', 'C4', null); insert into Student (Matrnr, Name) values (25000, 'Goethe'); Prof. B. Jung Werte für alle Spalten Werte für benannte Spalten (andere Spalten: Default-Werte) Grundlagen der Informatik, SS 2006 17 Einfügen von Datensätzen Alle Studenten mit mehr als 15 Semestern Studienzeit zu Assistenten befördern insert into Assistent (Persnr, Name) select Matrnr, Name from Student where Sem > 15; Prof. B. Jung Grundlagen der Informatik, SS 2006 Ändern von Datensätzen update updateTabelle Tabelle set setWerteänderung Werteänderung where whereBedingung Bedingung Ändern von Zeilen in einer existierenden Tabelle Alle Vorlesungen auf 2 SWS setzen Semesteranzahl von allen Studenten um 1 erhöhen Prof. Russel zieht in Raum 213 ein Daten zur Vorlesung 5001 aktualisieren update Vorlesung set Sws = 2; update Student set Sem = Sem + 1; update Professor set Raum = 213 where name = 'Russel'; update Vorlesung set Titel = 'Grundlagen', Sws = 3, Leser = 2125 where Vorlnr = 5001; Prof. B. Jung Grundlagen der Informatik, SS 2006 18 Löschen von Datensätzen delete deletefrom fromTabelle Tabelle where whereBedingung Bedingung Löschen von Zeilen in einer existierenden Tabelle Alle Prüfungsdatensätze löschen Datensatz zur Vorlesung 5001 löschen Datensätze der Studenten über 15. Semester löschen delete from Student where Sem >= 15; Vorlesungen, die andere Vorlesungen voraussetzen, sollen ihrerseits keine Voraussetzung für weitere Vorlesungen sein delete from voraussetzen where Vorgänger in (select Nachfolger from voraussetzen); delete from prüfen delete from Vorlesung where Vorlnr = 5001; Prof. B. Jung Grundlagen der Informatik, SS 2006 Datendefinitionssprache (DDL) Standarddefinitionsoperationen: Erzeugen (create), Ändern (alter), Löschen (drop) für: Tabelle (table), Sicht (view), ... und Erteilung (grant) und Entzug (revoke) von Rechten Datentypen: char(n), varchar(n), number(p), number(p,s), date, long, blob, . . . Namen: 1. Zeichen Buchstabe, dann Buchstaben, Ziffern, _ oder $ Prof. B. Jung Grundlagen der Informatik, SS 2006 19 DDL: Erzeugen von Tabellen create createtable tableTabellen-Name Tabellen-Name (Spalten-Name (Spalten-NameTyp, Typ, Spalten-Name Spalten-NameTyp Typnot notnull, null, Spalten-Name Typ not Spalten-Name Typ notnull nullunique, unique, . .. ..).) Definition einer Tabelle mit Spalten und Integritätsbedingungen Beispiele: create table Professor (persnr number (5) not null unique, Name varchar (20) not null, Rang char (2), Raum number (4)); Prof. B. Jung create table voraussetzen (Vorgänger number (5), Nachfolger number (5)); Grundlagen der Informatik, SS 2006 Systemüberblick Server OSToolbox Datenbank Datenbank "Maschine" "Maschine" SQLDDL Datenbank Datenbank entwurf entwurf Beispiele: Microsoft Access Oracle Ingres MySQL Prof. B. Jung SQLDML AnwendungsAnwendungsProgramm ProgrammBB OS-Toolbox evtl. Netzwerk SQL-DML AnwendungsAnwendungsProgramm ProgrammAA OS-Toolbox evtl. Netzwerk Verwaltung Verwaltung Klient Buchungs Buchungs -system -system Klient Grundlagen der Informatik, SS 2006 20