125
1 Einführung in SQL Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Embed Size (px)

Citation preview

Page 1: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

1

Einführung in SQLEinführung in SQLUniverseller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Page 2: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 2

SQL – ÜberblickSQL – Überblick Nichtprozedurale Sprache zum Zugriff auf Daten. Herstellerspezifische prozedurale Erweiterungen

– Oracle -> PL/SQL Deklarative Beschreibung der gewünschten Daten Genormt aber doch nicht einheitlich

– z.B.: DB-Verwaltung bei Oracle in SQL integriert Themen:

– Geschichte– SQL - Befehlskategorien– Elementare Datentypen und Operatoren– Einfache Abfragen

Page 3: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 3

GeschichteGeschichte 1974 – SEQUEL (Chamberlin, Boyce)

– Structured English Query Language– basierend auf SQUARE, einer mathematischen

Formelsprache Erster Prototyp: System R – IBM / San Jose

~1975 (Basis für DB2 und SQL/DS)– Wassergekühlter Computer

Erstes Produkt: Oracle – 1979 Version 2!!– PDP 11, Assembler– basiert auf veröffentlichten "System R"

Spezifikationen Derzeit gültiger ANSI Standard – SQL3

Page 4: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 4

Relationale Datenbank (1/3)Relationale Datenbank (1/3)

Definition:– Eine relationale Datenbank ist eine Datenbank, die

aus Sicht des Benutzers aus Tabellen und nur aus Tabellen besteht.

– Relation – mathematischer Ausdruck für Tabelle Atomare Elemente Gesamter Informationsinhalt in Daten Basisarbeit: Dr. E. F. Codd (Codd Father!!)

A Relational Model of Data for Large Shared Data Banks" (Comm. of ACM 1970)

Page 5: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 5

Relationale Datenbank (2/3)Relationale Datenbank (2/3)

Beispiel:– Lieferanten - Produkte – Versand– 2 Entities mit Relation– Keine "Links" oder "Pointer"– zumindest nicht erkennbar für den Benutzer

Page 6: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 6

Relationale Datenbank (3/3)Relationale Datenbank (3/3)

Lieferanten: Versand

LNR LNAME STATUS ORT LNRPNR MengeS1 P1 300

S1 Markovitsch 20 Wien S1 P2 200S2 Adam 10 Graz S1 P3 300S3 Schwarz 30 Graz S1 P4 200S4 Pichler 20 Wien S1 P5 100S5 Huber 30 Linz S1 P6 100

S2 P1 300S2 P2 400

Produkte S3 P2 200S4 P2 200

PNR PNAME FARBE GEWICHT S4 P4 300S4 P5 400

P1 Scheibe messing 12P2 Blozen silber 17P3 Schraube kupfer 17P4 Schraube messing 14P5 Haken silber 12P6 Stift messing 19

Page 7: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 7

SQL Befehlskategorien - SQL Befehlskategorien - OracleOracleDML – Data Manipulation Language

– z.B.: SELECT, INSERT, UPDATE, DELETEDDL – Data Definition Language

– z.B.: (CREATE, ALTER, DROP, RENAME) TABLE

Transaktionssteuerung (COMMIT etc.)System- und Session – Steuerung

– z.B.: ALTER SYSTEM

Page 8: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 8

Elementare Datentypen (1/3)Elementare Datentypen (1/3)

Zeichenketten– char(<size>)

z.B.: char(10) feste Größe, rechts mit Leerzeichen aufgefülltmaximal 2000 Zeichen

– varchar2(<size>)z.B.: varchar2(500)variable Länge, maximal 4000 Zeichen

Page 9: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 9

Elementare Datentypen (2/3)Elementare Datentypen (2/3)

Zahlen– number(<p>,<s>)

z.B.: number(6,2) - 1226.45p: Precission – maximal 38s: Scale – NachkommastellenRundung wenn Anzahl der Nachkommastellen > snegatives "s" möglich - rundet links vom Dezimalpunkt

z.B.: 12345.345 in number(5,-2) ergibt 12300

Page 10: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 10

Elementare Datentypen (3/3)Elementare Datentypen (3/3)

Datum und Zeit– date

belegt 7 Bytes - CC YY MM DD HH MI SSFunktionen to_date, sysdateDatum ohne Uhrzeit -> Mitternacht (00:00:00)Standard format: DD-MON-YY

Page 11: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 11

Operatoren und Literale (1/2)Operatoren und Literale (1/2)

Operator: manipuliert Datenelemente und liefert ein Ergebnis– unäre Operatoren - <operator><operand>

z.B.: +5 oder –2

– binäre Operatoren - < operand ><operator><operand>

+ - * /

– Verkettungsoperator – verbindet Zeichenketten || - z.B.: 'Oracle' || 'Datenbank' ergibt 'OracleDatenbank'

Page 12: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 12

Operatoren und Literale (2/2)Operatoren und Literale (2/2)

Literale– repräsentieren einen konstanten Wert– Text oder Zeichenketten in einfachen Hochkomma:

'Die Schule ist toll'– Ganze Zahlen (Integer): 24 oder –455– Zahlen (Number) 24.45 oder –433.78 oder 2.3E-4

Page 13: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 13

Einfache Abfragen – SELECT 1/12Einfache Abfragen – SELECT 1/12Allgemeiner Aufbau der Abfrage

– SELECT <attributeList> FROM <relations>WHERE <condition>ORDER BY <orderClause>

Liefert als Ergebnis eine Menge von Datensätzen (Dataset oder Resultset)

Beispieldatenbank - Anhang

Page 14: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 14

Einfache Abfragen – SELECT 2/12Einfache Abfragen – SELECT 2/12

SQL> SELECT * FROM jobs;

JOBID JOB_TITLE MIN_SALARY MAX_SALARY

AD_PRES President 20000 40000

-------

FI_MGR Finance Manager 8200 16000

FI_ACCOUNT Accountant 4200 9000

-------

Page 15: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 15

Einfache Abfragen – SELECT 3/12Einfache Abfragen – SELECT 3/12

SQL> SELECT job_title, min_salary FROM jobs;

JOB_TITLE MIN_SALARY

President 20000

-------

Finance Manager 8200

Accountant 4200

-------

Page 16: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 16

Einfache Abfragen – SELECT 4/12Einfache Abfragen – SELECT 4/12 Alias Namen SQL> SELECT job_title AS ‘‘Title‘‘,

min_salary AS "Minimum Salary" FROM jobs;

Title Minimum Salary

President 20000

-------

Finance Manager 8200

Accountant 4200

-------

Page 17: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 17

Einfache Abfragen – SELECT 5/12Einfache Abfragen – SELECT 5/12 Eindeutigkeit der Ergebnismenge sicherstellen SQL> SELECT DISTINCT department_id

