Datenbanken: SQL. SQL: Structured Query Language. Anfragesprache für relationale Datenbanksysteme



Ähnliche Dokumente
SQL für Trolle. mag.e. Dienstag, Qt-Seminar

SQL Tutorial. SQL - Tutorial SS 06. Hubert Baumgartner. INSO - Industrial Software

Einführung in SQL. Sprachumfang: Indizes. Datensätzen. Zugriffsrechten

Mengenvergleiche: Alle Konten außer das, mit dem größten Saldo.

SQL. Fortgeschrittene Konzepte Auszug

Übung Datenbanken in der Praxis. Datenmodifikation mit SQL

Informatik 12 Datenbanken SQL-Einführung

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

SQL (Structured Query Language) Schemata Datentypen

Sructred Query Language

Datenbanken SQL Einführung Datenbank in MySQL einrichten mit PhpMyAdmin

Seminar 2. SQL - DML(Data Manipulation Language) und. DDL(Data Definition Language) Befehle.

Relationales Modell: SQL-DDL. SQL als Definitionssprache. 7. Datenbankdefinitionssprachen. Anforderungen an eine relationale DDL

Create-Table-Befehl. CREATE TABLE Tabellenname ( { Spalte { Datentyp Gebietsname } [ Spaltenbedingung [ ] ] Tabellenbedingung }

SQL structured query language

Einführung in SQL. 1. Grundlagen SQL. Structured Query Language. Viele Dialekte. Unterteilung: i. DDL (Data Definition Language)

Views in SQL. 2 Anlegen und Verwenden von Views 2

Abfragen (Queries, Subqueries)

SQL SQL. SQL = Structured Query Language (SEQUEL) IBM San Jose Research Laboratory SYSTEM R. Grundlagen der Datenbanksysteme I

Bibliografische Informationen digitalisiert durch

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

SQL: statische Integrität

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

Unterabfragen (Subqueries)

DBS ::: SERIE 5. Join Right Semi- Join Left Semi-Join Projektion Selektion Fremdschlüssel. Kreuzprodukt

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #3. SQL (Teil 1)

Aufbau des SELECT-Befehls. Im Folgenden werden zunächst Abfragen aus einer Tabelle vorgenommen.

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 27. Nov M. Endres, A. Huhn, T. Preisinger Lösungsblatt 5

Nachtrag: Farben. Farbblindheit. (Light und Bartlein 2004)

IV. Datenbankmanagement

Übersicht der wichtigsten MySQL-Befehle

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

Anwendungsentwicklung Datenbanken SQL. Stefan Goebel

Details zu den Ausdrücken nach FROM, WHERE, GROUP BY und HAVING finden Sie in den Abschnitten über JOIN, WHERE und GROUP BY.

Bedingungen über Werte Statische Integrität. CHECK-Klausel

Datenbanken: Relationales Datenbankmodell RDM

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II - SS Metadaten

Datumsangaben, enthält mindestens Jahr, Monat, Tag

Die bisher bereits bekannten Aggregatsfunktionen MIN, MAX, SUM, AVG, COUNT, VARIANCE und STDDEV wurden um FIRST und LAST erweitert.

Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung

7. Übung - Datenbanken

SQL - Übungen Bearbeitung der Datenbank Personal (1)

Objektrelationale Datenbanken

Uni Duisburg-Essen Fachgebiet Informationssysteme Prof. Dr. N. Fuhr

Referenzielle Integrität SQL

Oracle: Abstrakte Datentypen:

Dipl. Inf. Dipl. Math. Y. Orkunoglu Datum:

Wiederholung VU Datenmodellierung

Wiederholung VU Datenmodellierung

dbis Praktikum DBS I SQL Teil 2

4. Datenbanksprache SQL

Hochschule Karlsruhe Technik und Wirtschaft Anhänge: Fakultät für Informatik und Wirtschaftsinformatik SS 2013 Prof. Schmidt.

DB1. DB SQL-DQL 1 Mario Neugebauer

Konstante Relationen

Praktische SQL-Befehle

Labor 3 - Datenbank mit MySQL

Referentielle Integrität

Kapitel DB:VI (Fortsetzung)

Schnellübersichten. SQL Grundlagen und Datenbankdesign

Referentielle Integrität

Datenintegrität. Arten von Integritätsbedingungen. Statische Integritätsbedingungen. Referentielle Integrität. Integritätsbedingungen in SQL.

3.17 Zugriffskontrolle

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

3 Query Language (QL) Einfachste Abfrage Ordnen Gruppieren... 7

Datenbanksysteme I. Klausur zum Praktikum. Mehrere Professoren prüfen mit genau einem Beisitzer genau einen Studenten.

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

Beispiel 1: Filmdatenbank

MySQL: Einfaches Rechnen.

Modul Datenbanksysteme 2 Prüfung skizzenhaft SS Aug Name: Note:

Inhalt. Ein Einführung in die Nutzung von SQL-Datenbanken am Beispiel Oracle. Daten und Tabellen - ein Beispiel. Daten und Tabellen - Normalisierung

Benutzerverwaltung, Sichten und Datenintegrität

Carl-Engler-Schule Karlsruhe Datenbank 1 (5)

Vorlesung Dokumentation und Datenbanken Klausur

SQL Teil 2. SELECT Projektion Selektion Vereinigung, Schnitt, Differenz Verbund Komplexer SELECT-Ausdruck

PostgreSQL unter Debian Linux

Leseprobe: SQL mit MySQL - Band 4 Kompendium mit Online-Übungs-DB. Kompendium zur schnellen Kurzinformation der Datenbanksprache SQL/MySQL 5.

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Datenintegrität. Einschränkung der möglichen Datenbankzustände und -übergänge auf die in der Realität möglichen

Arbeiten mit einem lokalen PostgreSQL-Server

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler

Relationales Datenbanksystem Oracle

Integritätsbedingungen / Normalformen- Beispiel: Kontoführung

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

Übersicht über Datenbanken

Datenintegrität. Bisherige Integritätsbedingungen

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Eine völlig andere Form Abfragen zu erstellen ist, sie mit Hilfe der Datenbankabfragesprache SQL zu gestalten.

Datenbanktechnologie mit praktischen Übungen in MySQL und PHP

105.3 SQL-Datenverwaltung

SQL Performance - Tips Do's & Don'ts

SQL-Befehlsliste. Vereinbarung über die Schreibweise

SQL und MySQL. Kristian Köhntopp

Datenbanken im WI-Unterricht mit

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Universität Duisburg-Essen Informationssysteme Prof. Dr.-Ing. N. Fuhr. Praktikum Datenbanken / DB2 Woche 8: Trigger, SQL-PL

6. Datenintegrität. Integritätsbedingungen

Transkript:

SQL: Structured Query Language Anfragesprache für relationale Datenbanksysteme Zur Erinnerung: Relationale Datenbanksysteme speichern die Daten in Tabellen (Relationen): Zeilen: einzelne Objekte der Realität (Datensätze, Tupel) Spalten: Eigenschaften der Objekte (Attribute) Beispiel: Person Persnr Vorname Name Gebdat Geschlecht 12345 Rudi Mentär 01.01.1979 M 23456 Ana Bolika 15.02.1980 W 34567 Mari Huana 12.04.1971 W 1

Beispiel: Person Persnr Vorname Name Gebdat Geschlecht 12345 Rudi Mentär 01.01.1979 M 23456 Ana Bolika 15.02.1980 W 34567 Mari Huana 12.04.1971 W Einzelne Datensätze werden identifiziert über so genannte Schlüsselattribute: (im Beispiel: persnr) Beziehungen zwischen Datensätzen aus verschiedenen Tabellen werden modelliert durch so genannte Fremdschlüssel-Attribute: Person Adresse Persnr Vorname Name Gebdat Geschlecht 12345 Rudi Mentär 01.01.1979 M 23456 Ana Bolika 15.02.1980 W 34567 Mari Huana 12.04.1971 W Adrnr PLZ Ort Strasse Persnr 001 11223 Teststadt Teststr. 13 12345 002 45445 Kirchdorf Kirchweg 2 12345 003 55676 Dope-City Hanffeld 2 23456 2

Zur Arbeit mit relationalen Datenbanksystemen sind notwendig: Statements zur Erzeugung von Datenbankobjekten (Tabellen, etc. ); Statements zur Datenmanipulation; Bereitstellung der notwendigen Datentypen; Möglichkeiten der Einsicht in bestehende Datenbankobjekte; Möglichkeiten zur Formulierung prozeduraler Abläufe; Möglichkeiten zur Einbindung von Datenmanipulations-Statements in gängige Programmiersprachen; Standardisierte Anfragesprache; Diese Anforderungen werden inzwischen alle von SQL erfüllt! 3

Beispiele für SQL-Statements: DDL create table Person (persnr integer, name varchar(30), vorname varchar(30), gebdat date, geschlecht char(1) ); alter table person add constraint pk_persnr primary key (persnr); create table Adresse (adrnr integer, plz char(5), ort varchar(30), str varchar(30), typ char(1), persnr integer ); alter table adresse add constraint fk_adr_pers foreign key (persnr) references Person (persnr) ; alter table person add constraint c_geschl check ( geschlecht in ('M', 'W' ) ) ; drop table person; 4

Beispiele für SQL-Statements: DDL Sequences Eine Sequence ist ein Nummerngenerator zur automatischen Versorgung eines Primärschlüssels mit unterschiedlichen Werten. Eine Sequence wird erzeugt mit: create sequence <seq.name> [start with n] [increment by m]; Einfachste Form: create sequence doznr_seq; Der Aufruf einer Sequence ist nicht standardisiert!!!! Oracle: doznr_seq.nextval bzw. doznr_seq.currval PostgreSQL: nextval( doznr_seq ) bzw. currval( doznr_seq ) Löschen einer Sequence: drop sequence <seq.name>; 5

Beispiele für SQL-Statements: DDL Hinzufügen einer neuen Spalte zu einer bestehenden Tabelle: alter table person add [column] bonus char(1); Löschen einer Spalte aus einer bestehenden Tabelle: alter table person drop column bonus; 6

Wichtige Standard SQL-99 Datentypen: integer smallint numeric decimal float real double precision bit bit varying binary large object (blob) character character varying (varchar) national character national character varying character large object (clob) national character large object date time time with time zone timestamp timestamp with time zone interval boolean 7

Beispiele für SQL-Statements: DML ORACLE insert into person values (persnr_seq.nextval, 'Meier', 'Kurt', '12.12.1980', 'M' ); insert into adresse values (adrnr_seq.nextval, '12345', 'Teststadt', 'Teststr.12', 'P', persnr_seq.currval ); commit; update person set gebdat = '12.12.1980' where persnr = 12; commit; delete from person where name = 'Meier'; commit; select persnr, name, vorname from person where persnr = 1; 8

Beispiele für SQL-Statements: DML PostgreSQL insert into person values (nextval('persnr_seq'), 'Meier', 'Kurt', '12.12.1980', 'M' ); insert into adresse values (nextval('adrnr_seq'), '12345', 'Teststadt', 'Teststr.12', 'P', currval('persnr_seq') ); commit; update person set gebdat = '12.12.1980' where persnr = 12; commit; delete from person where name = 'Meier'; commit; select persnr, name, vorname from person where persnr = 1; 9

Eigenschaften der Anfragesprache SQL: ist die einzige Kommunikationsmöglichkeit mit relationalen Datenbanksystemen; ist standardisiert; letzte Version: SQL-99, veröffentlicht unter ISO 9075: 2003; ist deskriptiv, d.h. man beschreibt das Ergebnis, nicht den Algorithmus dahin; operiert auf Mengen (Relationen als Mengen von Datensätzen); ist abgeschlossen, d.h. das Ergebnis eines SQl-statements ist wieder eine Relation; ist optimierbar; besteht aus 2 Komponenten: DDL: Data Definiton Language; DML: Data Manipulation Language; 10

Chronologie des SQL-Standards (Quelle: Wikipedia): etwa 1975: SEQUEL = Structured English Query Language, der Vorläufer von SQL, wird für das Projekt System R von IBM entwickelt. 1979: SQL gelangt mit Oracle V2 erstmals durch Relational Software Inc. auf den Markt. 1986: SQL1 wird von ANSI als Standard verabschiedet. 1987: SQL1 wird von der Internationalen Organisation für Normung (ISO) als Standard verabschiedet und 1989 nochmals überarbeitet. 1992: Der Standard SQL2 oder SQL-92 wird von der ISO verabschiedet. 1999: SQL3 oder SQL:1999 wird verabschiedet. Im Rahmen dieser Überarbeitung werden weitere wichtige Features (wie etwa Trigger oder rekursive Abfragen) hinzugefügt. 2003: SQL:2003 ISO/IEC 9075:2003 wird von der ISO als Nachfolger des SQL:1999- Standards verabschiedet und fügt erste Änderungen für besseren XML-Support ein. 2006: SQL/XML:2006 ISO/IEC 9075-14:2005 legt genauer fest, wie SQL in Zusammenhang mit XML verwendet werden kann. 2008: SQL:2008 ISO/IEC 9075:2008 fügt INSTEAD OF -Trigger und das TRUNCATE - Statement hinzu 2011: SQL:2011 ISO/IEC 9075:2011 ist die aktuelle Revision des SQL-Standards. 11

Im Standard SQL-99 sind beschrieben: Sprachsyntax und Sprachelemente; Datentypen; Datenbankobjekte; Verarbeitung der Statements, Transaktionen; Prozedurale Spracherweiterung; CLI Anbindung (Einbindung in 3GL); multimediale Erweiterungen; objektrelationale Erweiterungen; 12

Standard SQL-99 Datenbankobjekte (die mit SQL erzeugt und/oder verwaltet werden können): table view (Sichten auf bestehende Tabellen, benannte select-statements) domain (benutzerdefinierte spezielle Wertebereiche) constraints procedure, function trigger privilege, role UDT (user defined types) schema (benannte Gruppe von SQL-Objekten, database ) AuthorizationID (Nutzerkennung, user) Catalog (Metadatenbank, Data Dictionary, z.b.: information_schema) Cluster (SQL-server) 13

Standard Constraints: NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK Attribut muss einen Wert haben Attribut oder Attributkombination muss eindeutig sein Attribut oder Attributkombination identifiziert eindeutig (NOT NULL und UNIQUE) Attribut oder Attributkombination referenziert eindeutig einen Primärschlüsselwert oder ist NULL Vergleicht auf das Vorkommen vordefinierter Werte 14

Standard Constraints: Syntaxbeispiel: CREATE TABLE Personentab ( NOT NULL name VARCHAR2(30) CONSTRAINT nn_name NOT NULL, UNIQUE versnr INTEGER CONSTRAINT u_versnr UNIQUE, PRIMARY KEY FOREIGN KEY CHECK persnr INTEGER CONSTRAINT pk_personentab PRIMARY KEY, adrnr INTEGER CONSTRAINT fk_person_adr FOREIGN KEY (adrnr) REFERENCES Adressetab (adrnr) [ ON DELETE CASCADE ], geschlecht CHAR(1) CONSTRAINT c_geschlecht CHECK ( geschlecht in ( M, W ) ) ); 15

Standard Constraints: Im vorigen Syntaxbeispiel wurden alle constraints als Tabellenconstraints deklariert: <Attributname> <Datentyp> CONSTRAINT <constraintname> <constrainttyp> Als Spaltenconstraints mit dem alter table statement: UNIQUE PRIMARY KEY FOREIGN KEY ALTER TABLE Personentab ADD CONSTRAINT u_versnr UNIQUE (versnr); ALTER TABLE Personentab ADD CONSTRAINT pk_person PRIMARY KEY (persnr); ALTER TABLE Personentab ADD CONSTRAINT fk_person_adr FOREIGN KEY (adrnr) REFERENCES Adresse (adrnr) [ON DELETE CASCADE ]; CHECK ALTER TABLE Personentab ADD CONSTRAINT c_geschlecht CHECK (geschlecht in ( M, W )); 16

Wichtige Standard DDL-Statements 1: CREATE TABLE < tabname > ( < table element list >); < table element list > ::= < table element > [ {,< table element >} ] < table element > ::= < Column definition > < Column definition > ::= < column name > < data type > [ DEFAULT < default value > ] [ < column constraint > list ] < Column constraint > list ::= < Column constraint > [< Column constraint > ] < Column constraint > ::= [ CONSTRAINT < constraint name > ] Constraint_Type [ < constraint attributes > ] 17

Wichtige Standard DDL-Statements 2: ALTER TABLE < tabname > ( < alter table action >); < alter table action > ::= ADD [ COLUMN ] <Column definition > ALTER [ COLUMN ] <Column name > SET DEFAULT < default value > ALTER [ COLUMN ] <Column name > DROP DEFAULT DROP [ COLUMN] <Column name > ADD < Table constraint > DROP CONSTRAINT < constraint name> DROP TABLE < tabname > ; 18

Wichtige Standard DDL-Statements 3: Beispiele create table Personentab ( persnr integer constraint pk_perstab primary key, name varchar(30) not null, vorname varchar(30), gebdat date, geschlecht char(1) constraint c_geschl check (geschlecht in ( M, W )), profil varchar(50) ); alter table Personentab add versicherungsnr integer unique; drop table Personentab; 19

Wichtige Standard DDL-Statements 4: Objektrechte Nur der Erzeuger einer Tabelle hat auch die Rechte, die Inhalte dieser Tabelle zu ändern. Sollen auch andere Nutzer die Tabelle ändern können, brauchen sie die entsprechenden Rechte dazu. Standard Rechte auf Datenbankobjekten sind: SELECT [ ( < column name > [ {, < column name > } ] ) ] INSERT [ ( < column name > [ {, < column name > } ] ) ] UPDATE [ ( < column name > [ {, < column name > } ] ) ] REFERENCES [ ( < column name > [ {, < column name > } ] ) ] DELETE EXECUTE TRIGGER 20

Wichtige Standard DDL-Statements 5: Objektrechte zuweisen GRANT ALL PRIVILEGES < privilege list > ON <Object name> TO < grantee > [ {, < grantee > } ] [ WITH GRANT OPTION ]; < privilege list > ::= < privilege > [ {, < privilege > } ] < Object name > ::= < table name > < procedure > < function > < UDT > < grantee > ::= PUBLIC < AuthorizationID > Beispiel: Grant select, update, insert on Personentab to PUBLIC; 21

Wichtige Standard DDL-Statements 6: Objektrechte wegnehmen REVOKE [ GRANT OPTION FOR ] ALL PRIVILEGES < privilege list > ON <Object name> FROM < grantee > [ {, < grantee > } ] ; < privilege list > ::= < privilege > [ {, < privilege > } ] < Object name > ::= < table name > < procedure > < function > < UDT > < grantee > ::= PUBLIC < AuthorizationID > Beispiele: revoke select, update, insert on Personentab from PUBLIC; Grant update on Personentab to brackly with grant option; Revoke grant option for update on Personentab from brackly; Revoke references on Personentab from brackly cascade constraints; 22

Wichtige Standard DDL-Statements 7: Transaktionsstatements Datenbanken arbeiten nach dem Transaktionskonzept, d.h. Datenmanipulationsoperationen werden zu Gruppen zusammengefasst, so dass am Ende die Daten wieder in einem Zustand sind, der den vorgegebenen Geschäftsregeln entspricht! Eine Transaktion muss also explizit beendet werden. Dazu gibt es zwei Statements: COMMIT erfolgreiches Ende einer Transaktion; ROLLBACK ABORT erfolgloses Ende einer Transaktion; 23

Wichtige Standard DDL-Statements 8: Transaktionsstatements Beispiel: Annahme: für die Personendatenbank gilt die Geschäftsregel: R: jede Person muss eine gültige Adresse haben Folge: zu jedem Eintrag in die Tabelle Personentab muss es einen entsprechenden Eintrag in die Tabelle Adressentab geben! T: insert into Personentab values (01, Axel, Schweiss, 01.01.1980, M ); insert into Adressentab values (001, 55334, Teststadt, Teststrasse 4, 01); commit; Die Transaktion T mit den beiden insert-statements ist also eine erfolgreiche Transaktion! 24

Realisierung der DDL Komponente beim Hersteller ORACLE: DB-Objekt Standard Create alter drop grant revoke Database database Index n Function Procedure Rechte Datenbankobjekte: Role Schema schema Sequence n Synonym n Table Tablespace n Trigger Type UDT User authorizationid View 25

Realisierung der DDL Komponente beim Hersteller ORACLE: Beispiele: create index i_name on Personentab (name); drop index i_name; Create sequence persnr_seq [start with < wert > ] [ increment by < wert > ]; Create sequence persnr_seq; Drop sequence persnr_seq; Create tablespace media data file c:\oracle\db\media.ora size 500 M; Alter tablespace media add data file c:\oracle\db\media2.ora size 200 M; drop tablespace media cascade; create user brackly identified by test default tablespace media quota 20 M on media; alter user brackly identified by wrglprnft; drop user brackly cascade; 26

Realisierung der DDL Komponente beim Hersteller ORACLE: Zusätzlich zu den Standard Objektrechten bietet ORACLE zwei weitere wichtige Konzepte an: 1. Systemrechte: Es gibt ca. 80 Systemrechte, z.b.: create table, create session, create sequence, create procedure, Beim Anlegen eines neuen Benutzers (create user..) muss mindestens das create session Recht vergeben werden! Syntax: Grant < Systemrecht liste > to PUBLIC user role [ with admin option]; revoke < Systemrecht liste > from PUBLIC user role; 27

Realisierung der DDL Komponente beim Hersteller ORACLE: Zusätzlich zu den Standard Objektrechten bietet ORACLE zwei weitere wichtige Konzepte an: 2. Role: Rechte (Objekt- und Systemrechte) können in Rollen gesammelt werden: create role daus; grant create table, create sequence to daus; grant select on brackly.personentab to daus; create user meier identified by schulze default tablespace media; grant daus to meier; revoke daus from meier; drop role daus; 28

Realisierung der DDL Komponente beim Hersteller ORACLE: ORACLE bietet verschiedene Sichten auf Datenbankobjekte an: user_catalog user_constraints user_free_space user_indexes user_ind_columns user_segments user_sequences user_source user_tables user_tablespaces user_tab_columns user_triggers user_ts_quotas user_views Informationen über Tabellen, views, synonyme, sequences Definitionen der constraints wieviel Speicherplatz ist noch im Zugriff Informat. über angelegte Indices welche Spalten in welchem Index Informationen über vom user angelegte Segmente Informat. über angelegte sequences Informationen über stored procedures/functions Informationen über angelegte Tabellen Beschreibung zugreifbarer Tablespaces welche Spalten in welcher Tabelle Informationen über angelegte Datenbanktrigger Tablespace-Quoten des users view-definitionen des users 29

Realisierung der DDL Komponente beim Hersteller ORACLE: ORACLE bietet verschiedene Sichten auf Datenbankobjekte an: Sichten bzgl Rechte: user_col_privs user_col_privs_made user_col_privs_recd user_role_privs role_sys_privs role_tab_privs user_sys_privs user_tab_privs user_tab_privs_made user_tab_privs_recd Rechte auf Spalten als Besitzer, grantor oder grantee vergebene Rechte auf Spalten erhaltene Rechte auf Spalten Rechte, die dem user über Rollen zugewiesen sind Systemrechte der Rolle Tabellenrechte der Rolle Systemrechte des users, direkt gegeben Objektrechte des users, direkt vergeben vergebene Rechte auf Tabellen erhaltene Rechte auf Tabellen 30

Standard SQL-99 DML Komponente: Datenmanipulations-Statements: insert Statement update Statement delete Statement select Statement Einfügen neuer Datensätze Aktualisieren bestehender Datensätze Löschen bestehender Datensätze Anzeigen bestehender Datensätze Das select Statement kann in allen anderen Statements verwendet werden. 31

Standard SQL-99 DML Komponente: insert Statement Syntax: INSERT INTO < table name > [ ( < Column name > [ {, < Column name > }... ] ) ] < select statement > VALUES ( < value comma list > ) ; Wird nach dem Tabellennamen keine Liste der zu füllenden Attribute angegeben, muss jedes Attribut der Tabelle mit einem Wert (auch NULL möglich) gefüllt werden! Mit der VALUES Klausel können direkt konstante Werte eingefügt werden. 32

Standard SQL-99 DML Komponente: insert Statement Beispiele: Person: (persnr, vorname, name, gebdat, geschlecht) Sequence für die persnr: persnr_seq insert into Person (persnr, name) values (persnr_seq.nextval, Meier ); Ergebnis: Falls kein anderes Attribut der Tabelle auf NOT NULL gesetzt ist, wird ein neuer Datensatz eingefügt, der nur in den Attributen persnr und name einen Wert ungleich NULL enthält. insert into Person values (persnr_seq.nextval, NULL, Meier, NULL, NULL); Ergebnis: Ein neuer Datensatz wird eingefügt mit den gleichen Werten wie oben. insert into Person (persnr, gebdat) (select persnr_seq.nextval, sysdate from dual); Ergebnis: Ein neuer Datensatz wird eingefügt mit je einem Wert für persnr und gebdat. dual ist eine virtuelle Systemtabelle, die man benutzt, wenn man eine Tabelle braucht (wie in der from Klausel eines select Statements), aber eigentlich keine Tabelle hat (Oracle-spezifisch!!)! 33

Standard SQL-99 DML Komponente: delete Statement Syntax: DELETE FROM < table name > [ WHERE - Klausel ]; Beispiele: delete from Person; Ergebnis: Alle Datensätze der Tabelle Person werden gelöscht. Die Tabelle selbst bleibt bestehen! delete from Person where gebdat < 01.01.1920 ; Ergebnis: Alle Datensätze der Personen, die vor dem 1.1.1920 geboren wurden, werden gelöscht, sofern nicht in anderen Tabellen Referenzen durch Fremdschlüsselattribute bestehen!!! Bestehen solche Referenzen, müssen erst die Datensätze aus den abhängigen Tabellen (z.b. Adressentab) gelöscht werden. Alternative: Bei der Formulierung des Fremdschlüsselconstraints die Option ON DELETE CASCADE verwenden (gefährlich!!) 34

Standard SQL-99 DML Komponente: update Statement Syntax: UPDATE < table name > SET < column name > = < scalar expression > [ {, < column name > = < scalar expression > }... ] (< column list >) = ( select Statement ) [ WHERE - Klausel ]; Auch hier ist sehr wichtig, die optionale WHERE - Klausel nicht zu vergessen, da sonst alle Datensätze entsprechend den Vorgaben aktualisiert werden!! 35

Standard SQL-99 DML Komponente: update Statement Beispiele: update dozent set vorname = Klaus, name = Trophobie ; Ergebnis: Alle Datensätze der Tabelle Dozent bekommen die Werte Klaus und Trophobie in den Attributen vorname und name!! update dozent set vorname = Klaus, name = Trophobie where doznr = 25; Ergebnis: Nur der Datensatz zur doznr 25 wird verändert.!! update dozent set (vorname, name) = (select vorname, name from person where persnr = 17) where doznr = 32; Ergebnis: Nur der Datensatz zur doznr 32 wird verändert.!! 36

Standard SQL-99 DML Komponente: select Statement Das Standard SQL-99 select Statement besteht aus den folgenden Klauseln: SELECT - Klausel FROM - Klausel [ WHERE - Klausel [ GROUP BY - Klausel bestimmt das Layout der Ergebnistabelle bestimmt die Quellen der Daten bestimmt die Selektionskriterien ] bestimmt die Gruppierung bei Gruppenfunktionen [ HAVING - Klausel bestimmt Einschränkungen der Gruppierung ] ] [ ORDER BY - Klausel bestimmt die Sortierreihenfolge der Ausgabe ] select - und from - Klausel sind Pflicht, alle anderen Klauseln sind optional! 37

Standard SQL-99 DML Komponente: select Statement Beispiele: select vorname, name from dozent; select * from dozent; select name as Dozentenname, gebdat as Geburtstag from dozent; select distinct name from dozent; select vorname, name, fbname from dozent join fachbereich using (fbnr); select count(*) from halten where doznr = 3; select name, (select count(*) from halten where doznr = dozent.doznr) as Anz_vera, (select count(*) from pruefung where doznr = dozent.doznr) as Anz_prue from dozent; select substr(vorname,1,1) '. ' name as Name, cos(doznr), (current_date - gebdat)/365 as P_Alter from dozent; 38

Standard SQL-99 DML Komponente: select Statement SELECT - Klausel: (Angabe des Layouts der Ergebnistabelle) select [ DISTINCT ALL ] < column expression > [ AS < name > ] [ {, < column expression > [ AS < name > ] } ] *; < column expression > ::= < numeric expression > < string expression > (select statement) < numeric expression > ::= < attribute name > < parameter > < host variable > < constant > < scalar function > < aggregat function > ( < column expression > + - * / < column expression > ) < scalar function > ::= übliche mathematische Funktionen wie sin(), cos(), abs(), sqrt(), power(), etc... < aggregat function > ::= sum() count() max() min() avg() Beispiel: select preis*1.2 as Neupreis, cos(abs(preis - productnr))/27 from product; 39

Standard SQL-99 DML Komponente: select Statement SELECT - Klausel: select [ DISTINCT ALL ] < column expression > [ AS < name > ] [ {, < column expression > [ AS < name > ] } ] *; < column expression > ::= < numeric expression > < string expression > ( select statement ) < string expression > ::= < attribute name > < parameter > < host variable > < constant > < string function > ( < column expression > < column expression > ) < string function > ::= substring(<string> FROM <start> [ FOR <length> ] ) char_length() current_date current_user lower() upper() Beispiel: select substring(vorname FROM 1 FOR 1). name from Personentab; 40

Standard SQL-99 DML Komponente: select Statement SELECT - Klausel: Aggregatfunktionen: select count(*) from Pruefung; select count(note) from Pruefung; select count(*) from Pruefung group by doznr; select sum(preis) from Produkttab; select max(preis) from Produkttab; select min(preis) from Produkttab; Anzahl der Datensätze in Pruefung Anzahl der Datensätze in Pruefung, die in note einen Wert ungleich NULL haben Anzahl der Datensätze in Pruefung pro Dozent Gesamtsumme der Preise aller Produkte Maximaler Preis über alle Produkte Minimaler Preis über alle Produkte select avg(preis) from Produkttab; Mittlerer Preis über alle Produkte 41

Standard SQL-99 DML Komponente: select Statement FROM - Klausel: (Angabe der Datenquellen) Beispiele: FROM < Table reference > [ {, < Table reference > } ] < Table reference > ::= < Table name > [ AS < alias > ] < Table subquery > [ AS < alias > ] < joined Table > < Table subquery> ::= ( select Statement ) select * from dozent; select * from dozent AS d where d.doznr < 2000; select distinct matnr from (select matnr, vnr, semester from besuchen where matnr > 10); 42

Standard SQL-99 DML Komponente: select Statement FROM - Klausel: < joined Table > ::= < Table reference > CROSS JOIN < Table reference > < Table reference > [ NATURAL ] [ < join type > ] join < Table reference > [ < join specification > ] < join type > ::= INNER { LEFT RIGHT FULL } [ OUTER ] UNION < join specification > ::= ON < search condition > USING ( <join column name > [ {, < join column name > } ] ) 43

Standard SQL-99 DML Komponente: select Statement FROM - Klausel: Beispiele (ohne joined Table): select d.fbnr, name, vorname, fbname from dozent AS d, fachbereich; Ergebnis: das kartesische Produkt aller Datensätze aus Fachbereich mit allen Datensätzen aus Dozent! select d.fbnr, name, vorname, fbname from dozent AS d, fachbereich AS f where f.fbnr = d.fbnr; Ergebnis: Alle Datensätze aus Dozent mit ihrem zugehörigen Datensatz aus Fachbereich! select d.doznr, d.name, d.vorname, h.vnr, h.semester from dozent d, (select doznr, vnr, semester from halten where semester= SS2012 ) h where d.doznr = h.doznr; Ergebnis: Alle Datensätze aus Dozent mit ihrem im SS2012 gehaltenen Veranstaltungen! 44

Standard SQL-99 DML Komponente: select Statement FROM - Klausel: Beispiele (joined Table): select dozent.doznr, name, vorname, fbname from dozent CROSS JOIN fachbereich; Dozent CROSS JOIN Fachbereich liefert das kartesiche Produkt beider Tabellen, jeder Datensatz der einen Tabelle wird mit jedem Datensatz der anderen Tabelle verknüpft. select doznr, name, vorname, fbname from dozent NATURAL JOIN fachbereich; Beim NATURAL JOIN wird zunächst das kartesische Produkt der Tabellen gebildet. Dann werden implizit die namensgleichen Attribute in beiden Tabellen mit = verglichen. Mehrere solche Gleichheitsbedingungen werden mit dem booleschen Operator AND verknüpft. Abschließend werden namensgleiche Attribute herausprojiziert, so dass jeder Attributname in der Ergebnistabelle nur einmal vorkommt: Beispiel: Select * from dozent NATURAL JOIN student; 45

Standard SQL-99 DML Komponente: select Statement FROM - Klausel: Beispiele (joined Table): select doznr, name, vorname, fbname from dozent INNER JOIN fachbereich USING (fbnr); INNER ist default und kann weggelassen werden. Ohne das Schlüsselwort NATURAL muss über USING angegeben werden, welche namensgleichen Attribute im kartesischen Produkt der beiden Tabellen auf Wertegleichheit überprüft werden sollen! Diese werden dann nur einmal ausgegeben. Weitere namensgleiche Attribute werden doppelt ausgegeben! Beispiel: select * from dozent join student using(vorname, name); select dozent.doznr, name, vorname, fbname from dozent JOIN fachbereich ON (dozent.fbnr = fachbereich.fbnr); ON <search condition> liefert aus dem kartesischen Produkt der beiden Tabellen die Datensätze, die der search condition genügen. Hier sind alle arithmetischen Vergleichsoperatoren zulässig, nicht nur =. Alle selektierten Attribute werden ausgegeben, namensgleiche Attribute doppelt. Diese müssen mit einem vorangestellten Tabellennamen eindeutig gemacht werden! Beispiel:select doznr, dozent.name, dozent.gebdat, matnr, student.name, student.gebdat from dozent join student on(dozent.gebdat < student.gebdat); 46

Standard SQL-99 DML Komponente: select Statement FROM - Klausel: Beispiele (joined Table): select * from dozent UNION JOIN fachbereich; Liefert eine neue Tabelle mit allen Attributen aus Dozent und allen Attributen aus Fachbereich. Hat die Tabelle Dozent 5 Datensätze und die Tabelle Fachbereich 8 Datensätze, enthält die neue Tabelle also 13 Datensätze, wobei die Dozentendatensätze mit NULL-Werten in den Attributen von Fachbereich ergänzt werden und umgekehrt. Outer Join: Ein Outer Join liefert wie ein Inner Join zunächst die Datensätze aus dem kartesischen Produkt der beiden Tabellen, entsprechend dem wertemäßigen Vergleich der Attribute mittels using bzw. search condition. Zusätzlich werden auch solche Datensätze der einen Tabelle ausgegeben, die nur in einer Tabelle vorkommen und zu denen es gemäß dem Vergleich keine entsprechenden Datensätze in der anderen Tabelle gibt (sogenannte Dangling-Tupel). 47

Standard SQL-99 DML Komponente: select Statement FROM - Klausel: Beispiele (joined Table, OUTER JOIN): select doznr, name, vorname, vnr, semester from dozent FULL OUTER JOIN halten USING (doznr); Liefert auch Dozenten, die keine Veranstaltung gehalten haben und Veranstaltungen, die noch nicht gehalten wurden. select doznr, name, vorname, vnr, semester from dozent LEFT OUTER JOIN halten USING (doznr); Liefert auch Dozenten, die keine Veranstaltung gehalten haben (Datensätze der linken Tabelle, zu denen es keine Einträge in der rechten Tabelle gibt). select doznr, name, vorname, vnr, semester from dozent RIGHT OUTER JOIN halten USING (doznr); Liefert auch Veranstaltungen, die nicht gehalten wurden (Datensätze der rechten Tabelle, zu denen es keine Einträge in der linken Tabelle gibt). 48

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: (Angabe von Suchkriterien) WHERE < conditional expression > < conditional expression > ::= < conditional term > < conditional expression > OR < conditional term > < conditional term > ::= < conditional factor > < conditional term > AND < conditional factor > < conditional factor > ::= [ NOT ] < conditional test > < conditional test > ::= < conditional primary > [ [ NOT ] TRUE FALSE ] < conditional primary > ::= < simple condition > ( < conditional expression > ) < simple condition > ::= < comparisation condition > < BETWEEN condition > < LIKE condition > < IN condition > < MATCH condition > < EXISTS condition > 49

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: WHERE < conditional expression > Vereinfacht ausgedrückt: eine where - Bedingung ist eine Kombination von einfachen Suchbedingungen, verknüpft mit den booleschen Operatoren NOT, AND oder OR Einfache Suchbedingungen sind: Vergleichsbedingungen: <, <=, =, >, >=, <>, IS, IS NOT BETWEEN Bedingung LIKE Bedingung IN Bedingung MATCH Bedingung EXISTS Bedingung 50

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: Vergleichsbedingung Vorab ein paar einfache Beispiele: select doznr, name from dozent where gebdat < 31.12.1990 ; BETWEEN Bedingung select doznr, name from dozent where gebdat between 31.12.1990 and 01.01.1995 ; LIKE Bedingung IN Bedingung MATCH Bedingung select doznr, name from dozent where name like M% ; select doznr, name from dozent where name in ( Meier, Schulze, Schmidt, Kunz ); select doznr, name from dozent where doznr match unique (select doznr from halten); EXISTS Bedingung select doznr, name from dozent where not exists (select * from halten where doznr = dozent.doznr); 51

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: Vergleichsbedingungen Syntax: where < column expression > < Vergleichsoperator > < row constructor > < column expression > ::= siehe select - Klausel < row constructor > ::= < column expression > NULL (select statement ) < Vergleichsoperator > ::= < <= = <> > >= IS IS NOT Beispiel: select vorname, name from dozent where (gebdat < to_date('31.12.1990','dd.mm.yyyy') OR gebdat < (select gebdat from dozent where name= 'Huana') ) AND vorname IS NOT NULL; 52

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: BETWEEN Bedingung Syntax: where < column expression > [ NOT ] BETWEEN < row constructor > AND <row constructor > Beispiel: select vorname, name from dozent where gebdat BETWEEN (select gebdat from dozent where name = Huana ) AND (select max(gebdat) from dozent); 53

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: LIKE Bedingung Syntax: where < character string expression > [ NOT ] LIKE < pattern > [ ESCAPE < character > ] < pattern > ::= < character string expression > Sonderzeichen: _ Platzhalter für genau ein Zeichen % Platzhalter für eine beliebige Zeichenkette Ausschalten der Bedeutung der Sonderzeichen mit ESCAPE Beispiele: select doznr from dozent where name like M_ller% ; select dateiname from Mediendateien where dateiname like =_% ESCAPE = ; 54

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: IN Bedingung Syntax: where < column expression > [ NOT ] IN < row constructor> Beispiele: select name, vorname from dozent NATURAL JOIN fachbereich where ort in ( Informatik, Betriebswirtschaft, Elektrotechnik ); select vorname, name from dozent where doznr not in (select doznr from halten where semester = WS2012/13 ); 55

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: MATCH Bedingung Syntax: where < column expression > MATCH [ UNIQUE ] (select statement) Beispiele: a) wird UNIQUE nicht angegeben, ist die MATCH Bedingung äquivalent zur IN Bedingung! b) wird UNIQUE angegeben, hat die MATCH Bedingung den Wert TRUE, falls das select Statement genau einen Wert ergibt, der dem column expression entspricht! a) select vorname, name from dozent where doznr MATCH (select doznr from halten where semester= SS2013 ); b) select vorname, name from dozent where doznr MATCH UNIQUE (select doznr from halten where semester = SS2013 ); 56

