Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!"—  Präsentation transkript:

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

2 SQL – Ü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 Dipl.-Ing. Walter Sabin

3 Geschichte 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 Dipl.-Ing. Walter Sabin

4 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) Dipl.-Ing. Walter Sabin

5 Relationale Datenbank (2/3)
Beispiel: Lieferanten - Produkte – Versand 2 Entities mit Relation Keine "Links" oder "Pointer" zumindest nicht erkennbar für den Benutzer Dipl.-Ing. Walter Sabin

6 Relationale Datenbank (3/3)
Dipl.-Ing. Walter Sabin

7 SQL Befehlskategorien - Oracle
DML – Data Manipulation Language z.B.: SELECT, INSERT, UPDATE, DELETE DDL – Data Definition Language z.B.: (CREATE, ALTER, DROP, RENAME) TABLE Transaktionssteuerung (COMMIT etc.) System- und Session – Steuerung z.B.: ALTER SYSTEM Dipl.-Ing. Walter Sabin

8 Elementare Datentypen (1/3)
Zeichenketten char(<size>) z.B.: char(10) feste Größe, rechts mit Leerzeichen aufgefüllt maximal 2000 Zeichen varchar2(<size>) z.B.: varchar2(500) variable Länge, maximal 4000 Zeichen Dipl.-Ing. Walter Sabin

9 Elementare Datentypen (2/3)
Zahlen number(<p>,<s>) z.B.: number(6,2) p: Precission – maximal 38 s: Scale – Nachkommastellen Rundung wenn Anzahl der Nachkommastellen > s negatives "s" möglich - rundet links vom Dezimalpunkt z.B.: in number(5,-2) ergibt 12300 Dipl.-Ing. Walter Sabin

10 Elementare Datentypen (3/3)
Datum und Zeit date belegt 7 Bytes - CC YY MM DD HH MI SS Funktionen to_date, sysdate Datum ohne Uhrzeit -> Mitternacht (00:00:00) Standard format: DD-MON-YY Dipl.-Ing. Walter Sabin

11 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' Dipl.-Ing. Walter Sabin

12 Operatoren und Literale (2/2)
repräsentieren einen konstanten Wert Text oder Zeichenketten in einfachen Hochkomma: 'Die Schule ist toll' Ganze Zahlen (Integer): 24 oder –455 Zahlen (Number) oder – oder 2.3E-4 Dipl.-Ing. Walter Sabin

13 Einfache Abfragen – SELECT 1/12
Allgemeiner 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 Dipl.-Ing. Walter Sabin

14 Einfache Abfragen – SELECT 2/12
SQL> SELECT * FROM jobs; JOBID JOB_TITLE MIN_SALARY MAX_SALARY AD_PRES President FI_MGR Finance Manager FI_ACCOUNT Accountant Dipl.-Ing. Walter Sabin

15 Einfache Abfragen – SELECT 3/12
SQL> SELECT job_title, min_salary FROM jobs; JOB_TITLE MIN_SALARY President Finance Manager 8200 Accountant 4200 Dipl.-Ing. Walter Sabin

16 Einfache Abfragen – SELECT 4/12
Alias Namen SQL> SELECT job_title AS ‘‘Title‘‘, min_salary AS "Minimum Salary" FROM jobs; Title Minimum Salary President Finance Manager 8200 Accountant 4200 Dipl.-Ing. Walter Sabin

17 Einfache 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 Dipl.-Ing. Walter Sabin

18 Einfache Abfragen – SELECT 6/12
Pseudotabelle "dual" SQL> SELECT SYSDATE, USER FROM dual; SYSDATE USER 20 -NOV-03 HR Dipl.-Ing. Walter Sabin

19 Einfache 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 Dipl.-Ing. Walter Sabin

20 Einfache 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'); Dipl.-Ing. Walter Sabin

21 Einfache 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 Zeichen Escape Claus erlaubt die Verwendung obiger Zeichen SELECT * FROM jobs WHERE job_id LIKE 'AC\_%' ESCAPE '\'; WHERE salary BETWEEN 5000 and 6000; Dipl.-Ing. Walter Sabin

22 Einfache Abfragen – SELECT 10/12
Sortieren der Ergebniszeilen SQL> SELECT first_name || ' ' || last_name "Mitarbeiter Name" FROM employees WHERE department_id=90 ORDER BY last_name; Mitarbeiter Name Lex De Haan Steven King Neena Kochar Dipl.-Ing. Walter Sabin