FROM employees;

DEPARTMENT_ID

10

20

30

---

100

110

12 rows selected

Page 18: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 18

Einfache Abfragen – SELECT 6/12Einfache Abfragen – SELECT 6/12 Pseudotabelle "dual" SQL> SELECT SYSDATE, USER FROM dual;

SYSDATE USER

20 -NOV-03 HR

Page 19: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 19

Einfache Abfragen – SELECT 7/12Einfache Abfragen – SELECT 7/12 Ergebniszeilen einschränken SQL> SELECT first_name || ' ' || last_name "Name",

department_id FROM employees WHERE department_id=90;

Name DEPARTMENT_ID

Steven King 90

Neena Kochhar 90

Lex De Haan 90

Vergleichsoperatoren= <> (!=, ^=) <, <=, >, >= Logische Operatoren: NOT, AND, OR

Page 20: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 20

Einfache Abfragen – SELECT 8/12Einfache Abfragen – SELECT 8/12

Sonstige Operatoren– IN, NOT IN, BETWEEN, EXISTS

SELECT * FROM employees WHERE department_id in (10, 20, 90);

SELECT * FROM employees WHERE salary BETWEEN 5000 and 6000;

SELECT * FROM employees e WHERE EXISTS (SELECT 1 FROM departments d WHERE d.department_id = e.department_id AND d.department_name = 'Administration');

Page 21: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 21

Einfache Abfragen – SELECT 9/12Einfache Abfragen – SELECT 9/12

Null Werte– IS NULL, IS NOT NULL

SELECT last_name FROM employees WHERE department_id IS NULL;

LIKE – Pattern-Matching– _, %, Escape clause

_ matched ein einzelnes Zeichen% matched beliebig viele ZeichenEscape Claus erlaubt die Verwendung obiger Zeichen

SELECT * FROM jobs WHERE job_id LIKE 'AC\_%' ESCAPE '\'; WHERE salary BETWEEN 5000 and 6000;

Page 22: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 22

Einfache Abfragen – SELECT 10/12Einfache Abfragen – SELECT 10/12 Sortieren der Ergebniszeilen SQL> SELECT first_name || ' ' || last_name

"Mitarbeiter Name" FROM employeesWHERE department_id=90ORDER BY last_name;

Mitarbeiter Name

---------------------

Lex De Haan

Steven King

Neena Kochar

Page 23: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 23

Einfache Abfragen – SELECT 11/12Einfache Abfragen – SELECT 11/12 Sortieren der Ergebniszeilen mit DISTINCT SQL> SELECT DISTINCT 'Region ' || region_id

FROM hr.countries ORDER BY region_id;ERROR ORA-01791: not a SELECTed expression

SQL> SELECT DISTINCT 'Region ' || region_id FROM hr.countries ORDER BY 'Region ' || region_id;

'Region ' || region_id -------------------------Region 1Region 2Region 3Region 4

Page 24: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 24

Einfache Abfragen – SELECT 12/12Einfache Abfragen – SELECT 12/12 Expressions verwenden z.B.: in SELECT Klausel

– SELECT ((2*4)/(3+1))*10 FROM dual; CASE Expression - "if .. then .. else" Logik

– SELECT country_name, CASE region_id WHEN 1 THEN 'Europa' WHEN 2 THEN 'AMERIKA'WHEN 3 THEN 'Asien' ELSE 'Anderes' END "Kontinent"FROM countries WHERE country_name LIKE 'I%';

COUNTRY_NAME Kontinent

Israel AnderesIndia AsienItaly Europa

Page 25: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 25

QuizQuiz

?

Page 26: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 26

ZusammenfassungZusammenfassung

Geschichte von SQL.Elementare Datentypen und Operatoren.Einfache Abfragebefehle mit

– SELECT, FROM, WHERE und ORDER BY– Operatoren in der WHERE Klause– Pattern-Matching Operatoren

Page 27: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 27

Jemand versucht den Wert: Jemand versucht den Wert: 34567.2255 in ein Feld mit dem 34567.2255 in ein Feld mit dem Datentyp number(7,2) zu speichern. Datentyp number(7,2) zu speichern. Welcher Wert wird tatsächlich Welcher Wert wird tatsächlich gespeichert?gespeichert?

A – 34567.00B – 34567.23C – 34567.22D – 3456.22

Page 28: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 28

Welche Standardanzeigelänge hat ein Welche Standardanzeigelänge hat ein Datumsfeld?Datumsfeld?

A – 8B – 19C – 9D – 6

Page 29: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 29

Gegeben ist die folgende Abfrage:Gegeben ist die folgende Abfrage:SELECT 'Mitarbeiter Name: ' || ename SELECT 'Mitarbeiter Name: ' || ename FROM emp where deptno=10;FROM emp where deptno=10;Welche Komponente ist ein Literal?Welche Komponente ist ein Literal?

A – 10B – enameC – empD – ||

Page 30: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 30

Welche Klause in einer Abfrage Welche Klause in einer Abfrage schränkt die Anzahl der Datensätze schränkt die Anzahl der Datensätze ein?ein?

A – ORDER BYB – SELECTC – FROMD – WHERE

Page 31: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 31

Gegeben ist die folgende Abfrage:Gegeben ist die folgende Abfrage:SELECT empno, ename FROM emp SELECT empno, ename FROM emp where empno=7782 or empno=7876; where empno=7782 or empno=7876; Welcher Operator kann die "OR Welcher Operator kann die "OR Bedingung" ersetzen?Bedingung" ersetzen?

A – INB – BETWEEN .. AND ..C – LIKED – <=

Page 32: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 32

Jemand versucht den Wert: 12345678 Jemand versucht den Wert: 12345678 in ein Feld mit dem Datentyp in ein Feld mit dem Datentyp number(5,-2) zu speichern. number(5,-2) zu speichern. Welcher Wert wird tatsächlich Welcher Wert wird tatsächlich gespeichert?gespeichert?

A – 12345600B – 123456.78C – FehlerD – 123456

Page 33: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 33

Folgende Klauseln können in SQL Folgende Klauseln können in SQL Select statements vorkommen:Select statements vorkommen:1. WHERE1. WHERE2. FROM2. FROM3. ORDER BY3. ORDER BYIn welcher Reihenfolge treten sie auf?In welcher Reihenfolge treten sie auf?

A – 1,3,2B – 2,1,3C – 2,3,1D – Die Reihenfolge ist gleichgültig

Page 34: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 34

FUNKTIONEN FUNKTIONEN „Single Row“ - Funktionen

– Grundlagen– Zeichen Funktionen– Numerische Funktionen– Datums – Funktionen– Konvertierungsfunktionen– Sonstige Funktionen

„Group“ – Funktionen– Grundlagen