Standard SQL-99 DML Komponente: select Statement WHERE - Klausel: EXISTS Bedingung Syntax: where [ NOT ] EXISTS (select statement) Diese Bedingung testet auf die Existenz kompletter Datensätze! Deshalb muß das select Statement eine select * Klausel enthalten! Außerdem müssen die beiden select Statements über eine Primär- Fremdschlüssel Beziehung verbunden werden! Beispiel: select vorname, name from dozent where NOT EXISTS (select * from pruefung where doznr = dozent.doznr); 57

Standard SQL-99 DML Komponente: select Statement GROUP BY - Klausel: (Gruppierung bei Gruppenfunktionen) Syntax: GROUP BY < grouping column list > Beispiele: Die group by Klausel muß gesetzt werden, wenn in der select Klausel neben Gruppenfunktionen noch andere Ausdrücke selektiert werden! Zur Erinnerung: Gruppen- bzw Aggregatfunktionen sind: max(), min(), sum(), avg(), count() 1. select count(*) from halten; Ergebnis: Die Anzahl der Datensätze in der Tabelle Halten. Eine Gruppierung ist nicht erforderlich. 58

Standard SQL-99 DML Komponente: select Statement GROUP BY - Klausel: Beispiele: 2. select doznr, count(*) from halten group by doznr; Ergebnis: Die Anzahl der Halten-Datensätze pro Dozent in der Tabelle Halten. Eine Gruppierung ist notwendig, da außer der Gruppenfunktion noch ein Attribut selektiert wird! 3. select doznr, max(count(*)) from Halten group by doznr; Ergebnis: Die Dozentennummern mit den meisten Halten-Datensätzen in der Tabelle Halten. Eine Gruppierung ist notwendig, da außer der Gruppenfunktion noch ein Attribut selektiert wird und eine Gruppenfunktion auf eine andere Gruppenfunktion angewendet wird! Wird von Oracle und PostgreSQL nicht unterstützt!! 4. select doznr, vorname, name, count(*) from dozent natural join halten group by doznr, vorname, name; Die Gruppierung muß auf alle Attribute der select Klausel außer den Gruppenfunktionen angewendet werden! 59

