MySQL relationales Datenbanksystem

Slides:



Advertisements
Ähnliche Präsentationen
ER-Datenmodell und Abfragen in SQL
Advertisements

Relationale Datenbank MySQL
System J – Compiler – Praktikum: Datenbanksystementwicklung Knut Stolze
MySQL.
Bauinformatik II Softwareanwendungen 1
Allgemeine Technologien II
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Java: Dynamische Datentypen
SQL als Abfragesprache
SQL als Abfragesprache
IS: Datenbanken, © Till Hänisch 2000 CREATE TABLE Syntax: CREATE TABLE name ( coldef [, coldef] [, tableconstraints] ) coldef := name type [länge], [[NOT]NULL],
SQL/XML. © Prof. T. Kudraß, HTWK Leipzig 2 2 Motivation Speicherung von XML in allen großen kommerziellen DBMS vorhanden proprietäre Lösungen für die.
Otto-von-Guericke-Universität MagdeburgGamal Kassem Übung 7 Reports mit Datenbankzugriff.
Übung Datenbanksysteme SQL-Anfragen (2)
SQL 2 Order by null Aggregatfunktionen group by Join subselect.
Datenintegrität Referentielle Integrität create table
1 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines Schlüssels 1:N - Beziehung Angabe.
1 Kapitel 8: Datenintegrität. 2 Datenintegrität Statische Bedingung (jeder Zustand) Dynamische Bedingung (bei Zustandsänderung) Bisher: Definition eines.
Datenbanken 10: Einfügen, Ändern, Löschen
Abfragen – Tipps und Tricks Buch S102ff (Informatik I, Oldenbourg-Verlag) Nach einer Vorlage von Dieter Bergmann.
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
2.2 Definition eines Datenbankschemas (SQL-DDL)
SQL in Visual FoxPro. © 1999 TMN-Systemberatung GmbH SQL Historie n SQL - Structured Query Language n In den 70er Jahren von IBM entwickelt n 1986 zum.
Einführung und Überblick
Übung 1: SQL Übungen finden bei Bedarf anstelle der Vorlesungen statt
Datenbankentwicklung IV-LK
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Datenbankentwicklung IV-LK
Relationale Datenbanken III
O.Univ.-Prof. Dr. Dimitris Karagiannis Datenbanken administrieren mit phpMyAdmin Martin Marinschek
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #4 SQL (Teil 1)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #6 SQL (Teil 3)
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
Vorlesung #4 SQL (Teil 1).
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #6 SQL (Teil 1)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #7 SQL (Teil 4)
WS 2013/14 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
WS 2007/08 Datenbanksysteme Mi 17:00 – 18:30 R Vorlesung #5 SQL (Teil 2)
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #4 SQL (Teil 1)
Befehle in SQL Erläuterungen.
Datenbanksysteme für hörer anderer Fachrichtungen
Einführung in Datenbankmodellierung und SQL
WS 2011/12 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #5 SQL (Teil 2)
Relationales Datenmodell und DDL
1 Gruppierung, Aggregierung und Sortierung (2) Abarbeitungsmodell bei Gruppierung: Werte from- und where-Klauseln aus wie bisher (Bildung von Kreuzprodukt.
SQL - Structured Query Language AIFB SS (1/9) Join-Operationen in SQL-92(1/9) Syntax einer Join-Operation: join-op := CROSS JOIN | [NATURAL]
Verdichten von Daten mit Gruppenfunktionen
Datenbanksysteme II Vorlesung WS 2006 / 2007 Paul Manthey
Structured Query Language
8 Erzeugen und Verwalten von Tabellen Ziele Kennenlernen der wichtigsten Datenbankobjekte Anlegen von Tabellen Datentypen zur Definition von Spalten.
Vorlesung #5 SQL (Teil 2).
RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
Termin Festlegung Einführung MySQL Runterladen MySQL, Pentaho Design Studio Betrachtung Pentaho
Vordefinierte Datentypen (1)
Datenbank System (DBS) - Warum?
Datenbank für Skriptenverkauf
WS 2014/15 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #9 SQL Zusammenfassung.
Datenbanken erstellen mit PostgreSQL
Datenbanken abfragen mit SQL
SQL Lutz KleinostendarpJOBELMANN-SCHULE Datendefinition Die Organisation einer Datenbank basiert auf einer Anzahl verschiedener Objekte. Diese können physikalischer.
SQL Structured Query Language Enzio Thiem. INHALT CREATE TABLE Anweisung Gängige Datentypen Beispiel CREATE TABLE Beispiel CREATE TABLE - erweitert Beispiel.
SQL Basics Schulung –
Sprachumfang von SQL Vier Kategorien DDL (Data Definition Language)
Vorlesung #4 Relationales Kalkül und SQL (Teil 1)
Vorlesung #5 SQL (Teil 2).
Vorlesung #6 SQL (Teil 3).
(Structured Query Language)
 Präsentation transkript:

MySQL relationales Datenbanksystem als Open-Source Internet-Datenbank sehr weit verbreitet, vorhandene Funktionalität ist gut&schnell kostenfreie MySQL Community Edition Diverse MySQL Server Lizenzmodelle Dem kostenfreien MySQL fehlen jedoch einige Features, die in großen kommerziellen DB-Systemen eine Selbstverständlichkeit sind Dr. Heidrun Bethge Datenbanken

Eigenschaften von MySQL I Client-Server-Architektur: DB-Server + beliebig viele Clients, die mit Server kommunizieren MySQL folgt dem ANSI-SQL Standard, allerdings einige (wesentliche) Einschränkungen Programmiersprachen: Für MySQL-Anwendungen gibt es viele APIs (Application Programming Interfaces) bzw. Bibliotheken. Programmierung in C, C++, Java, Perl, PHP, Python, Tcl möglich. ODBC: Durch ODBC-Schnittstelle kann MySQL darüber hinaus über die gängigen Windows-Programmiersprachen angesprochen werden. Dr. Heidrun Bethge Datenbanken

Eigenschaften von MySQL II Plattformunabhängig: MySQL läuft auf Macintosh, OS/2, Linux, Windows, div. Unix-Varianten Geschwindigkeit: MySQL ist eine sehr schnelles Datenbanksystem. Geschwindigkeitsvorteil jedoch auch durch fehlende Merkmale wie z.B. Transaktionen in MyISAM-Tabellen. MySQL stellt geringe Anforderungen an die Hardware. Unterstützung durch weltweite, große MySQL-Entwicklergemeinde. Dr. Heidrun Bethge Datenbanken

Einschränkungen von MySQL Sub-Selects/Deletes: SELECT * FROM table1 WHERE x IN (SELECT y FROM table2) geht ab 4.1 Views (ab 5.0) Stored Procedures und Trigger (eingeschränkt ab 5.1) Transaktionen (eingeschränkt ab 4.0). keine freien DataWarehouse-Funktionen keine freien Recovery-Mechanismen Dr. Heidrun Bethge Datenbanken

Windows oder Unix/Linux? MySQL wurde ursprünglich für Unix/Linux verwendet und erst später auf Windows portiert. Auf im Internet öffentlich zugänglichen Servern läuft MySQL fast nur unter Linux. -> intensiverer Praxiseinsatz -> intensiver auf diesen Systemen getestet effizienterer Einsatz unter Unix/Linux, da MySQL für deren Prozess- und Thread-Modelle optimiert ist für Entwicklungsumgebung egal: hier funktioniert Windows genauso gut Dr. Heidrun Bethge Datenbanken

Installation testen starten: mysql/bin/mysql.exe jetzt Befehl „status“ absetzen falls es nicht klappt: Task-Manager. Prozess mysqld-nt.exe sollte laufen. evtl auch aufrufen mit Parametern: mysql –h 192.168.0.1 -u username -p Dr. Heidrun Bethge Datenbanken

MySQL-Monitor mysql Nicht zu verwechseln mit dem MySQL-Datenbank-Server, der evtl. als Dienst läuft. Start über mysql/bin/mysql.exe evtl auch aufrufen mit Parametern: mysql –h localhost -u username –p hier sind Administrations- und Wartungsaufgaben interaktiv durchführbar; Kommandointerpreter jeder Befehl wird durch Semikolon beendet, Befehle können über mehrere Zeilen gehen Mit Pfeiltasten lassen sich Befehle wiederholen Dr. Heidrun Bethge Datenbanken

erstes Beispiel create database test1; show databases; use test1; create table testtab ( id int not null auto_increment, wert tinyint not null, primary key (id));  insert into testtab (wert) values (3); select * from testtab; drop table testtab; Dr. Heidrun Bethge Datenbanken

Dr. Heidrun Bethge Datenbanken

Entwicklungsgeschichte SQL SQL (früherer Name: SEQUEL) ist zunächst Anfragesprache des relationalen DBMS-Prototyps „System R“ Implementierung ab 1975 im IBM Forschungslabor in San Jose SQL wurde ab Anfang der 80er Jahre in verschiedenen DB-Implementierungen verfügbar: IBM, Oracle, DEC, ... Dr. Heidrun Bethge Datenbanken

Standardisierungen SQL Seit Anfang/Mitte der 80er Jahre Standardisierungsaktivitäten am ANSI für eine relationale DB-Sprache auf Basis von SQL ANSI SQL-86 (SQL1) ANSI SQL-92 (SQL2) ANSI SQL-99 (SQL3) ANSI SQL-2003 ANSI SQL/XML-2006 ANSI SQL-2008 Bis heute ist (vermutlich) noch kein relationales DBMS „Full SQL“ konform. SQL der großen DBMS weitgehend kompatibel. Dr. Heidrun Bethge Datenbanken

Sprachumfang von SQL DDL Data Definition Language Erstellen von Tabellen, Indices, Views, … DQL Data Query Language Abfragen von Daten DML Data Manipulation Language Anlegen, Ändern, Löschen von Daten DCL Data Control Language Anlegen von Benutzern, Vergabe von Zugriffsrechten TCL Transaction Control Language Steuerung von Transaktionen Dr. Heidrun Bethge Datenbanken

Verwendung von SQL SQL ist Anweisungssprache. SQL ist keine Programmiersprache. Reihenfolge der SQL-Klauseln ist fix. SQL ist nicht case-sensitiv (Ausnahme: Tabellen- und Feldnamen z.B. in bestimmten Oracle-Tabellen). Beliebiges Einfügen von Leerzeichen, Leerzeilen, Tabs möglich. Dr. Heidrun Bethge Datenbanken

CREATE TABLE CREATE TABLE tabellenname ( feldname1 feldtyp feldoptionen, feldname2 feldtyp feldoptionen ... [, index1, index2] ); Dr. Heidrun Bethge Datenbanken

CREATE TABLE Beispiel CREATE TABLE teilnehmer ( TnNr int(11) NOT NULL PRIMARY KEY, Name varchar(12), Ort varchar(12), tnalter int(11) default NULL ) ; Alternativ: TnNr int(11) NOT NULL, tnalter int(11) default NULL, PRIMARY KEY (TnNr) Dr. Heidrun Bethge Datenbanken

CREATE TABLE: Feldoptionen NOT NULL DEFAULT defaultwert PRIMARY KEY (gleichzeitig NOT NULL erforderlich) AUTO_INCREMENT (nicht ANSI, z.B. in MySQL) Dr. Heidrun Bethge Datenbanken

References in MySQL z.B. für InnoDB-Tabellen implementiert nicht jedoch im Standard-Tabellenformat MyISAM dient der Überwachung referentieller Integrität CREATE TABLE parent( parentid INT NOT NULL PRIMARY KEY) ENGINE=INNODB; CREATE TABLE child( childid INT NOT NULL PRIMARY KEY, parentid INT, INDEX par_ind (parentid), FOREIGN KEY (parentid) REFERENCES parent(parentid) ON DELETE SET NULL) Dr. Heidrun Bethge Datenbanken

Namensgebung möglichst klare Feld- und Tabellennamen einheitliches Schema für die Benennung von Feldern und Tabellen z.B. einheitlich: Singular title oder Plural titles Feldnamen evtl. Rückschluss auf Tabelle und/oder Datentyp Dr. Heidrun Bethge Datenbanken

MySQL-Datentypen Integer Tinyint 8-Bit-Integer -128 - +127 Smallint 16-Bit-Integer Mediumint 24-Bit-Integer Int, Integer 32-Bit-Integer Bigint 64-Bit-Integer Attribut UNSIGNED: nur positive Zahlen. Ansonsten +- AUTO_INCREMENT (kein ANSI-SQL). Attribut PRIMARY KEY oder UNIQUE müssen gleichzeitig gesetzt sein Es gibt auch Int(x) (x-stellig), dient jedoch nur der Formatierung,keine Stelleneinschränkung Dr. Heidrun Bethge Datenbanken

MySQL Datentypen Fließkomma FLOAT 8 Stellen, 4 Byte REAL/DOUBLE 16 Stellen, 8 Byte DOUBLE(6,3) hat 6 Stellen vor und 3 Stellen nach dem Dezimalpunkt 123456.789 Anz. Nachkommastellen festlegen bewirkt Rundung DECIMAL(p,s) p: gesamte Stellenanzahl, s: Nachkommazahlen. Festkommazahl. DECIMAL(8,3) –99999.999 bis 99999.999 NUMERIC, DEC Synonyme für DECIMAL Dr. Heidrun Bethge Datenbanken

MySQL Datentypen Datum/Zeit DATE 3 Byte '2012-05-10' Bereich 1000-01-01 bis 9999-12-31 TIME 3 Byte '23:59:59' Bereich +/- 838:59:59 DATETIME 8 Byte '2012-05-10 23:59:59' YEAR 1 Byte Jahreszahl 1900-2155 TIMESTAMP Datum und Zeit in der Form '20120510235959' zw. 1970 und 2038. Wird bei Änderung des Datensatzes automatisch aktualisiert. Dr. Heidrun Bethge Datenbanken

MySQL Datentypen Zeichenketten CHAR(n) max. 255 Zeichen, n Byte VARCHAR(n) variable Länge, max. n Zeichen (<256). Speicherbedarf: Tatsächliche Länge+1Byte CHAR und VARCHAR: Leerzeichen am Beginn & Ende werden gelöscht TINYTEXT variable Länge, max. 255 Zeichen, (n+1 Byte) TEXT max. 216-1 Zeichen (n+2 Byte) MEDIUMTEXT max. 224-1 Zeichen (n+3 Byte) LONGTEXT max. 232-1 Zeichen (n+4 Byte) xxxTEXT-Datentypen sind kein ANSI Dr. Heidrun Bethge Datenbanken

MySQL Datentypen für Binärdaten nicht ANSI! BLOB: Binary Large Object TINYBLOB Binärdaten mit var. Länge, max. 255 Byte BLOB (216-1 Byte), MEDIUMBLOB (224-1 Byte), LONGBLOB (232-1 Byte) Vorteil: auch Binärdateien unterliegen DB-Zugriffsschutz eventuell nur Links in der Datenbank abspeichern, Binärdaten in externen Dateien speichern -> schnellerer Datenbankzugriff Dr. Heidrun Bethge Datenbanken

MySQL Datentypen für Aufzählungen ENUM Auswahl einer von max. 65535 Zeichenketten (1-2 Byte) CREATE TABLE testenum (color ENUM (`red‘, `green‘, `blue‘, `white‘)) INSERT testenum VALUES (`red‘) SET Kombination von max. 255 Zeichenketten, Mehrfachauswahl möglich (1-8 Byte) CREATE TABLE testset (fontattr SET (`bold‘, `italic‘, `underlined‘)) INSERT testset VALUES (`bold,italic‘) Dr. Heidrun Bethge Datenbanken

Indizes Beschleunigen Zugriff auf DB verlangsamen Änderungen in DB und benötigen Speicherplatz Maximal 16 Indizes pro Tabelle auch für mehrere Felder gleichzeitig Index sinnlos, wenn Feld sehr viele gleiche Einträge hat -> Normalisierung! UNIQUE macht Index effizienter, eineindeutig PRIMARY Primärschlüssel Beschränkung der Indexlänge bei CHAR und VARCHAR möglich, bei xxxTEXT und BLOB erforderlich. Dr. Heidrun Bethge Datenbanken

Indizes II MySQL kann Indizes in folgenden Fällen nicht nutzen: Ungleichoperationen (WHERE column != ...) Funktionen (WHERE DAY(datum)=...) Primär- und Fremdschlüssel haben untersch. Typ LIKE `%abc` Dr. Heidrun Bethge Datenbanken

CREATE INDEX Folgende Ausdrücke sind gleichwertig für die Indexerstellung: CREATE TABLE booktitle ( titleID ..., title ..., publisher ..., year..., PRIMARY KEY ..., INDEX idxtitle (title)) CREATE INDEX idxtitle on booktitle (title) ALTER TABLE booktitle ADD INDEX idxtitle (title) Dr. Heidrun Bethge Datenbanken

Tabellendateien MySQL tabelle.frm Tabellenschema (Datentypen, Indizes...) tabelle.myd MyISAM-Tabellendaten tabelle.myi MyISAM-Indizes (alle Indizes der Tab.) tabelle.db Berkeley-DB-Tabelle (Daten+Indizes) hier sind auch Transaktionen möglich Dr. Heidrun Bethge Datenbanken

ALTER TABLE ALTER TABLE tblname tbloptions ALTER TABLE ADD newcolname coltype coloptions [FIRST|AFTER existingcolumn] ALTER TABLE tblname MODIFY colname coltype coloptions ALTER TABLE tblname CHANGE oldcolname newcolname coltype coloptions ALTER TABLE tblname DROP colname ALTER TABLE tblname DROP INDEX iname ALTER TABLE tblname DROP PRIMARY KEY Dr. Heidrun Bethge Datenbanken

INSERT Dr. Heidrun Bethge Datenbanken

Beispiel INSERT Füge einen neuen Teilnehmer (TnNr 200) für Kurs G08 und AngNr 1 in die Gebühren-Relation ein. Die Teilnahmegebühr sei noch nicht bekannt. INSERT INTO gebuehren VALUES (1,‘G08‘, 200,NULL) alternativ: INSERT INTO gebuehren (angnr, kursnr, tnnr) VALUES (1,‘G08‘, 200,NULL) Füge ein neues Kursangebot (AngNr 3) für G08 für den 15.3.2014 in Ulm ein. INSERT INTO angebot VALUES (3,‘G08‘,‘15.03.2014‘,‘Ulm‘) Dr. Heidrun Bethge Datenbanken

SELECT Dr. Heidrun Bethge Datenbanken

SELECT * Gib die Teilnehmer-Relation komplett aus. SELECT * FROM Teilnehmer; Dr. Heidrun Bethge Datenbanken

SELECT FROM Gib aus der Teilnehmer-Relation die Attribute Name, TnNr, Ort aus, und zwar in dieser Reihenfolge. SELECT Name, TnNr, Ort FROM Teilnehmer; Dr. Heidrun Bethge Datenbanken

SELECT DISTINCT Gib alle Orte aus, aus denen Teilnehmer kommen. SELECT ort SELECT DISTINCT ort FROM teilnehmer; FROM teilnehmer; ohne Duplikateliminierung mit Duplikateliminierung Dr. Heidrun Bethge Datenbanken

SELECT FROM WHERE SELECT TnNr, Name, Ort SELECT * FROM Teilnehmer WHERE Ort = 'Ulm'; SELECT * FROM Teilnehmer WHERE Ort = 'Ulm'; SELECT * FROM Teilnehmer WHERE TnNr >= 100 Dr. Heidrun Bethge Datenbanken

AND, OR Vergleichs-Ausdrücke können mit AND und OR verknüpft werden: ... TnNr > 100 AND TnNR < 200 ... Ort = 'Ulm' OR Ort = 'Neu-Ulm' ... (Ort = 'Ulm' OR Ort = 'Neu-Ulm') AND TnNr > 100 Dr. Heidrun Bethge Datenbanken

Vergleichsoperatoren ... TnNr BETWEEN 100 AND 200 ist äquivalent zu: ... TnNr >= 100 AND TnNR <= 200 ... TnNr NOT BETWEEN 100 AND 200 ... TnNr IN (100, 200, 130, 400) ... TnNr NOT IN (100, 200, 130, 400) Dr. Heidrun Bethge Datenbanken

LIKE Beispiel Dr. Heidrun Bethge Datenbanken

LIKE Verwendung LIKE ist ein spezieller Vergleichsoperator für CHAR-Attribute. Der Attributwert wird als Ganzes von links nach rechts zeichenweise mit dem angegebenen Muster verglichen. Maskierungszeichen („wild cards“): "%" : an der durch "%" markierten Stelle können beliebig viele (auch keine!) zu ignorierende Zeichen stehen. "_" : an der durch "_" (Unterstrich) markierten Stelle wird genau ein Zeichen ignoriert. Dr. Heidrun Bethge Datenbanken

Berechnete Felder „Gib aus, bei welcher Kursliteratur ein Unterbestand (Bestand kleiner als Bedarf) vorhanden ist und wie hoch die Beschaffungskosten hierfür sind.“ SELECT KursNr, Bedarf-Bestand, (Bedarf-Bestand)*Preis FROM KursLit WHERE Bedarf > Bestand; Problem: wenig aussagekräftige Spaltennamen Dr. Heidrun Bethge Datenbanken

Felder benennen Abhilfe: Umbenennen der Attribute SELECT KursNr, Bedarf-Bestand AS Minusbestand, (Bedarf-Bestand)*Preis AS Beschaffungskosten FROM KursLit WHERE Bedarf > Bestand; Dr. Heidrun Bethge Datenbanken

einige String-Funktionen LCASE(string) string in Kleinbuchstaben UCASE(string) string in Großbuchstaben LENGTH(string) LOCATE(suchstr, string) LEFT(string, anz), RIGHT(string, anz) SUBSTRING(string, start [,länge]) LTRIM(string), RTRIM(string) Entfernen von Blanks (vorne/hinten) TRIM(string) Entfernen von Blanks vorne+hinten CHAR(num.Wert) CHAR(123)->’123’ (String) Dr. Heidrun Bethge Datenbanken

Datums-Funktionen „Gib die Angebotsrelation, sortiert nach Datum, mit separaten Spalten für Tag, Monat und Jahr aus.“ SELECT AngNr, KursNr, day(datum) AS Tag, month(datum) AS Monat, year(datum) AS Jahr, Ort FROM Angebot ORDER BY Datum; Dr. Heidrun Bethge Datenbanken

ORDER BY „Gib alle Kurs-Angebote für die Kurse 'P13' und 'I09' sortiert nach Datum (das aktuellste zuerst), Angebotsnummer und Ort (jeweils aufsteigend) aus.“ SELECT * FROM Angebot WHERE KursNr = ’P13’ OR KursNr = ’I09’ ORDER BY Datum DESC, AngNr, Ort; Die ORDER BY-Klausel kann in einem Anfrageausdruck nur einmal – und zwar ganz am Schluß – auftreten. Dr. Heidrun Bethge Datenbanken

Operatoren und Konventionen NOT ! OR || AND && =, <>,!= , <=, <, >=, > +, -, *, / ‘Zeichenkette‘ bzw. “Zeichenkette“ Zahlen: -2002 -123.456 Dr. Heidrun Bethge Datenbanken

Aggregatfunktionen COUNT(Ausdruck): Anzahl Felder <> NULL COUNT(*): Anzahl Felder AVG(Ausdruck): Mittelwert MIN(Ausdruck): Minimum MAX(Ausdruck): Maximum SUM(Ausdruck): Summe STD(Ausdruck): Standardabweichung Dr. Heidrun Bethge Datenbanken

Beispiele Aggregatfunktionen „Gib die Anzahl aller Kursteilnehmer aus 'Ulm' aus.“ SELECT COUNT(*) FROM Teilnehmer WHERE Ort = ‘Ulm‘; „Gib das durchschnittliche Gehalt aller Kursleiter aus.“ SELECT AVG(Gehalt) FROM Kursleiter; Wenn eine SELECT-Anweisung eine Aggregatfunktion enthält, so wird nur max. ein Resultat-Tupel erzeugt. Dr. Heidrun Bethge Datenbanken

Verbund – alte Form Dr. Heidrun Bethge Datenbanken

Beispiel Verbund „Gib aus, welche Kursangebote (Ausgabe: KursNr, AngNr) von welchen Kursleitern (Ausgabe: Name) durchgeführt werden.“ Bisherige Form: SELECT f.KursNr, f.AngNr, lt.Name FROM Fuehrt_durch f, Kursleiter lt WHERE f.PersNr = lt.PersNr; Dr. Heidrun Bethge Datenbanken

JOIN join-condition-j1 kann nur Attribute referenzieren, die im Scope von table1 oder table2 auftreten, nicht jedoch solche aus table3. join-condition-j2 kann auf alle Attribute der zuvor spezifizierten Tabellen (linke Seite) sowie die von table3 zugreifen. Diese Join-Form macht insbesondere dann Sinn, wenn die „Join-Spalten“ verschiedene Namen haben und/oder andere Join-Bedingungen als "=" ausgedrückt werden sollen. Dr. Heidrun Bethge Datenbanken

JOIN Beispiel Gib aus, welche Kursangebote (Ausgabe: KursNr, AngNr) von welchen Kursleitern (Ausgabe: Name) durchgeführt werden. SELECT KursNr, AngNr, Name FROM Fuehrt_durch INNER JOIN Kursleiter ON Kursleiter.PersNr = Fuehrt_durch.PersNr Kürzere Schreibweise mit Alias-Namen für die Tabellen: SELECT f.KursNr, f.AngNr, lt.Name FROM Fuehrt_durch f INNER JOIN Kursleiter lt ON f.PersNr = lt.PersNr Dr. Heidrun Bethge Datenbanken

NATURAL JOIN SELECT select-list FROM table1 NATURAL JOIN table2 Das ID-Feld in den beiden Tabellen muss den gleichen Namen haben und vom gleichen Typ sein Dr. Heidrun Bethge Datenbanken

OUTER JOIN SELECT select-list FROM table1 LEFT [OUTER] JOIN table2 ON ... FROM table1 RIGHT [OUTER] JOIN table2 ON ... nicht in MySQL: FROM table1 FULL [OUTER] JOIN table2 ON ... Dr. Heidrun Bethge Datenbanken

LEFT JOIN - Beispiel Gib alle Kurse mit ihren Voraussetzungen aus. SELECT k.KursNr, k.Titel, v.VorNr Voraus_KursNr FROM Kurs k LEFT JOIN Vorauss v ON k.KursNr = v.KursNr; Dr. Heidrun Bethge Datenbanken

Vorgehensweise bei Join 1. Auszugebende Werte/Attribute bestimmen 2. Potentiell relevante Entities bestimmen 3. "Join-Pfad" + Join-Attribute bestimmen 4. Optional: "Abwahl" der nicht benötigten Entities „Gib aus, welche Kursangebote (Ausgabe: KursNr, Titel, AngNr, Datum, Ort) von welchen Kursleitern (Ausgabe: PersNr) durchgeführt werden.“ Zu 1: KursNr, Titel, AngNr, Datum, Ort, PersNr Zu 2: Kurs, Angebot, Kursleiter Zu 3: Kurs -> Angebot -> Fuehrt_durch -> Kursleiter (KursNr) (AngNr,KursNr) (PersNr) Zu 4: Kursleiter Dr. Heidrun Bethge Datenbanken

Bsp. Join SELECT k.KursNr, k.Titel, f.AngNr, a.Datum, a.Ort, f.PersNr FROM Kurs k INNER JOIN Angebot a ON k.KursNr = a.KursNr INNER JOIN Fuehrt_durch f ON a.AngNr = f.AngNr AND a.KursNr = f.KursNr; alt: FROM Kurs k, Angebot a, Fuehrt_durch f WHERE k.KursNr = a.KursNr AND a.AngNr = f.AngNr AND a.KursNr = f.KursNr; Dr. Heidrun Bethge Datenbanken

Aufgaben Join I Gib aus, welche Teilnehmer (Ausgabe: TnNr) an Kurs 'G08' oder 'G10' (Ausgabe: KursNr, AngNr, Ort) teilnehmen. Gib alle Kursangebote (Ausgabe: alles) zusammen mit den vorliegenden Anmeldungen (TnNr) aus. Dr. Heidrun Bethge Datenbanken

Aufgaben Join II Gib alle Kursangebote (Ausgabe: alles) zusammen mit den vorliegenden Anmeldungen (TnNr) aus. Wie Aufgabe 2, aber zusätzlich zur Teilnehmernummer soll jeweils auch noch der Teilnehmername ausgegeben werden. Gib alle Kursangebote aus, für die sich kein Teilnehmer angemeldet hat. Hinweis: WHERE ... IS [NOT] NULL Dr. Heidrun Bethge Datenbanken

Aufgaben Aggregatfunktionen Gib das höchste, das niedrigste und das durchschnittliche Kursleiter-Gehalt sowie die Summe aller Gehälter aus. Gib die Anzahl der verschiedenen Orte aus, aus denen die Kursteilnehmer kommen. Dr. Heidrun Bethge Datenbanken

Gruppierung - Problem Lösung: Gruppierung Gib auf Basis der Teilnehmer-Relation eine ortsbezogene Teilnehmerstatistik aus. D.h. gib aus, wie viele Teilnehmer aus welchem Ort kommen (Ausgabe: Ortsname, Teilnehmerzahl). SELECT Ort, COUNT ... ? FROM Teilnehmer Lösung: Gruppierung SELECT Ort, COUNT(Ort) Anzahl FROM Teilnehmer GROUP BY Ort; Dr. Heidrun Bethge Datenbanken

Group by – Having Syntax Dr. Heidrun Bethge Datenbanken

Group By GROUP BY bewirkt (interne) Teilmengenbildung (Gruppierung) der Ergebnis-Relation entsprechend dem Gruppierungsattribut bzw. den Attributen (-> Menge von Mengen). Aggregationsfunktionen werden jeweils auf Teilmengen (falls vorhanden) angewandt. Eventuelle Joins werden vor Anwendung der Gruppierungsfunktion ausgeführt, (Reihenfolge jetzt also: FROM - WHERE -GROUP BY- HAVING - ORDER BY - SELECT) Dr. Heidrun Bethge Datenbanken

Having Gruppierungsnebenbedingungen werden mittels HAVING-Klausel ausgedrückt (HAVING kann nur in Verbindung mit GROUP BY auftreten). Unterschied zwischen WHERE und HAVING: WHERE eliminiert Zeilen HAVING eliminiert Gruppen Dr. Heidrun Bethge Datenbanken

Übung Group by - Having Gib für alle Kursangebote die Anzahl der Anmeldungen aus (Ausgabe: Angebote-Attribute, Anzahl Teilnehmer). Wie vorheriges, aber nur solche Kurse ausgeben, für die mehr als 2 Anmeldungen vorliegen. Gib alle Kurstypen (KursNr) - mit Ausnahme der Grundlagenkurse ('G08', 'G10') - aus, für die mehr als 4 Anmeldungen vorliegen. Dr. Heidrun Bethge Datenbanken

Unterabfragen Dr. Heidrun Bethge Datenbanken

Motivation Unterabfragen I Welche Artikel haben einen Preis, der über dem Durchschnittspreis liegt? SELECT AVG(Einzelpreis) AS avgpreis FROM Artikel; Ergebnis (z.B): avgpreis 134.05 SELECT Artikelname FROM Artikel WHERE Einzelpreis>134.05; → zwei Abfragen notwendig Dr. Heidrun Bethge Datenbanken

Motivation Unterabfragen II Nur eine Abfrage mittels Unterabfrage (= Sub-Select, Subquery): SELECT Artikelname, Einzelpreis FROM Artikel WHERE Einzelpreis > ( SELECT AVG(Einzelpreis) FROM Artikel); Hier notwendig, dass Unterabfrage nur einen Wert liefert („scalar subquery“) und dass die Datentypen der verglichenen Felder zusammenpassen. Dr. Heidrun Bethge Datenbanken

scalar subquery Unterabfragen, welche nur einen Wert zurückliefern, werden eingeleitet durch Vergleichsoperatoren (=;<>;<;<=;>;>=) weiteres Beispiel: Suche alle Kunden heraus, die im gleichen Ort wohnen wie der Kunde Nr. 123 SELECT kundennr, ort FROM kunde WHERE ort = (SELECT ort FROM kunde WHERE kundennr=123); Dr. Heidrun Bethge Datenbanken

table subquery = Unterabfrage, welche eine Tabelle zurückliefert. Mit folgenden Bedingungen werden diese Unterabfragen eingeleitet (§ ist Vergleichsoperator (=;<>;<;<=;>;>=)): [NOT] IN prüft, ob ein Wert in der Ergebnismenge der Unterabfrage enthalten ist. [NOT] EXISTS prüft, ob die Unterabfrage mindestens eine Zeile erbringt, die der Bedingung genügt. Liefert True/False zurück. § ANY  § SOME prüft, ob die Bedingung für irgendeine Zeile der Unterabfrage zutrifft § ALL prüft, ob die Bedingung für alle Zeilen der Unterabfrage zutrifft. Dr. Heidrun Bethge Datenbanken

Unterabfrage mit IN Suche alle Kunden heraus, die im gleichen Ort wohnen wie die Kunden Nr. 123 oder 124. SELECT kundennr, ort FROM kunde WHERE ort IN (SELECT ort FROM kunde WHERE kundennr=123 OR kundennr=124); Dr. Heidrun Bethge Datenbanken

Unterabfrage mit EXISTS Suche alle Artikelkategorien (Getränke, Süsswaren...) heraus, denen mindestens ein Artikel zugeordnet ist: SELECT kategoriename FROM kategorie WHERE EXISTS (SELECT * FROM artikel WHERE artikel.kategorienr=kategorie.kategorienr) korrelierte Unterabfrage! obiges ist auch ohne Unterabfrage lösbar Dr. Heidrun Bethge Datenbanken

nicht-korrelierte und korrelierte Unterabfragen I Dr. Heidrun Bethge Datenbanken

nicht-korrelierte und korrelierte Unterabfragen II In Unterabfragen kann auf Tabellen von äußeren Abfrage-Ausdrücken Bezug genommen werden: korrelierte Unterabfragen. Nachteil: Für jeden Datensatz der aufrufenden Abfrage muss die Unterabfrage einzelnd ausgeführt werden. Bei semantisch äquivalenten Anfrageformulierungen mit und ohne Korrelation können sich stark unterschiedliche Antwortzeiten ergeben. Dies ist auch abhängig von Anfragebearbeitungs-Strategie bzw. Güte der Anfrage-Optimierung des verwendeten DBMS Dr. Heidrun Bethge Datenbanken

Syntax Unterabfrage mit EXISTS SELECT Attributliste FROM Rel1, Rel2, ..., Reln WHERE [ NOT ] EXISTS ( Tabellenausdruck ) Der Subselect-Ausdruck (EXISTS) liefert nur TRUE (Treffer gefunden) oder FALSE (keine Treffer). Dr. Heidrun Bethge Datenbanken

Syntax Unterabfrage mit ANY / ALL / IN Dr. Heidrun Bethge Datenbanken

weiteres zu Unterabfragen = ANY ist äquivalent zu IN, <> ALL ist äquivalent zu NOT IN. Unterabfragen können geschachtelt sein, d.h. sie können wiederum Unterabfragen enthalten. Häufig können Unterabfragen auch ersetzt werden durch join-Abfragen ohne Unterabfragen. Dies geht dann nicht, wenn die Unterabfrage eine Mengenfunktion beinhaltet. Dr. Heidrun Bethge Datenbanken

Unterabfrage vs. Join Gib alle Kursangebote aus (Ausgabe: KursNr, AngNr), für die Teilnehmer aus 'Ulm' gebucht haben. SELECT DISTINCT nt.KursNr, nt.AngNr FROM Nimmt_teil nt INNER JOIN Teilnehmer As t ON nt.TnNr = t.TnNr WHERE t.Ort = ’Ulm’ FROM Nimmt_teil nt WHERE EXISTS (SELECT * FROM Teilnehmer AS t WHERE t.Ort = ’Ulm’ AND t.TnNr = nt.TnNr) Dr. Heidrun Bethge Datenbanken

Bsp. Unterabfrage mit ANY / IN SELECT DISTINCT nt.Kursnr, nt.AngNr FROM Nimmt_teil nt WHERE nt.TnNr = ANY (SELECT TnNr FROM Teilnehmer WHERE Ort = 'Ulm') SELECT DISTINCT nt.KursNr, nt.AngNr WHERE nt.TnNr IN Dr. Heidrun Bethge Datenbanken

Paarweise Vergleiche SELECT name, ort FROM teilnehmer WHERE (tnalter, ort) = ( SELECT tnalter, ort WHERE name='Schulze') AND name <>'Schulze'; Keine paarweisen Vergleiche auf SQL-Server möglich. Dr. Heidrun Bethge Datenbanken

Unterabfragen umgehen SELECT * FROM tabelle1 WHERE tabelle1.id IN (SELECT tabelle2.id FROM tabelle2); wird ersetzt durch SELECT tabelle1.* FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.id=tabelle2.id; SELECT * FROM tabelle1 WHERE id NOT IN (SELECT id FROM tabelle2); SELECT * FROM tabelle1 WHERE NOT EXISTS (SELECT id FROM tabelle2 WHERE tabelle1.id=tabelle2.id); SELECT tabelle1.* FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.id WHERE tabelle2.id IS NULL; Dr. Heidrun Bethge Datenbanken

Aufgaben Unterabfragen Gib die Personalnummer des Kursleiters mit dem niedrigsten Gehalt aus. Wie lautet der Titel des Kurses mit der günstigsten Kursliteratur? Bestimme alle Kursangebote (Kurstitel und Angebotsnummer), zu denen es noch keine Teilnehmer gibt. Verwenden Sie eine korrelierte und eine nicht-korrelierte Unterabfrage. Gib alle Kursleiter aus, die mindestens zwei Kurse leiten. Ausgabe: Personaldaten, Angebotsdaten, sortiert nach PersNr. Dr. Heidrun Bethge Datenbanken

INLINE-VIEW = Unterabfragen im FROM oder JOIN SELECT * FROM (SELECT * FROM tabelle 1) t1 INNER JOIN (SELECT * FROM tabelle2) t2 ON t1.feld1=t2.feld2 Korrelierte Abfragen lassen sich häufig durch Inline-Views umgehen. Auswertungen auf gruppierten Daten mit Aggregaten hiermit möglich. Dr. Heidrun Bethge Datenbanken

INLINE-VIEW Beispiel 1 Stadt, in der die meisten Teilnehmer wohnen: SELECT max(a.Anzahl) FROM (SELECT ort, count(*) Anzahl FROM teilnehmer GROUP BY ort) a MySQL: benötigt Alias für Inline-View. SELECT ort, max(a.Anzahl) möglich. Oracle: benötigt keinen Alias, Ausgabe von ort nicht möglich. Dr. Heidrun Bethge Datenbanken

INLINE-VIEW Beispiel 2 Alle Mitarbeiter, die mehr verdienen als der Durchschnitt ihrer Abteilung SELECT m1.nachname, m1.abteilungsnr FROM mitarbeiter m1 INNER JOIN (SELECT m2.abteilungsnr, AVG(m2.gehalt) AS durchschnitt FROM mitarbeiter m2 GROUP BY m2.abteilungsnr) g ON m1.abteilungsnr=g.abteilungsnr WHERE m1.gehalt > g.durchschnitt; Dr. Heidrun Bethge Datenbanken

Unterabfragen im HAVING gleiches Vorgehen wie bei Unterabfragen in WHERE SELECT ort, count(*) Anzahl FROM teilnehmer GROUP BY ort HAVING ort NOT IN (SELECT ort FROM angebot); Dr. Heidrun Bethge Datenbanken

Unterabfragen in CREATE, UPDATE, DELETE CREATE TABLE kopie_kursleiter AS SELECT * FROM kursleiter; UPDATE kopie_kursleiter SET gehalt=gehalt+100 WHERE persnr in (SELECT persnr FROM fuehrt_durch); DELETE FROM kopie_kursleiter WHERE persnr NOT IN (SELECT persnr FROM fuehrt_durch); Dr. Heidrun Bethge Datenbanken

SET-Operatoren SELECT feld1, feld2 FROM tabelle1 UNION | UNION ALL | INTERSECT | MINUS/EXCEPT SELECT feld3, feld4 FROM tabelle2 UNION: Vereinigungsmenge ohne Duplikate UNION ALL: mit Duplikaten INTERSECT: Schnittmenge MINUS (Oracle) / EXCEPT (SQL-Server): Differenz INTERSECT und MINUS in MySQL nicht vorhanden Dr. Heidrun Bethge Datenbanken

Beispiele SET-Operatoren Gib alle Orte aus, wo Angebote stattfinden oder Teilnehmer wohnen. SELECT ort FROM angebot UNION SELECT ort FROM teilnehmer; Gib alle Angebotsorte aus, wo gleichzeitig Teilnehmer wohnen. INTERSECT Gib alle Angebotsorte aus, wo kein Teilnehmer wohnt. MINUS Dr. Heidrun Bethge Datenbanken

Regeln für SET-Operatoren Die erste SELECT-Anweisung gibt vor: Anzahl Felder Feldnamen Feldreihenfolge Felddatentypen Die folgende(n) SELECT-Anweisung(en) müssen übereinstimmen in ORDER BY wird einmal für alle Datensätze gemeinsam am Ende der Anweisung verwendet Dr. Heidrun Bethge Datenbanken

Beispiel UNION SELECT 'T' typ, name, ort FROM teilnehmer WHERE name like 'M%' UNION SELECT 'K' typ, name, NULL FROM kursleiter ORDER BY name; Dr. Heidrun Bethge Datenbanken

UNION anstelle FULL OUTER JOIN Nicht jedes DBMS hat die FULL OUTER JOIN-Funktionalität! Gib alle Lieferanten und alle von ihnen gelieferten Produkte aus. Lieferanten ohne Produkte und Produkte ohne Lieferanten sollen ebenfalls mit ausgegeben werden. SELECT l.firma, p.produktname FROM lieferant l LEFT JOIN produkt p ON l.lieferantid=p.lieferantid UNION RIGHT JOIN produkt p ON l.lieferantid=p.lieferantid Wie kann dieses Beispiel gelöst werden ohne LEFT/RIGHT JOIN? Dr. Heidrun Bethge Datenbanken

Aufgaben SET-Operatoren Lösen Sie folgende Aufgaben in Oracle auf dem Uni-Schema mittels SET-Operatoren. Lassen sich die Aufgaben auch ohne SET-Operator und ohne Unterabfrage lösen? Warum (nicht)? Alle Studenten-Namen, die bei Sokrates Vorlesungen hören, aber keine Vorlesungen bei Popper hören. Alle Vorlesungen mit 4 Semesterwochenstunden (sws), in der noch kein Student eine Prüfung abgelegt hat. Alle Vorlesungen mit 4 Semesterwochenstunden (sws), in der mindestens ein Student eine Prüfung abgelegt hat. Alle Professoren, die keine Vorlesung halten, aber einen Assistenten haben. Dr. Heidrun Bethge Datenbanken