Page 35: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 35

FUNKTIONEN Single Row 1/ 16FUNKTIONEN Single Row 1/ 16Verschiedene Datentype als ArgumenteAuch in PL/SQL verwendbarVerwendbar unter anderem in SELECT,

WHERE und ORDER BY KlauselnZ.B.:

– SELECT last_name, TO_CHAR(hire_date, 'Day, DD-MON-YYYY')FROM employees WHERE UPPER(last_name) like 'AL%'ORDER BY soundex(last_name);

Page 36: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 36

FUNKTIONEN Single Row 2/16FUNKTIONEN Single Row 2/16

NULL Werte Funktionen– NVL(Ausdruck1, Ausdruck2)

SELECT last_name, salary salary*commission_pct bonus,(salary+salary*NVL(commission_pct,0)) GehaltFROM employees,

– NVL2(Ausdruck1, Ausdruck2, Ausdruck3)NVL2(commission_pct, salary+salary* commission_pct, salary)

Page 37: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 37

FUNKTIONEN Single Row 3/16FUNKTIONEN Single Row 3/16

Zeichenfunktionen– ASCII(c1)

liefert den Ascii Wert des ersten Zeichens in c1SELECT ASCII('A') GR_A, ASCII('z') KL_Z FROM dual;

GR_A KL_Z 65 122

– CHR(i)Liefert das Zeichen entsprechend dem Wert i

SELECT CHR(65), chr(122), chr(223) FROM dual;

Page 38: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 38

FUNKTIONEN Single Row 4/ 16FUNKTIONEN Single Row 4/ 16Zeichenfunktionen (Fs)

– INITCAP(c1) liefert den ersten Buchstaben jedes Wortes in c1

als Großbuchstaben und alle anderen als Kleinbuchstaben

SELECT INITCAP('die drei lauser') FROM dual;=> Die Drei Lauser

– LENGTH(c)Liefert Länge einer Zeichenkette in ZeichenSELECT LENGTH('Die Spengergasse') FROM

DUAL;=> 16

Page 39: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 39

FUNKTIONEN Single Row 5/16FUNKTIONEN Single Row 5/16 Zeichenfunktionen (Fs)

– INSTR(c1, c2[,i [,j]]) Liefert die Zeichenposition für das j-te Vorkommen von c2 in c1,

beginnend mit Position i. Negatives i bedeutet Suche von rechts (sonst von links)

SELECT INSTR('Mississippi','i',-2,3) FROM dual;=> 2

– SUBSTR(c1, i[,j]) liefert einen Teilstring aus c1 beginnend an der Position i von j

Zeichen. Ist j < 0 => Rest des Strings. Ist í < 0 => Zählen der Position von rechts.

SELECT SUBSTR('Die Spenger Gasse',5,7) FROM dual;=> Spenger

Page 40: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 40

FUNKTIONEN Single Row 6/ 16FUNKTIONEN Single Row 6/ 16

Zeichenfunktionen (Fs)– LOWER(c1)

Kovertiert alle Zeichen auf Kleinbuchstaben

– UPPER(c1) Konvertiert alle Zeichen auf Großbuchstaben

– SELECT LOWER(job_id), last_name FROM employees WHERE UPPER(last_name) LIKE 'KIN%';=> ad_pres King

Page 41: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 41

FUNKTIONEN Single Row 7/ 16FUNKTIONEN Single Row 7/ 16

Zeichenfunktionen (Fs)– LPAD(c1,i[,c2])

Erweitert den String c1 auf i Zeichen. Verwendet c2 um den freien Raum links aufzufüllen

SELECT LPAD(job_id,10,'.') FROM employees=> ...AD_PRES usw.

– RPAD(c1,i[,c2]) Erweitert den String c1 auf i Zeichen. Verwendet c2 um den

freien Raum rechts aufzufüllen SELECT RPAD(job_id,10,'.') FROM employees

=> AD_PRES... usw.

Page 42: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 42

FUNKTIONEN Single Row 8/ 16FUNKTIONEN Single Row 8/ 16

Zeichenfunktionen (Fs)– LTRIM(c1, c2)

Diese Funktion liefert c1 ohne die führenden Zeichen aus c2. Default: ' '

SELECT LTRIM('Mississippi', 'Mis') FROM dual;=>ppi

– RTRIM(c1,c2)Diese Funktion liefert c1 ohne die nachlaufenden

Zeichen aus c2. Default: ' '

Page 43: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 43

FUNKTIONEN Single Row 9/ 16FUNKTIONEN Single Row 9/ 16

Zeichenfunktionen (Fs)– REPLACE(c1,c2[c3])

Liefert c1 wobei alle Strings c2 durch c3 ersezt werdenSELECT REPLACE('uptown','up','down') FROM dual;

=> downtown

– SOUNDEX(c1)Liefert die phonetische Darstellung von C1SELECT SOUNDEX('Dawes' from dual);

=> D200

Page 44: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 44

FUNKTIONEN Single Row 10/ 16FUNKTIONEN Single Row 10/ 16

Zeichenfunktionen (Fs)– TRANSLATE(c1,c2,c3)

Liefert c1 wobei alle in c1 vorkommenden Zeichen aus c2 durch die der Position in c2 entsprechenden Zeichen aus c3 ersetzt werden.

SELECT TRANSLATE('Mississippi','Mis','mIS') FROM dual; => mISSISSIppI

SELECT translate(KUNDEN.RORT,'ÄÖÜäöüß',chr(142) || chr(153) || chr(154) || chr(132) || chr(148) || chr(129) || chr(225)) RORT FROM KUNDENwhere knr=882;

Page 45: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 45

FUNKTIONEN Single Row 11/ 16FUNKTIONEN Single Row 11/ 16

Numerische Funktionen– ABS(n) – Absolutbetrag von n

– COS, SIN, TAN, ATAN, ASIN, ACOS COSH, SINH Winkelfunktionen

– CEIL(n) – Kleinster ganzzahliger Wert größer oder gleich n SELECT CEIL(9.8), CEIL(-32.85) from dual;=> 10 -32

– FLOOR(n) Größter ganzzahliger Wert kleiner oder gleich n SELECT FLOOR(9.8), FLOOR(-32.85) from dual;=> 9 -33

Page 46: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 46

FUNKTIONEN Single Row 12/ 16FUNKTIONEN Single Row 12/ 16

Numerische Funktionen (Fs)– LN(n) – Natürlicher Logarithmus von n

SELECT LN(2.7) FROM dual;=> 0,993251773010283

– LOG(n1,n2) Liefert den Logarithmus von n1 zur Basis n2 SELECT LOG(27,3) FROM dual;=> 0,333333333333333

– MOD(n1, n2) Liefert n1 modulo n2 SELECT MOD(14,5) FROM dual;=> 4

