Kurs Oracle 10g Einführung Teil 5 Einführung Timo Meyer Administration von Oracle-Datenbanken Timo Meyer Sommersemester 2006 Seite 1 von 16 Seite 1 von 16
Agenda 1 Tabellen und Views erstellen 2 Indizes und Rechtevergabe Einführung 3 Projektion und Selektion 4 Verbund von Tabellen (Joins) 5 Sortieren und Einfügen von Datensätzen 6 Ändern und Löschen von Datensätzen Timo Meyer Sommersemester 2006 Seite 2 von 16 Seite 2 von 16
1 Tabellen und Views erstellen Tabelle anlegen CREATE TABLE <tabellen_name> ( <feldname_1><feldtyp_1>,... <feldname_x><feldtyp_x> ) Tabellen Installation / Views View (Sicht) anlegen CREATE VIEW <view_name> AS <select-kommando> Seite 3 von 16 Timo Meyer Sommersemester 2006 Seite 3 von 16
2 Indizes und Rechtevergabe Index anlegen CREATE INDEX <index_name> ON <tabellen_name> (<feldliste) Berechtigungen vergeben GRANT ON TO <privileg> <table> <benutzer_oder_rolle> <privileg> = select, update, insert, delete,... Indizes Migration / Rechte Seite 4 von 16 Timo Meyer Sommersemester 2006 Seite 4 von 16
SQL-Beispiele -- Entity Arzt CREATE TABLE arzt ( nr NUMBER(4), name VARCHAR(30), vorname VARCHAR(30), titel VARCHAR(20), facharzt VARCHAR(50),... ) PRIMARY KEY (nr) Timo Meyer Sommersemester 2006 Seite 5 von 16 -- Entities Patient+Untersuchung CREATE TABLE patient ( -- Patient nr NUMBER(4), name VARCHAR(30), geschlecht NUMBER(1),... -- Aufnahmeuntersuchung aufn_arzt_nr NUMBER(4), aufn_datum DATE, aufn_gewicht NUMBER(4,1),... -- Abschlussuntersuchung... ) PRIMARY KEY (nr), FOREIGN KEY(auf_arzt_nr) REFERENCES arzt(nr) Seite 5 von 16
SQL-Beispiele -- Schnelle Suche nach n CREATE INDEX i_patient_name ON patient(name) -- View ohne personenbezogene Daten -- für Datenschutz CREATE VIEW v_patient_datenschutz AS SELECT -- Patient nr, name, geschlecht,... -- Aufnahmeuntersuchung aufn_arzt_nr, aufn_datum,...... FROM patient Timo Meyer Sommersemester 2006 Seite 6 von 16 Seite 6 von 16
SQL-Beispiele -- Benutzergruppe (Rolle) auswertung -- hat keinen direkten Zugang REVOKE ALL ON patient FROM auswertung -- Benutzer darf aber den View lesen -- (nicht ändern!) GRANT select ON v_patient_datenschutz TO auswertung Timo Meyer Sommersemester 2006 Seite 7 von 16 Seite 7 von 16
3 Projektion und Selektion Projektion : Ausblenden von Spalten SELECT name, titel FROM arzt Müller Vogel Titel Prof. Dr. Assistent Selektion : Ausblenden von Zeilen SELECT * FROM personal WHERE nr=320 320 Vogel Vorname Fidelis Titel Assistent Facharzt HNO Seite 8 von 16 Timo Meyer Sommersemester 2006 Seite 8 von 16
4 Verbund von Tabellen (Joins) Arzt Müller Vorname Joseph Titel Prof. Dr. Facharzt HNO 320 Vogel Fidelis Assistent HNO Patient 306 310 Meyer Timo Horzella Saskia Geschlecht 1 0 Aufn_arzt_nr 310 a) Verbund (cartesisches Produkt, Kreuzprodukt) SELECT * FROM arzt, patient 320 Müller Vogel 306 310 Meyer Timo Horzella Saskia Aufn_arzt_nr 310 Seite 9 von 16 Timo Meyer Sommersemester 2006 Seite 9 von 16
4 Verbund von Tabellen (Joins) Arzt Müller Vorname Joseph Titel Prof. Dr. Facharzt HNO 320 Vogel Fidelis Assistent HNO Patient 306 310 Meyer Timo Horzella Saskia Geschlecht 1 0 Aufn_arzt_nr 310 b) Natürlicher Verbund über gemeins. Attribut SELECT * FROM arzt, patient WHERE arzt.nr = patient.auf_arzt_nr Aufn_arzt_nr Müller 310 Horzella Saskia Seite 10 von 16 Timo Meyer Sommersemester 2006 Seite 10 von 16
4 Verbund von Tabellen (Joins) c) Äußerer Verbund (outer join, left join) SELECT * FROM arzt, patient WHERE arzt.nr = patient.auf_arzt_nr(+) 320 Müller Vogel 310 NULL Horzella Saskia NULL Aufn_arzt_nr NULL Der äußere Verbund liefert zusätzlich zum natürlichen Verbund auch die Datensätze aus der ersten Tabelle ohne Partner in der zweiten Tabelle. Die Felder, die aus der zweiten Tabelle stammen, werden hierbei mit dem NULL-Wert (undefiniert) gefüllt. Seite 11 von 16 Timo Meyer Sommersemester 2006 Seite 11 von 16
5 Sortieren und Einfügen von Datensätzen Abfragen und Sortieren SELECT <feldliste> FROM <tabellen> [WHERE <bedingung>] [ORDER BY <feldliste>] Einfügen von Datensätzen INSERT [(<feldliste>)] INTO <tabellen> VALUES (<wertliste>) Seite 12 von 16 Timo Meyer Sommersemester 2006 Seite 12 von 16
6 Ändern und Löschen von Datensätzen Ändern von Datensätzen UPDATE <tabelle> SET <feld> = <wert>,... [WHERE <bedingung>] Löschen von Datensätzen DELETE FROM <tabelle> [WHERE <bedingung>] Timo Meyer Sommersemester 2006 Seite 13 von 16 Seite 13 von 16
SQL-Beispiele -- Aufnahmeliste letzte Woche -- sortiert nach Arzt SELECT * FROM patient WHERE aufn_datum > sysdate - 7 ORDER BY aufn_arzt_nr -- Aufnahmeliste Männer, -- sortiert nach Datum und SELECT * FROM patient WHERE geschlecht = 1 ORDER BY aufn_datum, name Seite 14 von 16 Timo Meyer Sommersemester 2006 Seite 14 von 16
SQL-Beispiele -- Anzahl unplausibler oder fehlender -- Gewichtsangaben SELECT COUNT(*) FROM patient WHERE aufn_gewicht > 150 OR aufn_gewicht < 50 OR aufn_gewicht IS NULL -- Durchschnittsgewicht nach Geschlecht SELECT geschlecht, AVG(aufn_gewicht) AS durchschnittsgewicht FROM patient GROUP BY geschlecht Timo Meyer Sommersemester 2006 Seite 15 von 16 Seite 15 von 16
Fragen Timo Meyer Sommersemester 2006 Seite 16 von 16 Seite 16 von 16