23 Einfache 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 1 Region 2 Region 3 Region 4 Dipl.-Ing. Walter Sabin

24 Einfache 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 Anderes India Asien Italy Europa Dipl.-Ing. Walter Sabin

25 Quiz ? Dipl.-Ing. Walter Sabin

26 Zusammenfassung Geschichte von SQL.
Elementare Datentypen und Operatoren. Einfache Abfragebefehle mit SELECT, FROM, WHERE und ORDER BY Operatoren in der WHERE Klause Pattern-Matching Operatoren Dipl.-Ing. Walter Sabin

27 Jemand versucht den Wert: 34567
Jemand versucht den Wert: in ein Feld mit dem Datentyp number(7,2) zu speichern. Welcher Wert wird tatsächlich gespeichert? A – B – C – D – Dipl.-Ing. Walter Sabin

28 Welche Standardanzeigelänge hat ein Datumsfeld?
B – 19 C – 9 D – 6 Dipl.-Ing. Walter Sabin

29 Gegeben ist die folgende Abfrage: SELECT 'Mitarbeiter Name: ' || ename FROM emp where deptno=10; Welche Komponente ist ein Literal? A – 10 B – ename C – emp D – || Dipl.-Ing. Walter Sabin

30 Welche Klause in einer Abfrage schränkt die Anzahl der Datensätze ein?
A – ORDER BY B – SELECT C – FROM D – WHERE Dipl.-Ing. Walter Sabin

31 Gegeben ist die folgende Abfrage: SELECT empno, ename FROM emp where empno=7782 or empno=7876; Welcher Operator kann die "OR Bedingung" ersetzen? A – IN B – BETWEEN .. AND .. C – LIKE D – <= Dipl.-Ing. Walter Sabin

32 Jemand versucht den Wert: in ein Feld mit dem Datentyp number(5,-2) zu speichern. Welcher Wert wird tatsächlich gespeichert? A – B – C – Fehler D – Dipl.-Ing. Walter Sabin

33 Folgende Klauseln können in SQL Select statements vorkommen: 1. WHERE 2. FROM 3. ORDER BY In welcher Reihenfolge treten sie auf? A – 1,3,2 B – 2,1,3 C – 2,3,1 D – Die Reihenfolge ist gleichgültig Dipl.-Ing. Walter Sabin

34 FUNKTIONEN „Single Row“ - Funktionen „Group“ – Funktionen Grundlagen
Zeichen Funktionen Numerische Funktionen Datums – Funktionen Konvertierungsfunktionen Sonstige Funktionen „Group“ – Funktionen Dipl.-Ing. Walter Sabin

35 FUNKTIONEN Single Row 1/ 16
Verschiedene Datentype als Argumente Auch in PL/SQL verwendbar Verwendbar unter anderem in SELECT, WHERE und ORDER BY Klauseln Z.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); Dipl.-Ing. Walter Sabin

36 FUNKTIONEN Single Row 2/16
NULL Werte Funktionen NVL(Ausdruck1, Ausdruck2) SELECT last_name, salary salary*commission_pct bonus, (salary+salary*NVL(commission_pct,0)) Gehalt FROM employees, NVL2(Ausdruck1, Ausdruck2, Ausdruck3) NVL2(commission_pct, salary+salary* commission_pct, salary) Dipl.-Ing. Walter Sabin

37 FUNKTIONEN Single Row 3/16
Zeichenfunktionen ASCII(c1) liefert den Ascii Wert des ersten Zeichens in c1 SELECT ASCII('A') GR_A, ASCII('z') KL_Z FROM dual; GR_A KL_Z CHR(i) Liefert das Zeichen entsprechend dem Wert i SELECT CHR(65), chr(122), chr(223) FROM dual; Dipl.-Ing. Walter Sabin