Standard SQL-99 DML Komponente: select Statement HAVING - Klausel: (Einschränkende Bedingungen zur Gruppierung) Syntax: HAVING < simple condition > Beispiele: select doznr, count(*) from halten group by doznr HAVING count(*) > 2; Ergebnis: Die Dozenten die mehr als 2 Datensätze in der Tabelle Halten haben. select vorname, name from dozent natural join halten group by vorname, name HAVING count(*) = (select max(count(*)) from halten group by doznr); Ergebnis: Die Dozenten mit den meisten Halten-Datensätzen. 60

Standard SQL-99 DML Komponente: select Statement ORDER BY - Klausel: (Bestimmung der Sortierreihenfolge) Syntax: ORDER BY < sort specification > [ {, < sort specification > }... ] < sort specification > ::= < scalar expression > [ ASC DESC ] Beispiele: select doznr, name, vorname from dozent ORDER BY name; Ergebnis: Die Datensätze werden nach Name sortiert ausgegeben. select doznr, name, vorname from dozent ORDER BY name, vorname; Ergebnis: Die Datensätze werden nach Name, dann nach Vorname sortiert ausgegeben. select doznr, name, vorname, gebdat from dozent ORDER BY gebdat ASC; Ergebnis: Die Datensätze werden aufsteigend nach Geburtsdatum sortiert ausgegeben. 61