Page 47: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 47

FUNKTIONEN Single Row 13/ 16FUNKTIONEN Single Row 13/ 16

Numerische Funktionen (Fs)– POWER(n1,n2) – Liefert n1 hoch n2– SQRT(n) – Quadratwurzel aus n– ROUND(n1, n2) – Liefert n1 gerundet auf n2 Stellen– SIGN(n) – liefert 1 falls n pos.-1 falls negativ, 0 wenn 0– TRUNC(n1, n2) – Liefert n1 auf n2 Stellen

abgeschnitten

Page 48: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 48

FUNKTIONEN Single Row 14/ 16FUNKTIONEN Single Row 14/ 16

Datumsfunktionen– ADD_MONTHS(d,i)

Addiert i Monate zu Datum d

– MONTHS_BETWEEN(d1, d2) Liefert die Anzahl der Monate zwischen d1 und d2

– SELECT MONTHS_BETWEEN('19.12.2002','19.03.2002') test from dual;=> 9

– LAST_DAY(d) Liefert den letzten Tag des Monats für das Datum d

– SELECT LAST_DAY(SYSDATE), LAST_DAY(SYSDATE) + 1 from dual;

Page 49: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 49

FUNKTIONEN Single Row 15/16FUNKTIONEN Single Row 15/16

Datumsfunktionen (Fs)– EXTRACT(c FROM d)

Liefert die durch c angegebene Komponente von d.c: YEAR, MONTH, DAY,HOUR, MIN, SECOND

SELECT EXTRACT(MONTH FROM SYSDATE) FROM dual;=> 1

– TRUNC(d[,fmt])Liefert ein Datum abgeschnitten je nach fmt.

SELECT TRUNC(last_analysed,'HH') FROM user_tables WHERE table_name='TEST_CASE';=> 10-Jan-2003 11:00:00

Page 50: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 50

FUNKTIONEN Single Row 16/16FUNKTIONEN Single Row 16/16 Conversionsfunktionen

– TO_CHAR(x[,fmt]) – x:Datum oder Zahl, fmt: Formatcode SELECT to_char(SYSDATE,'DD-MM-YYYY HH:MI'),

to_char(12.3,'0009.90')=> 13-01-2003 19:35 0012.30

– TO_NUMBER(c[,fmt]) – Liefert Zahl aus String

– TO_DATE(c[,fmt]) – Liefert Datum aus String Sonstige Funktionen

– DECODE(x,m1,r1,m2,r2,....,d) SELECT DECODE(command,0,'None',2,'Insert',3,'Select'...,'Other') cmd

from v$session where type <> 'BACKGROUND';

– LEAST(exp_list), GREATEST(exp_list)

Page 51: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 51

FUNKTIONEN "Group"FUNKTIONEN "Group"

Grundlagen– Aggregat Funktionen – Wert basierend auf

Inputmenge– Vernachlässigt Nullwerte und liefern keine

Nullwerte (Ausnahme: sum bei nur Nullwerten)

Page 52: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 52

FUNKTIONEN "Group" (Fs)FUNKTIONEN "Group" (Fs)

Elementare Funktionen– COUNT {* | [DISTINCT | ALL] x }

Anzahl

– SUM {[DISTINCT | ALL] x } Summe

– MAX {[DISTINCT | ALL] x } Maximalwert

– MIN {[DISTINCT | ALL] x } Minimal

– AVG {[DISTINCT | ALL] x } Durchschnitt

Page 53: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 53

FUNKTIONEN "Group" (Fs)FUNKTIONEN "Group" (Fs) Statement:SELECT employee_id, salary FROM hr.employees WHERE department_id = 60ORDER BY salary;

Ergebnis:EMPLOYEE_ID SALARY

107 4200 105 4800 106 4800 104 6000 103 9000

Page 54: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 54

FUNKTIONEN "Group" (Fs)FUNKTIONEN "Group" (Fs) SELECT AVG(salary) avg, AVG(ALL salary) avg_all, AVG(DISTINCT salary) avg_dist, COUNT(salary) cnt,COUNT(DISTINCT salary) cnt_dist, SUM(salary) sum_all, SUM(DISTINCT salary) sum_dist FROM hr.employees WHERE department_id = 60ORDER BY salary;

Ergebnis avg avg_all avg_dist cnt cnt_dist sum_all sum_dist5760 5760 6000 5 4 28800 24000

Page 55: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 55

FUNKTIONEN "Group" (Fs)FUNKTIONEN "Group" (Fs)

Klausel: GROUP BY– Gruppieren von Daten nach einem oder mehreren Kriterien– SELECT department_id, count(*) MA_Anzahl FROM hr.employees GROUP BY department_id;

– Ergebnis: DEPARTMENT_ID MA_ANZAHL DEPARTMENT_ID MA_ANZAHL

10 1 70 1 20 2 80 34 30 6 90 3 40 1 100 6 50 45 110 2 60 5 1

Page 56: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 56

FUNKTIONEN "Group" (Fs)FUNKTIONEN "Group" (Fs)

– Klausel: HAVINGEinschränken der zurückgelieferten GruppenKeine Gruppenfunktionen in der where KlauselSELECT department_id DID, sum(salary) SUMSAL, count(*) ANZ FROM hr.employees GROUP BY department_id HAVING count(*) > 10;

Ergebnis:DID SUMSAL ANZ 50 156.400 45 80 304.500 34

Page 57: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 57

Joins und SubqueriesJoins und Subqueries Selektieren von Daten aus mehreren Tabellen FROM Klausel enthält mehrere Tabellenangaben "JOIN" verbindet Datenzeilen aus mehreren

Tabellen Um die Datenmenge zu reduzieren sollten die

Beziehungen zwischen den einzelnen Datensätzen in der where Klausel spezifiziert werden

alternativ kann aoch eine (neue) JOIN Klausel ab Oracle 9i verwendet werden (ISO / ANSI SQL1999)

ohne diese Klauseln -> kartesisches Produkt

Page 58: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 58

Einfache JOINsEinfache JOINs

2 Tabellen und "=" OperatorSELECT locations.location_id, city,

department_nameFROM locations, departmentsWHERElocations.location_id = departments.location_id

Page 59: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 59

Tabellen AliaseTabellen Aliase

temporäres Umbenennen von Tabellen– SELECT l.location_id, city, department_name

FROM locations l, departments dWHERE l.location_id = d.location_idAND country_id != 'US';

mit Schemaname– SELECT locations.location_id, hr.locations.city,

department_name FROM hr.locations, hr.departmentsWHERE location.location_id = departments.location_id;

Page 60: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 60

JOINS – ANSI SyntaxJOINS – ANSI Syntax

NATURAL JOIN– kein Alias möglich