38 FUNKTIONEN Single Row 4/ 16
Zeichenfunktionen (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 Zeichen SELECT LENGTH('Die Spengergasse') FROM DUAL; => 16 Dipl.-Ing. Walter Sabin

39 FUNKTIONEN 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 Dipl.-Ing. Walter Sabin

40 FUNKTIONEN 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 Dipl.-Ing. Walter Sabin

41 FUNKTIONEN 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. Dipl.-Ing. Walter Sabin

42 FUNKTIONEN 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: ' ' Dipl.-Ing. Walter Sabin

43 FUNKTIONEN Single Row 9/ 16
Zeichenfunktionen (Fs) REPLACE(c1,c2[c3]) Liefert c1 wobei alle Strings c2 durch c3 ersezt werden SELECT REPLACE('uptown','up','down') FROM dual; => downtown SOUNDEX(c1) Liefert die phonetische Darstellung von C1 SELECT SOUNDEX('Dawes' from dual); => D200 Dipl.-Ing. Walter Sabin

44 FUNKTIONEN 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 KUNDEN where knr=882; Dipl.-Ing. Walter Sabin

45 FUNKTIONEN 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; => FLOOR(n) Größter ganzzahliger Wert kleiner oder gleich n SELECT FLOOR(9.8), FLOOR(-32.85) from dual; => 9 -33 Dipl.-Ing. Walter Sabin

46 FUNKTIONEN Single Row 12/ 16
Numerische Funktionen (Fs) LN(n) – Natürlicher Logarithmus von n SELECT LN(2.7) FROM dual; => 0, LOG(n1,n2) Liefert den Logarithmus von n1 zur Basis n2 SELECT LOG(27,3) FROM dual; => 0, MOD(n1, n2) Liefert n1 modulo n2 SELECT MOD(14,5) FROM dual; => 4 Dipl.-Ing. Walter Sabin

47 FUNKTIONEN 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 Dipl.-Ing. Walter Sabin

48 FUNKTIONEN 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(' ',' ') 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; Dipl.-Ing. Walter Sabin

49 FUNKTIONEN 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 :00:00 Dipl.-Ing. Walter Sabin

50 FUNKTIONEN 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,' ') => : 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) Dipl.-Ing. Walter Sabin

51 FUNKTIONEN "Group" Grundlagen
Aggregat Funktionen – Wert basierend auf Inputmenge Vernachlässigt Nullwerte und liefern keine Nullwerte (Ausnahme: sum bei nur Nullwerten) Dipl.-Ing. Walter Sabin

52 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 Dipl.-Ing. Walter Sabin

53 FUNKTIONEN "Group" (Fs) Statement: SELECT employee_id, salary FROM hr.employees WHERE department_id = 60 ORDER BY salary; Ergebnis: EMPLOYEE_ID SALARY Dipl.-Ing. Walter Sabin

54 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 = 60 ORDER BY salary; Ergebnis avg avg_all avg_dist cnt cnt_dist sum_all sum_dist Dipl.-Ing. Walter Sabin

55 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 Dipl.-Ing. Walter Sabin

56 FUNKTIONEN "Group" (Fs) Klausel: HAVING
Einschränken der zurückgelieferten Gruppen Keine Gruppenfunktionen in der where Klausel SELECT department_id DID, sum(salary) SUMSAL, count(*) ANZ FROM hr.employees GROUP BY department_id HAVING count(*) > 10; Ergebnis: DID SUMSAL ANZ Dipl.-Ing. Walter Sabin

57 Joins 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 Dipl.-Ing. Walter Sabin

58 Einfache JOINs 2 Tabellen und "=" Operator
SELECT locations.location_id, city, department_name FROM locations, departments WHERE locations.location_id = departments.location_id Dipl.-Ing. Walter Sabin

59 Tabellen Aliase temporäres Umbenennen von Tabellen mit Schemaname
SELECT l.location_id, city, department_name FROM locations l, departments d WHERE l.location_id = d.location_id AND country_id != 'US'; mit Schemaname SELECT locations.location_id, hr.locations.city, department_name FROM hr.locations, hr.departments WHERE location.location_id = departments.location_id; Dipl.-Ing. Walter Sabin

60 JOINS – ANSI Syntax NATURAL JOIN kein Alias möglich
basiert auf Feldern mit gleichen Namen SELECT location_id, city, department_name FROM locations NATURAL JOIN departments; SELECT region_name, country_name, city FROM regions NATURAL JOIN countries NATURAL JOIN locations; Dipl.-Ing. Walter Sabin

61 JOINS – ANSI Syntax Fs. JOIN .. USING
spezifiziert die Felder, die für das JOIN verwendet werden sollen SELECT region_name, country_name, city FROM regions JOIN countries USING (region_id) JOIN locations USING (country_id) Fehlerhaft: SELECT region_name, country_name, city FROM regions JOIN locations USING (country_id) JOIN countries USING (region_id) Dipl.-Ing. Walter Sabin