Standard SQL-99 DML Komponente: select Statement Mengentheoretische Operationen: Da select Statements immer eine Tabelle, also eine Menge von Datensätzen als Ergebnis haben, können select Statements durch die aus der Mathematik bekannten Mengenoperatoren Vereinigung, Durchschnitt und Differenz verknüpft werden. Syntax: (select Statement) UNION INTERSECT EXCEPT (select Statement); Achtung: Oracle hat die Differenz mit MINUS statt EXCEPT realisiert!! PostgreSQL verwendet EXCEPT Bedingungen an die select Statements: 1. Beide Statements müssen die gleiche Anzahl von Attributen in der select Klausel haben! 2. Beide Statements müssen in der Reihenfolge vergleichbare Datentypen in der select Klausel haben! 62

Standard SQL-99 DML Komponente: select Statement Mengentheoretische Operationen: Beispiele: (select vorname, name from dozent where gebdat < 01.01.1990 ) UNION (select vorname, name from dozent where geschlecht = W ); Ergebnis: Alle Dozenten, die vor dem 1.1.1990 geboren sind oder die weiblich sind. (select vorname, name from dozent where gebdat < 01.01.1990 ) INTERSECT (select vorname, name from dozent where geschlecht = W ); Ergebnis: Alle weiblichen Dozenten, die vor dem 1.1.1990 geboren sind. (select vorname, name from dozent where gebdat < 01.01.1990 ) EXCEPT (select vorname, name from dozent where geschlecht = W ); Ergebnis: Alle männlichen Dozenten, die vor dem 1.1.1990 geboren sind. 63