– basiert auf Feldern mit gleichen Namen

– SELECT location_id, city, department_nameFROM locations NATURAL JOIN departments;

– SELECT region_name, country_name, city FROM regions NATURAL JOIN countriesNATURAL JOIN locations;

Page 61: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 61

JOINS – ANSI Syntax Fs.JOINS – ANSI Syntax Fs. JOIN .. USING

– spezifiziert die Felder, die für das JOIN verwendet werden sollen

– SELECT region_name, country_name, city FROM regionsJOIN countries USING (region_id)JOIN locations USING (country_id)

– Fehlerhaft:SELECT region_name, country_name, city FROM regionsJOIN locations USING (country_id)JOIN countries USING (region_id)

Page 62: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 62

JOINS – ANSI Syntax Fs.JOINS – ANSI Syntax Fs.

JOIN .. ON– wenn es keine gemeinsamen Feldnamen gibt– SELECT region_name, country_name, city

FROM regions rJOIN countries c ON r.region_id = c.region_idJOIN locations l ON c.country_id = l.country_idwhere c.country_id = 'US';

Page 63: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 63

Kartesische JOINSKartesische JOINS

verbindet jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle

möglichst vermeiden – Performance!zumindest immer n-1 JOIN Bedingungen

(n .. Anzahl der Tabellen in der FROM Klausel)

SELECT region_name, country_nameFROM regions, countrieswhere countries.country_ld LIKE 'I%';

Page 64: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 64

OUTER JOINSOUTER JOINS

Liefert alle Werte einer Tabelle auch bei fehlenden Entsprechungen in der zweiten Tabelle

2 Schreibweisen:– Traditionell: (+) zu Feld in der where Klause– ANSI: LEFT JOIN, RIGHT JOIN, FULL JOIN

SELECT c.country_name, l.cityFROM countries c, locations lWHERE c.country_id = l.country_id (+);

Page 65: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 65

OUTER JOINS Fs.OUTER JOINS Fs.

SELECT c.country_name, l.cityFROM countries c, locations lWHERE c.country_id (+) = l.country_id;

SELECT c.country_name, l.cityFROM countries c, LEFT JOIN locations lON c.country_id = l.country_id;

SELECT c.country_name, l.cityFROM countries c, RIGHT JOIN locations lON c.country_id = l.country_id;

Page 66: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 66

OUTER JOIN Fs.OUTER JOIN Fs.

Full OUTER JOIN– neu in Oracle 9i– nur ANSI Syntax möglich– SELECT e.employee_id, e.last_name,

d.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON e.department_id = d.department_id;

Page 67: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 67

Andere JOINSAndere JOINS

SELF-Joins– verbindet eine Tabelle mit sich selbst– Beispiel: Liste die Mitarbeiternamen und die

dazugehörigen Managernamen aus der employees Tabelle:

SELECT e.last_name Mitarbeiter, m.last_name ManagerFROM employees e, employees mWHERE m.employee_id = e.manager_id;

ANSI Syntax ???

Page 68: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 68

Andere JOINS FsAndere JOINS Fs

Nicht Gleichheits JOIN– Tabelle grades:

SELECT * FROM grades;GRADE LOW_SALARY HIGH_SALARY P5 0 3000 P4 3001 5000 P3 5001 7000 P2 7001 9000 P1 10001

Page 69: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 69

Andere JOINS FsAndere JOINS Fs

Nicht Gleichheits JOIN Fs– SELECT last_name, salary, grade

FROM employees, gradesWHERE last_name LIKE 'R%'AND salary >= low_salaryAND salary <= NVL(high_salary, salary);

Raphaely 11000 P1Rogers 2900 P5Rajs 3500 P4Russell 14000 P1

Page 70: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 70

Andere JOINS Fs.Andere JOINS Fs. Set – Operatoren

– Kombinieren die Ergebnismengen von zwei Abfragen zu einer Ergebnismenge

– Datentypen und Feldanzahl beider Abfragen sollten übereinstimmen

– Die Namen der Felder aus der ersten Abfrage werden für die Bezeichnung der Ergebnisfelder verwendet

– UNION Liefert alle eindeutigen Datensätze beider Abfragen– UNION ALL liefert alle Datensätze beider Abfragen– INTERSECT Liefert die Datensätze, die in beiden

Abfragen gleich sind– MINUS liefert eindeutige Zeilen der ersten Abfrage

abzüglich der Zeilen der zweiten Abfrage

Page 71: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 71

Andere JOINS Fs.Andere JOINS Fs.

SELECT last_name, hire_date FROM employeesWHERE department_id = 90

UNION

SELECT last_name, hire_date FROM employeesWHERE lastname LIKE 'K%'

(3 Zeilen + 6 Zeilen) ergibt 7 Zeilen

Page 72: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 72

Andere JOINS Fs.Andere JOINS Fs.

Sortierung durch ein! ORDER BY möglichSELECT last_name, hire_date FROM

employeesWHERE department_id = 90UNIONSELECT last_name, hire_date FROM employeesWHERE lastname LIKE 'K%'ORDER BY first_name

Page 73: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 73

Single Row SubqueriesSingle Row Subqueries

Ein Query im QueryLeifert nur einen Datensatz als Ergebnis

– SELECT last_name, first_name, salaryFROM employeesWHERE salary = (SELECT MAX(salary) FROM employees)

Page 74: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 74

Multiple Row SubqueriesMultiple Row Subqueries

Liefern mehr als einen Datensatz vom Subquery

Sicherer wenn die Ergebnismenge nicht sicher ist

SELECT last_name, first_nameFROM employeeswhere department_id in (SELECT department_id FROM employeesWHERE first_name = 'John');

Page 75: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 75

Korrelierte SubqueriesKorrelierte SubqueriesSubquery bezieht sich auf Felder des

MutterqueriesSubquery wird für jeden zurückgelieferten

Datensatz des Mutterqueries ausgeführtSELECT department_id, last_name, salary

FROM employees e1WHERE salary = (select max(salary) FROM employees e2

WHERE e1.department_id = e2.department_id)

ORDER by 1,2,3;

Page 76: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 76

Skalare SubqueriesSkalare Subqueries Liefern genau einen Wert Können an vielen Stellen statt einem Feldwert

verwendet werden Nicht in GROUP BY und HAVING Klauseln in einem CASE Ausdruck:

SELECT city, country_id, (CASE WHENcountry_id in (SELECT country_id FROM countriesWHERE country_name = 'India')THEN 'Indian'ELSE 'NON-Indian'END) "INDIA?"

FROM locations where city LIKE 'B%';

Page 77: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 77

Skalare Subqueries Fs.Skalare Subqueries Fs.

In einer SELECT Klausel– SELECT last_name, department_id,