62 JOINS – ANSI Syntax Fs. JOIN .. ON
wenn es keine gemeinsamen Feldnamen gibt SELECT region_name, country_name, city FROM regions r JOIN countries c ON r.region_id = c.region_id JOIN locations l ON c.country_id = l.country_id where c.country_id = 'US'; Dipl.-Ing. Walter Sabin

63 Kartesische 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_name FROM regions, countries where countries.country_ld LIKE 'I%'; Dipl.-Ing. Walter Sabin

64 OUTER 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.city FROM countries c, locations l WHERE c.country_id = l.country_id (+); Dipl.-Ing. Walter Sabin

65 OUTER JOINS Fs. SELECT c.country_name, l.city FROM countries c, locations l WHERE c.country_id (+) = l.country_id; SELECT c.country_name, l.city FROM countries c, LEFT JOIN locations l ON c.country_id = l.country_id; SELECT c.country_name, l.city FROM countries c, RIGHT JOIN locations l ON c.country_id = l.country_id; Dipl.-Ing. Walter Sabin

66 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_name FROM employees e FULL OUTER JOIN departments d ON e.department_id = d.department_id; Dipl.-Ing. Walter Sabin

67 Andere 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 Manager FROM employees e, employees m WHERE m.employee_id = e.manager_id; ANSI Syntax ??? Dipl.-Ing. Walter Sabin

68 Andere JOINS Fs Nicht Gleichheits JOIN
Tabelle grades: SELECT * FROM grades; GRADE LOW_SALARY HIGH_SALARY P P P P P Dipl.-Ing. Walter Sabin

69 Andere JOINS Fs Nicht Gleichheits JOIN Fs
SELECT last_name, salary, grade FROM employees, grades WHERE last_name LIKE 'R%' AND salary >= low_salary AND salary <= NVL(high_salary, salary); Raphaely P1 Rogers P5 Rajs P4 Russell P1 Dipl.-Ing. Walter Sabin

70 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 Dipl.-Ing. Walter Sabin

71 Andere JOINS Fs. SELECT last_name, hire_date FROM employees WHERE department_id = 90 UNION SELECT last_name, hire_date FROM employees WHERE lastname LIKE 'K%' (3 Zeilen + 6 Zeilen) ergibt 7 Zeilen Dipl.-Ing. Walter Sabin

72 Andere JOINS Fs. Sortierung durch ein! ORDER BY möglich
SELECT last_name, hire_date FROM employees WHERE department_id = 90 UNION SELECT last_name, hire_date FROM employees WHERE lastname LIKE 'K%' ORDER BY first_name Dipl.-Ing. Walter Sabin

73 Single Row Subqueries Ein Query im Query
Leifert nur einen Datensatz als Ergebnis SELECT last_name, first_name, salary FROM employees WHERE salary = (SELECT MAX(salary) FROM employees) Dipl.-Ing. Walter Sabin

74 Multiple Row Subqueries
Liefern mehr als einen Datensatz vom Subquery Sicherer wenn die Ergebnismenge nicht sicher ist SELECT last_name, first_name FROM employees where department_id in (SELECT department_id FROM employees WHERE first_name = 'John'); Dipl.-Ing. Walter Sabin

75 Korrelierte Subqueries
Subquery bezieht sich auf Felder des Mutterqueries Subquery wird für jeden zurückgelieferten Datensatz des Mutterqueries ausgeführt SELECT department_id, last_name, salary FROM employees e1 WHERE salary = (select max(salary) FROM employees e2 WHERE e1.department_id = e2.department_id) ORDER by 1,2,3; Dipl.-Ing. Walter Sabin

76 Skalare 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 WHEN country_id in (SELECT country_id FROM countries WHERE country_name = 'India') THEN 'Indian' ELSE 'NON-Indian' END) "INDIA?" FROM locations where city LIKE 'B%'; Dipl.-Ing. Walter Sabin

77 Skalare Subqueries Fs. In einer SELECT Klausel
SELECT last_name, department_id, (select MAX(salary) FROM employees sq WHERE sq.department_id = e.department_id) HiSal FROM employees e WHERE last_name LIKE 'R%'; Dipl.-Ing. Walter Sabin