Standard SQL-99 DML Komponente: select Statement Mengentheoretische Operationen: Beispiele: (select vorname, name, gebdat from dozent where gebdat < 01.01.1990 ) UNION (select vorname, name from dozent where geschlecht = W ); Ergebnis: Fehler!! Ungleiche Anzahl von Attributen in den select-klauseln!! (select vorname, gebdat from dozent where gebdat < 01.01.1990 ) INTERSECT (select gebdat, name from dozent where geschlecht = W ); Ergebnis: Fehler!! Nicht vergleichbare Datentypen!! (select doznr, name from dozent where gebdat < 01.01.1990 ) EXCEPT (select fbnr, fbname from fachbereich); Ergebnis: syntaktisch korrekt, semantisch Unsinn! 64

Standard SQL-99 Fazit: Die DML-Komponente des Standard SQL-99 Sprachumfangs enthält die Statements insert, update, delete und select. Nur darüber können Tabellendaten hinzugefügt, verändert, gelöscht oder angezeigt werden. insert, update und delete Statements müssen irgendwann durch ein Transaktionsstatement (COMMIT oder ROLLBACK) bestätigt oder zurückgenommen werden. (Transaktionskonzept!) Die DDL-Komponente von SQL-99 enthält die Statements create, alter, drop, grant und revoke. Außerdem werden die beiden Transaktionsstatements commit und rollback dazugezählt. create, alter, drop, grant und revoke haben im Standard ein implizites commit! 65