(select MAX(salary) FROM employees sqWHERE sq.department_id = e.department_id) HiSalFROM employees e WHERE last_name LIKE 'R%';

Page 78: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 78

Skalare Subqueries Fs.Skalare Subqueries Fs.In einer where Klausel

– SELECT department_name, manager_id, (SELECT last_name FROM employees e WHERE e.employee_id = d.manager_id) MGR_NAMEFROM departments dWHERE ((SELECT country_id FROM locations l

WHERE d.location_id = l.location_id) IN (SELECT country_id FROM countries c

WHERE c.country_name = 'United States ..'

OR c.country_name = 'Canada'))AND d.manager_id IS NOT NULL;

Page 79: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 79

DMLDML

Data Manipulation LanguageÄndern von Daten in TabellenKoordinieren von mehrfachen

Veränderungen Verwendung von LocksSteuerung der Änderungen

Page 80: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 80

DML – Modifying DataDML – Modifying Data

INSERT – fügt Datensätze in Tabellen einUPDATE – Ändert Feldwerte in TabellenMERGE – Fügt ein oder ändertDELETE - Löscht DatensätzeSELECT FOR UPDATE – Verhindert

gleichzeitiges Verändern durch andere Transaktionen

LOCK TABLE – Schützt vor gleichzeitiger Veränderung

Page 81: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 81

DML - INSERTDML - INSERT

Fügt Datensätze in ein oder mehrere Tabellen ein

Werte können eingegeben werdenWerte können von Subqueries ermittelt

werden

Page 82: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 82

DML – Single Table INSERTDML – Single Table INSERT

INSERT INTO departments (department_id, department_name, manager_id, location_id)VALUES (280, 'Cash Management', 108,1700)

NULL Werte werden in fehlende Spalten eingefügt

Page 83: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 83

DML – Single Table INSERT Fs.DML – Single Table INSERT Fs.

Folgende Statements sind äquivalent INSERT INTO departments

(department_id, department_name, manager_id, location_id)VALUES (280, 'Cash Management', NULL,1700)

INSERT INTO departments (department_id, department_name, location_id)VALUES (280, 'Cash Management', 1700)

Page 84: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 84

DML – Single Table INSERT Fs.DML – Single Table INSERT Fs.

Verwendung von SubselectsINSERT INTO job_history (employee_id,

start_date, job_id) SELECT employee_id, to_date('01.01.1900','DD.MM.YYYY'), job_id from employees;

Page 85: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 85

DML – Multiple Table INSERTDML – Multiple Table INSERT

Neu in 9iINSERT ALL WHEN Bedingung

THEN Into Klausel ELSE Into Klausel;Verkaufsdaten – Tabelle vkdat:

anr .. Artikelnummer, agr .. Artikelgruppevdat .. Verkaufsdatum, knr .. Kundennr.sq .. Verkaufsmenge, sp .. Verkaufspreisagr: B .. Bücher, V .. Video oder P .. Papier

Page 86: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 86

DML – Multiple Table INSERT Fs.DML – Multiple Table INSERT Fs.

Tabellen: vkbuch, vkvideo, vkpapierAllg. Felder anr, vdat, knr, ums Spezielle Felder

vkbuch: isbn,vkvideo: ej -- Erscheinungsjahr,vkpapier: atyp -- Artikeltyp

Page 87: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 87

DML – Multiple Table INSERT Fs.DML – Multiple Table INSERT Fs.INSERT ALLWHEN agr='B' THEN

INTO vkbuch (anr, vdat, knr, ums) VALUES (anr, vdat, knr, u)WHEN agr='V' THEN INTO vkvideo (anr, vdat, knr, ums) VALUES (anr, vdat, knr, u)WHEN agr='P' THEN INTO vkpapier (anr, vdat, knr, ums) VALUES (anr, vdat, knr, u)SELECT agr, vdat, knr, sp*sq u FROM vkdat

Page 88: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 88

DML - UPDATEDML - UPDATE

Modifiziert vorhandene Datensätze in einer Tabelle

UPDATE tabellennameset (Felder, ...) = (subquery)WHERE Bedingung

UPDATE tabellennameset Feld1 = Wert1, Feld2 = Wert2 ... WHERE Bedingung

Page 89: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 89

DML - UPDATE Fs.DML - UPDATE Fs.

UPDATE employees SET commission_pct = 0.01 WHERE commission_pct is NULL;

UPDATE employeesSET salary = salary*0.15, commission_pct = 0.2WHERE department_id = 60;

Page 90: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 90

DML - UPDATE Fs.DML - UPDATE Fs.

UPDATE job_history j SET start_date = (SELECT hire_date FROM employees e WHERE e.employee_id=j.employee_id)WHERE NOT EXISTS (select * from job_history j2 where j2.end_date is not null and j.employee_id = j2.employee_id);

Page 91: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 91

DML - UPDATE Fs.DML - UPDATE Fs. UPDATE job_history j1

SET start_date = (SELECT end_date + 1 FROM job_history j2WHERE j2.end_date is not NULL andj2.employee_id = j1.employee_id andj2.end_date = (select max(j3.end_date)FROM job_history j3 WHERE j3.end_date is not NULL and j3.employee_id = j2.employee_id))WHERE j1.end_date is NULL and exists (SELECT * from job_history j4 where j4.employee_id=j1.employee_id and j4.end_date is not NULL)

Page 92: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 92

DML - MERGEDML - MERGE MERGE INTO tabelle

USING {tabelle | subquery | view}ON (bedingung) WHEN MATCHED THEN UPDATE SET ... WHEN NOT MATCHED THEN INSERT ... VALUES ( ... );

select * from piP_IDC_IDL_P M_P298633 135 121316333 35 29316533 40 34316433 40 35316633 40 32

Page 93: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 93

DML - MERGE Fs.DML - MERGE Fs. select * from np;

P_ID L_P M_P 2986 135 1113163 40 323164 40 35

merge into pi piusing (select p_id, l_p, m_p from np) npon (pi.p_id = np.p_id)when matched then update set pi.l_p = np.l_p, pi.m_p = np.m_pwhen not matched then insert (pi.p_id, pi.c_id, pi.l_p, pi.m_p)values (np.p_id, 33, np.l_id, np.m_p);

Page 94: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 94

DML - MERGE Fs.DML - MERGE Fs.

Ergebnis:select * from pi;P_ID C_ID L_P M_P2986 33 135 1113163 33 40 323165 33 40 343164 33 40 35

Page 95: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 95

DML - DELETE - TRUNCATEDML - DELETE - TRUNCATE

DELETE FROM table WHERE bedingungDELETE FROM employees WHERE

salary > 15000;Löschen der gesamten Tabelle ohne

RollbackTRUNCATE table [DROP | REUSE]