78 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_NAME FROM departments d WHERE ((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; Dipl.-Ing. Walter Sabin

79 DML Data Manipulation Language Ändern von Daten in Tabellen
Koordinieren von mehrfachen Veränderungen Verwendung von Locks Steuerung der Änderungen Dipl.-Ing. Walter Sabin

80 DML – Modifying Data INSERT – fügt Datensätze in Tabellen ein
UPDATE – Ändert Feldwerte in Tabellen MERGE – Fügt ein oder ändert DELETE - Löscht Datensätze SELECT FOR UPDATE – Verhindert gleichzeitiges Verändern durch andere Transaktionen LOCK TABLE – Schützt vor gleichzeitiger Veränderung Dipl.-Ing. Walter Sabin

81 DML - INSERT Fügt Datensätze in ein oder mehrere Tabellen ein
Werte können eingegeben werden Werte können von Subqueries ermittelt werden Dipl.-Ing. Walter Sabin

82 DML – 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 Dipl.-Ing. Walter Sabin

83 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) Dipl.-Ing. Walter Sabin

84 DML – Single Table INSERT Fs.
Verwendung von Subselects INSERT INTO job_history (employee_id, start_date, job_id) SELECT employee_id, to_date(' ','DD.MM.YYYY'), job_id from employees; Dipl.-Ing. Walter Sabin

85 DML – Multiple Table INSERT
Neu in 9i INSERT ALL WHEN Bedingung THEN Into Klausel ELSE Into Klausel; Verkaufsdaten – Tabelle vkdat: anr .. Artikelnummer, agr .. Artikelgruppe vdat .. Verkaufsdatum, knr .. Kundennr. sq .. Verkaufsmenge, sp .. Verkaufspreis agr: B .. Bücher, V .. Video oder P .. Papier Dipl.-Ing. Walter Sabin

86 DML – Multiple Table INSERT Fs.
Tabellen: vkbuch, vkvideo, vkpapier Allg. Felder anr, vdat, knr, ums Spezielle Felder vkbuch: isbn, vkvideo: ej -- Erscheinungsjahr, vkpapier: atyp -- Artikeltyp Dipl.-Ing. Walter Sabin

87 DML – Multiple Table INSERT Fs.
INSERT ALL WHEN 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 Dipl.-Ing. Walter Sabin

88 DML - UPDATE Modifiziert vorhandene Datensätze in einer Tabelle
UPDATE tabellenname set (Felder, ...) = (subquery) WHERE Bedingung UPDATE tabellenname set Feld1 = Wert1, Feld2 = Wert WHERE Bedingung Dipl.-Ing. Walter Sabin

89 DML - UPDATE Fs. UPDATE employees SET commission_pct = WHERE commission_pct is NULL; UPDATE employees SET salary = salary*0.15, commission_pct = 0.2 WHERE department_id = 60; Dipl.-Ing. Walter Sabin

90 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); Dipl.-Ing. Walter Sabin

91 DML - UPDATE Fs. UPDATE job_history j1 SET start_date = (SELECT end_date + 1 FROM job_history j2 WHERE j2.end_date is not NULL and j2.employee_id = j1.employee_id and j2.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) Dipl.-Ing. Walter Sabin

92 DML - MERGE MERGE INTO tabelle USING {tabelle | subquery | view} ON (bedingung) WHEN MATCHED THEN UPDATE SET ... WHEN NOT MATCHED THEN INSERT VALUES ( ... ); select * from pi P_ID C_ID L_P M_P Dipl.-Ing. Walter Sabin

93 DML - MERGE Fs. select * from np;
P_ID L_P M_P merge into pi pi using (select p_id, l_p, m_p from np) np on (pi.p_id = np.p_id) when matched then update set pi.l_p = np.l_p, pi.m_p = np.m_p when 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); Dipl.-Ing. Walter Sabin

94 DML - MERGE Fs. Ergebnis:
select * from pi; P_ID C_ID L_P M_P Dipl.-Ing. Walter Sabin

95 DML - DELETE - TRUNCATE DELETE FROM table WHERE bedingung
DELETE FROM employees WHERE salary > 15000; Löschen der gesamten Tabelle ohne Rollback TRUNCATE table [DROP | REUSE] STORAGE schnell, benötigt wenig Resourcen Dipl.-Ing. Walter Sabin

96 DML - 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 Dipl.-Ing. Walter Sabin

97 DML - 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 Dipl.-Ing. Walter Sabin

98 TABELLEN - 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 DATUM DATE – Datum und Zeit (bis Sekunden) TIMESTAMP – Datum und Zeit (bis 9 stellige Sekundenbruchteile) Dipl.-Ing. Walter Sabin