STORAGE schnell, benötigt wenig Resourcen

Page 96: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 96

DML - LOCKINGDML - LOCKING

SELECT .... FOR UPDATE SELECT * from employees WHERE

NVL(commission_pct,0) > 0 FOR UPDATE; Sperren gesamter Tabelle LOCK table IN lockmode

lockmode: EXCLUSIVE MODE ... queries erlaubt, alles andere nicht SHARE MODE ... verhindert Updates ROW SHARE MODE .. verhindert exclusiven LOCK

Page 97: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 97

DML - TransaktionskontrolleDML - Transaktionskontrolle

COMMIT – Beendet Transaktion

– Änderungen werden permanent

– Änderungen werden sichtbar ROLLBACK

– Alle Änderungen (außer DDL) werden zurückgesetzt SAVEPOINT Name Setzt eine benannte Marke ROLLBACK TO SAVEPOINT

– Setzt bis zur benannten Marke wieder zurück

Page 98: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 98

TABELLEN - DatentypenTABELLEN - Datentypen

Zeichen:CHAR(2000 Zeichen), VARCHAR2(4000 Zeichen), CLOB(4GB), LONG(2GB - alt)

Numerische Datentypen:NUMBER[ (<precision> [,<scale])]kann für alle numerischen Daten verwendet werden

DATUMDATE – Datum und Zeit (bis Sekunden)TIMESTAMP – Datum und Zeit (bis 9 stellige Sekundenbruchteile)

Page 99: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 99

TABELLEN - Datentypen Fs.TABELLEN - Datentypen Fs.

Binäre DatentypenRAW (2000 Byte), BLOB (bis 4GB),BFILE(external FILE bis 4GB)

Sonstige DatentypenROWID – Pseudospalte bei jeder Tabelle(physische Datensatzadresse – schnellster Zugriffsweg, kann sich bei update ändern)

Page 100: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 100

TABELLEN - ErstellenTABELLEN - Erstellen

CREATE TABLECREATE TABLE produkte

( produkt_id NUMBER (4), produkt_name VARCHAR2(50), lager_menge NUMBER(15), preis NUMBER(15,2));

Page 101: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 101

TABELLEN - Erstellen Fs.TABELLEN - Erstellen Fs.

Zusatzinformation beim Erstellen von Tabellen:– Standardwerte– "Constraints"– Tabellenart– Speicherangaben– "Tablespace"– "Partitionierungs" – Information

Page 102: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 102

TABELLEN - Erstellen Fs.TABELLEN - Erstellen Fs.

Namen von Tabellen und Feldern: maximal 30 Zeichen lang