99 TABELLEN - Datentypen Fs.
Binäre Datentypen RAW (2000 Byte), BLOB (bis 4GB), BFILE(external FILE bis 4GB) Sonstige Datentypen ROWID – Pseudospalte bei jeder Tabelle (physische Datensatzadresse – schnellster Zugriffsweg, kann sich bei update ändern) Dipl.-Ing. Walter Sabin

100 TABELLEN - Erstellen CREATE TABLE
CREATE TABLE produkte ( produkt_id NUMBER (4), produkt_name VARCHAR2(50), lager_menge NUMBER(15), preis NUMBER(15,2) ); Dipl.-Ing. Walter Sabin

101 TABELLEN - Erstellen Fs.
Zusatzinformation beim Erstellen von Tabellen: Standardwerte "Constraints" Tabellenart Speicherangaben "Tablespace" "Partitionierungs" – Information Dipl.-Ing. Walter Sabin

102 TABELLEN - Erstellen Fs.
Namen von Tabellen und Feldern: maximal 30 Zeichen lang Alphanumerische Zeichen + "_, $, #" erlaubt (beginnend mit Aplhabetischem Zeichen Caseinsensitiv wenn nicht in "" eingeschlossen Dipl.-Ing. Walter Sabin

103 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 PENDING Dipl.-Ing. Walter Sabin

104 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 ) ) ; Dipl.-Ing. Walter Sabin

105 TABELLEN - Erstellen 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 Dipl.-Ing. Walter Sabin

106 TABELLEN - Verändern Felder hinzufügen Felddatentypen verändern
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 Dipl.-Ing. Walter Sabin

107 CONSTRAINTS NOT NULL Check Constraints
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)) Dipl.-Ing. Walter Sabin

108 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 Dipl.-Ing. Walter Sabin

109 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 ) ) ; Dipl.-Ing. Walter Sabin

110 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} Dipl.-Ing. Walter Sabin

111 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 Dipl.-Ing. Walter Sabin

112 Andere 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 Dipl.-Ing. Walter Sabin

113 SYNONYME 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; Dipl.-Ing. Walter Sabin

114 INDEXE Lesen von Datensätzen B_Tree Index oder Bitmap Index
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 Dipl.-Ing. Walter Sabin

115 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) Dipl.-Ing. Walter Sabin

116 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 Dipl.-Ing. Walter Sabin

117 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. Dipl.-Ing. Walter Sabin

118 INDEXE Fs. B-Tree Index (eindeutig) CREATE UNIQUE INDEX emp_uk_nam ON employees (last_name, first_name, employee_id); Index auf Funktion: CREATE INDEX upper_ix ON employees (UPPER(last_name)); Bitmap Index CREATE BITMAP INDEX firstB ON employees (substr(last_name,1,1)); Dipl.-Ing. Walter Sabin

119 Views – Datensichten Logische Darstellung von Daten von einer oder mehreren Tabellen base tables Wie gespeicherte Abfrage Abfrage im Data Dictionary gespeichert DESCRIBE Befehl listet die Tabellen (View) Definition Dipl.-Ing. Walter Sabin

120 Views – Erstellung CREATE VIEW admin_employees AS SELECT first_name || last_name NAME, , job_id POSITION FROM employees WHERE department_id = 10; DESCRIBE admin_employees CREATE FORCE VIEW .... Erstellt auch fehlerhafte Views Dipl.-Ing. Walter Sabin

121 Views – Erstellung mit Feldnamen
CREATE 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 departments USING (department_id) ORDER BY first_name || last_name; Dipl.-Ing. Walter Sabin

122 Views – Create mit Fehlern
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 Dipl.-Ing. Walter Sabin

123 Views – Diverses Read-Only Views:
WITH READ ONLY Constraints können definiert werden nur "deklarativ" – DISABLE NOVALIDATE Ändern von Views CREATE OR REPLACE ALTER VIEW ALTER VEIW test_view COMPILE nach Änderungen der Basistabelle DROP VIEW Dipl.-Ing. Walter Sabin

124 Views – Verwendung Darstellung eines "Subsets" der Daten
Darstellung eines "Supersets" der Daten Verdecken von komplexen JOINS Verwendung von sprechenden Feldnamen Erreichung eines höheren Unabhängigkeitsgrades Dipl.-Ing. Walter Sabin

125 Views – 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 Dipl.-Ing. Walter Sabin


Herunterladen ppt "Einführung in SQL Universeller Zugriff auf Daten in Datenbanksystemen unterschiedlicher Systemhersteller!"

Ähnliche Präsentationen


Google-Anzeigen