Alphanumerische Zeichen + "_, $, #" erlaubt (beginnend mit Aplhabetischem Zeichen

Caseinsensitiv wenn nicht in "" eingeschlossen

Page 103: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 103

TABELLEN - Erstellen Fs.TABELLEN - Erstellen Fs.

CREATE TABLE auftraege (auftrags_nummer NUMBER(8),status VARCHAR2(10)

DEFAULT 'PENDING');INSERT INTO auftraege (auftrags_nummer)

VALUES (4004);SELECT * FROM ORDERS;

AUFTRAGS_NUMMER STATUS 4004 PENDING

Page 104: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 104

TABELLEN - Erstellen Fs.TABELLEN - Erstellen Fs.NULL Werte unterdrücken - Constraints CREATE TABLE JOB_HISTORY ( EMPLOYEE_ID NUMBER (6) CONSTRAINT JHIST_EMPLOYEE_NN NOT NULL, START_DATE DATE CONSTRAINT JHIST_START_DATE_NN NOT NULL,

END_DATE DATE, JOB_ID VARCHAR2 (10), DEPARTMENT_ID NUMBER (4), CONSTRAINT JHIST_DATE_INTERVAL CHECK (end_date > start_date), CONSTRAINT JHIST_EMP_ID_ST_DATE_PK PRIMARY KEY ( EMPLOYEE_ID, START_DATE ) ) ;

Page 105: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 105

TABELLEN - Erstellen TABELLEN - Erstellen Fs.Fs. Erstellen einer Tabelle aus einer anderen Tabelle

CREATE TABLE emp2 AS SELECT * FROM EMPLOYEES– leere Tabelle wenn Query keine Datensätze liefert

– Alias Namen für neue Feldnamen– Nur "NOT NULL" constraint wird kopiert andere constraints nicht

Page 106: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 106

TABELLEN - VerändernTABELLEN - Verändern Felder hinzufügen

– ALTER TABLE employees ADD city VARCHAR2(30); Felddatentypen verändern

– ALTER TABLE departments MODIFY department_id NUMBER(12);

Felder löschen– ALTER TABLE employees DROP COLUMN city;

TABELLEN löschen– DROP TABLE emp2;

TABELLEN umbenennen– RENAME emp2 TO employees_save

DESCRIBE Tabellenname– listet alle Felder einer Tabelle

Page 107: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 107

CONSTRAINTSCONSTRAINTS NOT NULL

– CREATE TABLE orders ( order_num Number (4) CONSTRAINT nn_order NOT NULL, order_date DATE NOT NULL, product_id NUMBER(14));

Check Constraints– CREATE TABLE bonus ( emp_id VARCHAR2 (40) NOT NULL, salary NUMBER (13,2), bonus NUMBER(13,2), CONSTRAINT ck_bonus CHECK (bonus > 0))

Page 108: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 108

CONSTRAINTS Fs.CONSTRAINTS Fs.

UNIQUE Constraints– Definition auf Feldebene (Einzelfeld) oder Tabellenebene (mehrere Felder)

– ALTER TABLE employees ADD ssn VARCHAR2(11) CONSTRAINT uk_ssn UNIQUE;

– ALTER TABLE employees ADD CONSTRAINT uk_name UNIQUE (first_name, last_name);

– Erstellt automatisch einen Index– Erlaubt Nullwerte

Page 109: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 109

CONSTRAINTS Fs.CONSTRAINTS Fs.

PRIMARY KEY Constraints– Erlaubt keine Nullwerte– Nur ein PRIMARY KEY je Tabelle– Definition auf Feldebene (Einzelfeld) oder Tabellenebene (mehrere Felder)

– Kann nicht mehr gelöscht werden– CREATE TABLE EMPLOYEES ( EMPLOYEE_ID NUMBER (6) NOT NULL,FIRST_NAME VARCHAR2 (20), .... DEPARTMENT_ID NUMBER (4), CONSTRAINT EMP_EMP_ID_PK PRIMARY KEY ( EMPLOYEE_ID ) ) ;

Page 110: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 110

CONSTRAINTS Fs.CONSTRAINTS Fs. FOREIGN KEYS

– Erlaubt Nullwerte– Der referenzierte Key muß der Primary Key oder ein Unique Key in der referenzierten Tabelle sein

– Definition auf Feldebene (Einzelfeld) oder Tabellenebene (mehrere Felder)

– Die Datentypen der Eltern und Kind Tabelle sollten übereinstimmen

– ALTER TABLE EMPLOYEES ADD CONSTRAINT EMP_DEPT_FK FOREIGN KEY (DEPARTMENT_ID) REFERENCES HR.DEPARTMENTS (DEPARTMENT_ID) ON DELETE SET NULL ;

– [ON DELETE {CASCADE | SET NULL}

Page 111: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 111

CONSTRAINTS Fs.CONSTRAINTS Fs.

Constraints können enabled und disabled werden– ALTER TABLE EMPLOYEES DISABLE CONSTRAINT EMP_DEPT_FK;

– ALTER TABLE departments DIABLE PRIMARY KEY CASCADE;

– DEFERRABLE – prüfbar mit Transaktionsende

bei ADD CONSTRAINT (nicht ALTER TABLE)

– INITIALLY {DEFERRED | IMMEDIATE} auch mit ALTER TABLE möglich

Page 112: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 112

Andere DatenbankobjekteAndere Datenbankobjekte

SEQUENCES– CREATE SEQUENCE emp_seq START WITH 1000 INCREMENT BY 10

– DROP SEQUENCE emp_seq– SELECT empseq.nextval FROM emp_seq

– Änderung erfolgt außerhalb von Transaktionen

Page 113: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 113

SYNONYMESYNONYME

CREATE [PUBLIC] SYNONYM synonym_name FOR object– CREATE PUBLIC SYNONYM employees FOR hr.employees;

CREATE TABLE my_emp AS SELECT * FROM EMPLOYEES;ALTER TABLE my_emp add home_phone VARCHAR2(10);CREATE SYNONYM employees FOR my_emp;

Page 114: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 114

INDEXEINDEXE Lesen von Datensätzen

– mittels ROWID– mittels "full table scan"

B_Tree Index oder Bitmap Index– Beide bilden Feldwerte auf ROWIDs ab

Indexe können SELECT DELETE und UPDATE Befehle beschleunigen

Ein Index kann verwendet werden, falls das "führende Subset" des INDEX in der SELECT oder WHERE Klause vorkommt.

Fallweise kann auch ausschließlich der Index ohne die Tabelle verwendet werden

Page 115: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 115

INDEXE Fs.INDEXE Fs.

SELECT count(*) from employees where last_name='Taylor';

Performance für DML Befehle kann verschlechtert werden– Index muß zusätzlich zur Tabelle geändert werden

B-Tree Indexe– gebräuchlichster Index– gut für Felder mit "hoher Kardinalität" (Felder mit vielen unterschiedlichen Werten z.B.: last_name)

Page 116: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 116

INDEXE Fs.INDEXE Fs.

B-Tree Fs.– meist verwendet wenn weniger als 10% der Datensätze gesucht werden.

– Besteht aus "Zweigen" und "Blättern" Zweige enthalten den KEY und die Adresse des Indexblockes auf der nächsten Ebene

Blätter enthalten den Key und die ROWID des Datensatzes

Blätter sind zusätzlich doppelt verlinkt – Warum?

– Verwendung bei führenden Feldern

Page 117: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 117

INDEXE Fs.INDEXE Fs.BITMAP Index

– hauptsächlich bei Datawarehouses verwendet

– gut bei geringer und mittlerer Kardinalität

– Jeder Schlüsselwert hat eine BITMAP mit einem Bit für jeden Datensatz

– z.B. Verpackungsart (Papier, Holz, Metall und Plastik) – 4 Bitmaps

– Komprimierte Speicherung – sehr effizient

– Mehrere BITMAPS können mit AND bzw. OR verknüpft werden.

Page 118: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 118

INDEXE Fs.INDEXE Fs.B-Tree Index (eindeutig)CREATE UNIQUE INDEX emp_uk_namON employees (last_name, first_name, employee_id);

Index auf Funktion:CREATE INDEX upper_ix ON employees (UPPER(last_name));

Bitmap IndexCREATE BITMAP INDEX firstB ON employees (substr(last_name,1,1));

Page 119: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 119

Views – DatensichtenViews – Datensichten

Logische Darstellung von Daten von einer oder mehreren Tabellen – base tables

Wie gespeicherte AbfrageAbfrage im Data Dictionary gespeichert

DESCRIBE Befehl– listet die Tabellen (View) Definition

Page 120: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 120

Views – ErstellungViews – Erstellung

CREATE VIEW admin_employees ASSELECT first_name || last_name NAME, email, job_id POSITIONFROM employeesWHERE department_id = 10;

DESCRIBE admin_employeesCREATE FORCE VIEW ....

– Erstellt auch fehlerhafte Views

Page 121: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 121

Views – Erstellung mit Views – Erstellung mit FeldnamenFeldnamenCREATE VIEW emp_hire(employee_id, employee_name, department_name, hire_date, commission_amt)AS SELECT employee_id, first_name || last_name,

department_name, to_char(hire_date, 'DD-MM-YYYY'), salary*NVL(commission_pct, 0.5)FROM employees JOIN departmentsUSING (department_id) ORDER BY first_name || last_name;

Page 122: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 122

Views – Create mit Views – Create mit FehlernFehlern CREATE VIEW test_view as select c1, c2 from test_table

ORA-00942: table or view does not exist

CREATE FORCE VIEW test_view as select c1, c2 from test_table

SELECT * FROM test_view;ORA-04063: view "HR.TEST_VIEW" jas errors

Page 123: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 123

Views – DiversesViews – Diverses

Read-Only Views:– WITH READ ONLY

Constraints können definiert werden

nur "deklarativ" – DISABLE NOVALIDATE

Ändern von Views – CREATE OR REPLACE– ALTER VIEWALTER VEIW test_view COMPILEnach Änderungen der Basistabelle

DROP VIEW

Page 124: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 124

Views – VerwendungViews – Verwendung

Darstellung eines "Subsets" der Daten

Darstellung eines "Supersets" der Daten

Verdecken von komplexen JOINSVerwendung von sprechenden Feldnamen

Erreichung eines höheren Unabhängigkeitsgrades

Page 125: 1 Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!

Dipl.-Ing. Walter Sabin -- 2006 125

Views – DatenänderungViews – Datenänderung

DML verwendbar mit Einschränkungen– kein DISTINCT– kein GROUP BY– kein ROWNUM– keine SET Operatoren (UNION ...)– kein Subquery in "SELECT" Klausel

Erzwingt nicht die "WHERE" Bedingung Joinviews

– nur 1 Tabelle veränderbar– nur die "key-preserved" Tabelle ist änderbar