Skript: Oracle 9i - Einführung - Leibniz Universität IT Services

Werbung
RRZN
Regionales Rechenzentrum
D-30159 Hannover
für Niedersachsen
Schloßwender Straße 5
Universität Hannover
Timo Meyer
– Database Administrator (IHK) –
Kurs
Oracle 9i – Einführung
2. überarbeitete Auflage
Sommersemester 2005
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Inhaltsverzeichnis
1
Einleitung ............................................................................................................. 06
2
Einführung Datenbanken ...................................................................................
2.1
Was ist eine Datenbank (DB)? ...................................................................
2.2
Wichtige Begriffe ........................................................................................
Redundanz ............................................................................................
Konsistenz ............................................................................................
Datenintegrität .......................................................................................
Datensicherheit .....................................................................................
Datenschutz ..........................................................................................
2.3
Datenbanktypen .........................................................................................
Hierarchische Datenbanken ..................................................................
Netzwerkdatenbanken ..........................................................................
Relationale Datenbanken ......................................................................
2.4
Aufbau und Organisation einer Datenbank .................................................
3-Ebenen-Modell ...................................................................................
Weitere Komponenten des DBMS ........................................................
2.5
Physische Datenbankarchitektur ................................................................
Zentralisierte DBS .................................................................................
Verteilte DBS ........................................................................................
Client-Server DBS .................................................................................
Parallele DBS ........................................................................................
2.6
Übungen .....................................................................................................
07
07
08
08
08
08
08
08
08
09
09
10
10
11
12
12
12
13
13
14
14
3
Der Datenbankentwurf ........................................................................................
3.1
Datenbank-Lebenszyklus und Entwurfsphasen ..........................................
Anforderungsanalyse ............................................................................
Konzeptioneller Entwurf ........................................................................
Logischer Entwurf .................................................................................
Physischer Entwurf ...............................................................................
Test und Validation ...............................................................................
Anwendung und Wartung ......................................................................
3.2
Entity-Relationship-Modell (ER-Modell) ......................................................
Elemente und grafische Darstellung .....................................................
Kardinalitäten ........................................................................................
Beziehungstypen ..................................................................................
Datenbankentwurf .................................................................................
3.3
Übungen .....................................................................................................
3.4
ER-Diagramm der Nordwind Ltd. London ...................................................
15
15
15
15
15
15
15
15
16
16
18
19
20
21
22
2
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
4
Das relationale Datenbankmodell ......................................................................
4.1
Relationen und Schlüssel ...........................................................................
Relation .................................................................................................
Attribute und Tupel ................................................................................
Schlüssel ...............................................................................................
4.2
Umwandlung des ER-Modells in ein relationales Modell ............................
Entitätsmengen .....................................................................................
1:1- und 1:n-Beziehungen .....................................................................
m:n-Beziehungen ..................................................................................
Generalisierung/Spezialisierung (is-a-Beziehung) ................................
4.3
Normalisierungsprozess .............................................................................
4.4
Übungen .....................................................................................................
23
23
23
23
23
24
24
24
26
26
27
30
5
Datenbanken ........................................................................................................
5.1
Datenbankabfragesprache „Structured Query Language“ (SQL) ...............
5.2
Installation einer Oracle-Datenbank ...........................................................
5.3
Anmelden an Oracle-Datenbank mittels SQL*Plus Worksheet ..................
5.4
Anmelden an Oracle-Datenbank mittels Eingabeaufforderung ...................
5.5
Nordwind-Datenbank ..................................................................................
5.6
Starten und Herunterfahren von Oracle .....................................................
31
31
31
32
33
33
34
6
Tablespaces erstellen und verwalten ................................................................ 36
6.1
Tablespaces erstellen und löschen ............................................................ 36
6.2
Tablespaces Offline und Online setzen ...................................................... 36
7
Tabellen erstellen und verwalten .......................................................................
7.1
Tabellen erstellen .......................................................................................
Einfache Tabellen erstellen ...................................................................
Datentypen ............................................................................................
Integritätsregeln in Tabellen verwenden ...............................................
7.2
Vorhandene Tabellen anzeigen, ändern und löschen ................................
Vorhandene Tabellen anzeigen ............................................................
Vorhandene Tabellen ändern ................................................................
Vorhandene Tabelle löschen ................................................................
7.3
Übungen .....................................................................................................
37
37
37
38
39
40
40
40
41
41
8
Datenpflege .........................................................................................................
8.1
Daten einfügen, aktualisieren und löschen .................................................
Mehrere Datensätze einfügen ...............................................................
Daten aktualisieren ...............................................................................
Daten löschen .......................................................................................
8.2
Übungen .....................................................................................................
42
42
42
42
43
44
9
Einfache Datenabfrage .......................................................................................
9.1
SELECT – Anweisung verwenden .............................................................
Doppelte Datensätze vermeiden ...........................................................
Anzahl der Datensätze beschränken ....................................................
Berechnungen ausführen ......................................................................
45
45
46
46
47
3
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
9.2
Bedingung definieren .................................................................................
Vergleichsoperatoren ............................................................................
Operator ................................................................................................
Bereichsprüfung ....................................................................................
Elementprüfung .....................................................................................
Mustervergleich .....................................................................................
Logische Operatoren ............................................................................
Gruppieren bzw. Sortieren der Abfrageergebnisse ....................................
Gruppieren ............................................................................................
Sortieren ...............................................................................................
Spalten umbenennen ............................................................................
Übungen .....................................................................................................
48
48
49
49
49
50
50
51
51
52
52
53
10
Constraints und Indizes .....................................................................................
10.1 Constraints .................................................................................................
Primärschlüssel erstellen und löschen ..................................................
Fremdschlüssel erstellen und löschen ..................................................
10.2 Übungen: Constraints .................................................................................
10.3 Indizes ........................................................................................................
Indizes erstellen ....................................................................................
Indizes löschen .....................................................................................
10.4 Übungen: Indizes .......................................................................................
54
54
54
55
56
57
57
57
58
11
Funktionen in Abfragen ......................................................................................
11.1 Standard-SQL-Funktionen ..........................................................................
Aggregatsfunktionen .............................................................................
Aggregatsfunktionen in Bedingungen ...................................................
11.2 Nicht-standardisierte Funktionen ................................................................
11.3 Übungen .....................................................................................................
59
59
59
60
60
61
12
Datenabfragen über mehrere Tabellen ..............................................................
Datenbestände in mehreren Tabellen ...................................................
Verknüpfungen von Tabellen über Mengenoperatoren .........................
12.1 Verbund von Tabellen (Joins) .....................................................................
Einfaches Verknüpfen von Tabellen .....................................................
Ersatznamen für Tabellen mit dem Schlüsselwort AS definieren ..........
Ersatznamen für Tabellen ohne das Schlüsselwort AS definieren ........
Full-Join ................................................................................................
Inner-Join (Equi-Join) ............................................................................
Natural-Join ...........................................................................................
Theta-Join .............................................................................................
Outer-Join .............................................................................................
Self-Join ................................................................................................
12.2 Tabellen vereinigen ....................................................................................
12.3 Übungen .....................................................................................................
62
62
62
63
65
67
67
67
68
69
70
70
71
72
73
9.3
9.4
4
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
13
Sichten ................................................................................................................. 74
13.1 Sichten erstellen und löschen ..................................................................... 74
13.2 Daten über Sichten einfügen und löschen .................................................. 74
14
Zugriffsrechte und Benutzer verwalten .............................................................
14.1 Benutzer und Profile anlegen und Verwalten .............................................
Benutzer anlegen und verwalten ...........................................................
Profile anlegen und verwalten ...............................................................
14.2 Zugriffsrechte an Benutzer vergeben .........................................................
14.3 Übungen .....................................................................................................
76
76
76
77
78
79
15
Anhang .................................................................................................................
15.1 Glossar .......................................................................................................
15.2 Wichtige SQL – Befehle .............................................................................
15.3 Literaturhinweise ........................................................................................
80
80
87
91
16
Lösungen zu den Übungen ................................................................................ 92
Kapitel 2: Einführung Datenbanken .................................................................... 92
Kapitel 3: Datenbankentwurf .............................................................................. 93
Kapitel 4: Relationales Datenbankmodell ........................................................... 94
Kapitel 7: Tabellen einfügen und verwalten ........................................................ 97
Kapitel 8: Datenpflege ........................................................................................ 98
Kapitel 9: Einfache Datenabfragen ................................................................... 100
Kapitel 11: Funktionen in Abfragen .................................................................... 102
Kapitel 12: Datenabfragen über mehrere Tabellen (Joins) ................................. 103
17
Stichwortverzeichnis ........................................................................................ 106
5
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
1
Einleitung
Ob E-Commerce, Internet-Suchmaschinen, prozessorientierte IT-Systeme in Unternehmen: Alles funktioniert nur deshalb, weil ein anforderungsgerecht entwickeltes Datensystem zugrunde liegt, das intensiv gepflegt und ständig überwacht wird. Datenbankadministratoren und Datenbankprogrammierer sind für den reibungslosen Betrieb verantwortlich.
Durch ständig wachsende Datenmengen, welche mit IT-Systemen verwaltet werden, sind
IT-Spezialisten zunehmend unverzichtbar geworden.
Das Seminar richtet sich in erster Linie an Anfänger sowie an Datenbank-Fachleute, die
ihre grundlegenden Datenbankkenntnisse auffrischen oder erweitern möchten. Nach diesem Kurs können Sie die Sprache SQL in einer Oracle-Umgebung (Version 8 und 9) einsetzen und installieren. Sie beherrschen Daten und deren Strukturen zu erstellen, pflegen
und abzufragen.
Im Kurs werden folgende Themen behandelt:
¾
¾
¾
¾
¾
¾
¾
¾
¾
Entity-Relationship-Modell (ER-Modell)
Relationales Datenbankmodell
Installation von Oracle 9.2.0.1.0 (Oracle 9i)
Verwendung von interaktivem SQL (SQL*Plus Worksheet etc.)
Erstellung und Verwendung von Datenbankobjekten (Tabellen, Indizes etc.)
Anlegen, Ändern und Löschen von Daten
Erstellen von vordefinierten und komplexen Datenbankabfragen
Verwendung vordefinierter SQL-Funktionen
Zugriffsrechte und Benutzerverwaltung
®
Hinweis: Alle Rechte für die Datenbank „Nordwind“ liegen bei der Microsoft Corporation
und wurden nur für Übungszwecke dieses Kurses für die Datenbank der Oracle® Corpora-
tion konvertiert. Alle vorliegenden Informationen werden für Schulungszwecke ohne Rücksicht auf einen evtl. Patentschutz veröffentlicht. Es wurde extra in Anlehnung an die Datenbank „Nordwind“ eine gleichnamige Musterfirma Nordwind Ltd. und deren ITTochtergesellschaft gegründet. Die Wiedergabe von Gebrauchsnamen, Handelsnamen,
Warenbezeichnungen usw. in diesem Skript berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt
werden dürften.
Meinen herzlichen Dank spreche ich aus gegen die Herren Dipl.-Inf. Stefan HIETEL und
Reno FÖLLMER von der dama.go GmbH, Potsdam, (http://www.damago.de), und Walter
ISCHNER vom Computer Service Ischner, Barsinghausen, (http://www.ischner.de) für Ihren
freundlichen Rat, Hilfe und die Überlassung einiger Übungsaufgaben.
Timo Meyer
Hannover, den 07. Dezember 2004
6
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2
Einführung Datenbanken
2.1
Was ist eine Datenbank (DB)?
¾
¾
¾
Eine Datenbank ist eine strukturierte und organisierte Sammlung von Daten. In
jeder größeren Einrichtung (Banken, Behörden, Transportunternehmen etc.) müssen viele Mitarbeiter Zugriff auf Daten haben, z.B. Konten, Lagerbestände, Verwaltungsdaten etc.
Ein solcher Zugriff bedeutet Lesen, Anwenden, Verändern von Daten.
Dabei unterliegen einige Daten dem Datenschutz (nur bestimmte Mitarbeiter haben Zugriff auf bestimmte Datenbestände) Ö bestimmte Daten dürfen nicht oder
nur durch Berechtigung verändert werden und dürfen nicht verloren gehen.
Eine Datenbank besteht aus:
¾
¾
¾
einer Datenbasis Ö dem eigentlichen Datenbestand
dem Datenbank-Management-System (DBMS) Ö gewährt Zugriff auf die Daten
sowie dem Data Dictionary (auch: Row-Cache) Ö speichert Informationen über
die Datenbank (Sichten, Datenbank-Schema etc.) und deren Verwaltung (Zugriffsrechte etc.)
Anwendungen greifen über die Datenbanksoftware auf die Daten zu, die in der Datenbank gespeichert sind.
7
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Mit speziellen Abfragesprachen (z.B. SQL Ö Structured Query Language) werden Anfragen an die Datenbasis über das DBMS erstellt und dadurch werden die Informationen in
definierten Ausgabeformen als
¾
¾
¾
Listen
Bildschirmausgaben
Drucktexten
dem Nutzer zur Verfügung gestellt.
Die Aufgaben einer Datenbank sind die Verarbeitung von Nutzeranfragen. Lieferung von
Daten (Informationsfluss), die Möglichkeit der Rechtevergabe, die Protokollierung der
Transaktionen, die Überprüfung der Daten auf Widersprüche, sowie die Möglichkeit zum
Mehrbenutzerbetrieb.
2.2
Wichtige Begriffe
Bei der Datenbankentwicklung sind folgende Sachverhalte zu beachten:
Redundanz:
¾ mehrfache physische Speicherung von Daten Ö dadurch werden Änderungen
aufwendig, da die gleichen Daten an verschiedenen Stellen geändert werden
müssen.
¾ Datenbestand wird fehleranfällig, wenn mehrfach gespeicherte Daten nur an einer
Stelle geändert werden Ö kann zur Inkonsistenz der Daten führen.
Konsistenz:
¾ logische Richtigkeit der Daten.
Datenintegrität:
¾ umfasst die Menge der Maßnahmen die dafür sorgen, dass Daten während der
Verarbeitung nicht beschädigt werden können. Zum Beispiel: Kopie von Datenpaketen anlegen.
Datensicherheit:
¾ beschreibt die Sicherheit vor dem Verlust von Datenbeständen durch technische
Ausfälle.
Datenschutz:
¾ Schutz der Daten vor unberechtigten Zugriff und Verfälschung.
8
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2.3
Datenbanktypen
Hierarchische Datenbanken:
¾ zwischen den Datensätzen besteht eine untergeordnete Rangfolge.
¾ dieses System dient der Verarbeitung von Datensätzen, die eine unterschiedliche
Länge besitzen können.
Allgemeine Darstellung
Darstellung mit Beispieldaten
Netzwerkdatenbanken:
¾ zwischen den Tabellen besteht 1:n-Beziehung.
¾ Relationen werden als SETS bezeichnet.
Allgemeine
Darstellung
Darstellung
mit Beispielen
9
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Relationale Datenbanken:
¾ Daten werden in Tabellen (Relationen) gespeichert, zwischen denen Beziehungen (Integritäten) bestehen.
¾ SQL stellt das Hauptbindeglied zwischen den Daten und Resultaten dar.
Allgemeine Darstellung
2.4
Darstellung mit Beispieldaten
Aufbau und Organisation einer Datenbank
Eines der wichtigsten Ziele eines Datenbanksystems ist die Datenunabhängigkeit. Diese
wird durch die Trennung der Daten von den Anwendungsprogrammen, die die Datenbank
verwalten, erreicht.
Beispiel:
Ein Großhandel, wie unsere
NORDWIND LDT., hat verschiedene Abteilungen. Jede Abteilung braucht nur Teile der Datenbank, bestimmte Sichten.
So verwendet jede Abteilung
nur Daten, die sie auch benötigt. Zum Beispiel braucht die
Abteilung „Rechnungswesen“
keine Informationen zum „Lagerbestand“.
Logische Gesamtsicht auf die DB der Großhandelsfirma NORDWIND Ltd.
10
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
3-Ebenen-Model:
Hinweis:
¾
¾
¾
Externe Ebene (Data Manipulation Language, Veränderung der Daten Ö schreiben, löschen, hinzufügen)
Konzeptionelle Ebene (Data Definition Language, Beschreibung der Daten und
ihrer logischen Zusammenhänge: „Ausschnitt aus der realen Welt“)
Interne Ebene (Data Administration Language, beschreibt Organisation der Daten auf Speichermedium und Zugriffsmöglichkeiten auf die Daten; Zugriffsrechte
werden vergeben)
11
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Datenbankmanagementsystem (DBMS):
¾
¾
¾
ist ein Softwarepaket, welches die Verwaltung der Datenbank übernimmt und alle
Zugriffe darauf regelt.
nimmt Benutzeranfragen entgegen, ermittelt die gefragten Daten aus der Datenbank und liefert sie dem Benutzer bzw. dem Anwendungsprogramm zurück.
weitere Aufgaben des DBMS sind:
9 Wahrung der Integrität (in sich richtige und widersprüchliche Daten)
9 Datensicherung (Wiederherstellung nach Systemabsturz)
9 Synchronisation (gleichzeitige Zugriffe verwalten, sodass die Integrität gewahrt bleibt)
9 Datenschutz (bestimmte Daten nur für berechtigte Personen zugänglich)
Weitere Komponenten des DBMS:
¾
¾
2.5
Data Dictionary (speichert Informationen über die Daten der DB und deren Verwaltung)
Logbuch (speichert Informationen über alle Transaktionen, dient zur
Wiederherstellung)
Physische Datenbankarchitektur
Zentralisierte DBS:
Das gesamte DBMS, die Daten und die Anwendungen liegen auf einem Zentral-Computer.
An den anderen Standorten befinden sich Terminals, die nur der Ein- und Ausgabe dienen. Probleme sind hier die Antwortzeiten und die Ausfallsicherheit!
Netz mit Terminals und zentralisierter Datenbank
12
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Verteilte DBS:
Verteilte DBS sind mehrere logisch zusammengehörige Teildatenbanken, die in einem
Netz auf mehreren lokal getrennten Computern verteilt sind. Die Verteilung der Daten wird
vor dem Anwender verborgen und erscheint daher als ein zentralisiertes DBS.
Verteiltes DBS
Client-Server DBS:
Hier stellt der Client eine Anforderung an den Server, der Server bearbeitet die Anforderung und gibt die gewünschte Antwort an den Client zurück. Der Server stellt also die
Dienstleistungen zur Verfügung und der Client nimmt sie in Anspruch. Die Dienste des
Servers können von mehreren Clients gleichzeitig genutzt werden.
13
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Parallele DBS:
In einem parallelen DBS sind mehrere Prozessoren, Platten und Hauptspeicher über eine
sehr schnelle Leitung miteinander verbunden. Die Daten werden auf die verfügbaren Platten verteilt. Datenbank-Abfragen und Transaktionen werden so zerlegt, dass sie auf mehreren Prozessoren gleichzeitig abgearbeitet werden können. Dadurch werden die Antwortzeiten verkürzt.
2.6
Übungen: Einführung Datenbanken
(Lösung)
1.
Welche Datenbanktypen kennen Sie? Wodurch sind sie gekennzeichnet?
2.
Nennen Sie die Namen der 3 Ebenen des 3-Ebenen-Modells, und geben Sie an, was
in jeder Ebene dargestellt wird.
3.
Was ist ein Datenbankmanagementsystem?
4.
Was ist ein Data Dictionary, und wozu wird es benötigt?
5.
Welche physischen Datenbankarchitekturen kennen Sie? Erläutern Sie eine!
14
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
3
Der Datenbankentwurf
3.1
Datenbank-Lebenszyklus und Entwurfsphasen
Anforderungsanalyse:
¾
Grenzt die Inhalte der neuen DB ein und dient der Festlegung von Benutzergruppen und Anwendungen. Datenobjekte, deren Eigenschaften und Beziehungen,
sowie mögliche Vorgänge (Aktualisierungen, Abfragen) und Randbedingungen
werden ermittelt … Resultat ist der Datenbankansatz.
Konzeptioneller Entwurf:
¾
Umfasst die Modellierung und Integration der Sichten. Dafür werden meist EntityRelationship-Diagramme (ER-Diagramm) erstellt.
Logischer Entwurf:
¾
Grafische Darstellungen eines konzeptionellen Entwurfs werden in das Datenbankmodell des Ziel-Datenbanksystems transformiert. Die gesamte DB wird für
eine effektive Speicherung aufbereitet (Normalisierung siehe 4.3).
Physischer Entwurf/Implementierung:
¾
DB wird erstellt und benötigte Anfragen werden formuliert. Für ein relationales
DBS geschieht dies in der Abfragesprache SQL, welche verschiedene Dialekte
kennt: Access, SQL-Server, MySQL und ORACLE.
Test und Validation:
¾
DB und die erstellten Abfragen werden nun getestet und auf ihre Gültigkeit bezüglich der Anforderungen geprüft (validiert).
Anwendung und Wartung:
¾
In der Phase der Anwendung muss die DB ständig gewartet werden, denn im
Laufe der Zeit können sich Änderungen des Datenbankschemas ergeben oder es
müssen neue Benutzer angelegt und verwaltet werden.
15
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
3.2
Entity-Relationship-Modell (ER-Modell)
Das Entity-Relationship-Modell1 (kurz ER-Modell oder ERM) ist das bekannteste und
meistverwendete grafische Hilfsmittel für den Datenbankentwurf. Es ermöglicht, konzeptionelle Entwürfe einer Datenbank auf leicht verständliche Art grafisch darzustellen.
Elemente und grafische Darstellung:
Entität (Entity):
¾
unterscheidbare (identifizierbare) Dinge aus der realen Welt (z.B. Personen, Gegenstände, Firmen); wird auch als Objekt bezeichnet.
Beispiel:
¾
Entitäten:
Abteilung Forschung
Mitarbeiter Andrew Füller
Projekt CX „Konkurrenzanalyse“
Entitätsmengen:
Alle Abteilungen
Alle Mitarbeiter
Alle Projekte
Entity-Typen:
Abteilung
Mitarbeiter
Projekte
Eigenschaften charakterisieren eine Entität, einen Entity-Typ, eine Beziehung
bzw. einen Beziehungstyp.
Eigenschaften:
Abteilung
Abteilungsnummer
Projektnummer
Projektname
Projektbeginn
Domänen:
Abteilung:
Abteilungsnummer:
Projektnummer:
Projektname::
1
Einkauf
Verkauf
Personal
1-999
1-9999
{A-Z|1-9}
Das ER-Modell wurde 1968 von dem amerikanischen Mathematiker Cheen erfunden.
16
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Schlüssel und Primärschlüssel:
Ein Schlüssel setzt sich aus einem oder mehreren Attributen zusammen.
Der Primärschlüssel ermöglicht die eindeutige Identifizierung einer Entität, einer Entitätsmenge dadurch, dass sein Wer in einer Entitätsmenge nur ein einziges Mal vorkommt. Ein
Entity-Typ kann mehrere Fremdschlüssel besitzen, die für bestimmte Abfragen oder Sortierungen benötigt werden, aber nur einen Primärschlüssel.
Entity-Typ PROJEKT besitzt den Primärschlüssel Projektnummer
Entity-Typ PERSON besitzt einen Primärschlüssel, der sich aus den
Attributen Name und Geburtsdatum zusammensetzt
Der Primärschlüssel, welcher sich aus zwei Attributen zusammensetzt
17
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Beziehung:
Durch Beziehungen werden die Wechselwirkungen von Entitäten ausgedrückt. Unterschieden wird durch die Beziehungsmenge und den Beziehungstyp.
Beziehung:
Mitarbeiter Fuller arbeitet an Projekt CX Konkurrenzanalyse.
Beziehung ohne und mit Attribut:
¾ Mitarbeiter arbeitet an Projekt.
¾
Mitarbeiter arbeitet an Projekt in der Tätigkeit als … und zu … Prozent
¾
Produkt setzt sich zusammen aus Bauteilen, die geliefert werden von Lieferant.
Kardinalitäten:
Über die Kardinalitäten wird festgelegt, wie viele Entitäten einer Entitätsmenge mit Entitäten einer anderen Entitätsmenge in Beziehung stehen können. Zum Beispiel wie viele Mitarbeiter an einem Projekt mitarbeiten. In der Regel erfolgt die Kennzeichnung von Kardinalitäten durch folgende Angaben:
1
n,m
c
c,n
genau eine Zuordnung
eine oder mehrere Zuordnungen
eine oder keine Zuordnung
keine oder mehrere Zuordnungen
18
– einfach
– multiple
– konditionell
– multiple-konditionell
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Daraus ergeben sich folgende Möglichkeiten für die Darstellung der Beziehungen (ohne
Kardinalitäten):
1:1 – eins-zu-eins-Beziehung
1:n – eins-zu-n-Beziehung
n:m – n-zu-m-Beziehung
Jede Entität einer Entitätsmenge ist genau einer
Entität einer anderen Entitätsmenge zugeordnet.
Jede Entität einer Entitätsmenge ist eine oder sind
mehrere Entitäten einer anderen Entitätsmenge
zugeordnet.
Eine oder mehrere Entitäten einer Entitätsmenge
können eine oder mehreren Entitäten einer anderen
Entitätsmenge zugeordnet werden.
Kardinalitäten:
1 Abteilung besteht aus n Mitarbeitern.
n Mitarbeiter arbeiten an m Projekten.
Beispiel für Kardinalitäten:
Für eine Kardinalität kann auch eine Zahl festgelegt werden, z.B. 2, wenn immer genau 2
Entitäten einer Entitätsmenge in Beziehung stehen.
Besteht die Möglichkeit, dass es für einige Entitäten keine Zuordnung in Beziehungen gibt,
kann den Angaben 1, n oder m eine 0 hinzugefügt werden. Zum Beispiel 0,n, dass 0, 1,
2, …, n Entitäten in Frage kommen.
19
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Übersicht:
Entity-Typ (Klassifizierung)
Attribut (Eigenschaft)
Primärschlüssel (Identifikation)
Beziehung (Relation, Relationship, Assoziation)
Part-of-Beziehung (Ist-Teil-von-Beziehung, Aggregation
Is-a-Beziehung (Ist-ein-Beziehung, Spezialisierung
oder Generalisierung, Teilmengenbeziehung)
Datenbankentwurf:
Ist die Anforderungsanalyse abgeschlossen, können Sie das konzeptionelle Schema der
Datenbank mit dem ER-Modell entwerfen. Dabei kann nach der Top-Down- oder nach der
Button-Up-Methode vorgegangen werden. Bei der Top-Down-Methode wird das grob entworfene Modell schrittweise verfeinert. Diese Verfeinerung wird auf die Entität, die Attribute und Beziehungen verwendet. Dabei werden beispielsweise Entity-Typen und Beziehungstypen zerlegt bzw. zusammengefügt, Spezialisierungen bzw. Generalsierungen und
Aggregationen aufgebaut und Attribute sowie Schlüssel festgelegt.
Beispiel:
Kunden und Projektverwaltung
In einem Unternehmen sind Sachbearbeiter und Mitarbeiter angestellt. Die Sachbearbeiter
betreuen die Kunden und nehmen Aufträge entgegen. Der jeweilige Auftrag wird an eine
Abteilung weitergeleitet, aus dem Auftrag wird ein Projekt. An dem Projekt arbeiten mehrere Mitarbeiter. Zur Verwaltung aller Informationen und Ereignisse soll eine Datenbank erstellt werden. In der folgenden Abbildung sind alle Elemente der Datenbank und deren
Beziehungen untereinander zusammengestellt.
20
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Textbeschreibung eines Datenmodells
Um eine kompakte Beschreibung der Entity-Typen, Attribute und Schlüsselfelder zu erhalten, kann folgende textuelle Form (die Mengenbeschreibung aus der Mathematik) verwendet werden. Zu Beginn stehen der Name des Entity-Typs und in Klammern die Attribute,
wobei der oder die Primärschlüssel unterstrichen sind.
Entity-Typen:
ANGESTELLTER (PersonalNr, Name, GebDat, PLZ, Wohnort, Strasse, Gehalt, Beruf)
MITARBEITER (PersonalNr, Name, GebDat, PLZ, Wohnort, Strasse, Gehalt, Beruf)*
SACHBEARBEITER (PersonalNr, Name, GebDat, PLZ, Wohnort, Strasse, Gehalt, Beruf)*
ABTEILUNG (AbtNr, AbtName)
KUNDE (KnNr, Name, PLZ, Wohnort, Strasse)
AUFTRAG (AuftragsNr, AuftrDat, Beschreib, FertigDat)
PROJEKT (ProjNr, Name, BegDatum, EndDatum)
* Die Attribute erben diese Entity-Typen von dem Entity-Typ ANGESTELLTER.
Beziehungstypen:
is-a (ANGESTELLTER, MITARBEITER, SACHBEARBEITER)
arbeitet_ in (ABTEILUNG, SACHBEARBEITER, Position)
arbeitet_in (ABTEILUNG, MITARBEITER, Position)
betreut (KUNDE, AUFTRAG)
erteilt (KUNDE, AUFTRAG)
bearbeitet_als (AUFTRAG, PROJEKT)
arbeitet_an (MITARBEITER, PROJEKT, als, prozAnteil)
betreut (ABTEILUNG, PROJEKT)
3.3
Übungen: Datenbankentwurf
(Lösung)
1.
Welche Phasen werden beim Entwurf von Datenbanken durchlaufen?
2.
Wozu dient das Entity-Relationship-Modell?
3.
Erstellen Sie ein grafisches ER-Modell für das Beispiel: Kunden und Projektverwaltung (siehe Seite 20, Datenbankentwurf)
21
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
3.4
ER-Diagramm der Nordwind Ltd. London
22
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
4
Das relationale Datenbankmodell
Eine DB besteht im relationalen Modell aus einer Menge von Relationen, in denen die logisch zusammengehörigen Dateien gespeichert werden.
4.1
Relationen und Schlüssel
Relation:
Eine Relation ist im Sinne einer relationalen DB eine Menge von Tupeln (Datensätze). Sie
hat die Form einer Tabelle und ist damit eine Konstruktion aus Spalten und Zeilen. Sowohl Entitäten als auch Beziehungen des ER-Modells werden über Relationen modelliert.
Datentechnisch bezieht sich also eine Relation NICHT auf die Beziehung (Verknüpfung)
zwischen Tabellen. In einer Relation werden Daten gespeichert.
Attribute und Tupel:
Eine Tabelle besteht aus Spalten und Zeilen. Bei relationalen Datenbanken werden Spalten ATTRIBUTE oder auch FELDER genannt. Die Zeilen der Tabelle werden als TUPEL
oder DATENSATZ bezeichnet.
Schlüssel:
Die Menge der Attribute, die ein Tupel eindeutig identifizieren, heißen Schlüsselkandidaten. An Schlüssel wird die Minimalitätsanforderung gestellt, d.h. ein Schlüssel muss so
kurz wie möglich sein.
Primärschlüssel:
Der Primärschlüssel ist ein Schlüssel, der einen Datensatz eindeutig identifiziert, z.B. eine
Artikelnummer. Häufig handelt es sich dabei um eine fortlaufende Nummer.
Sekundärschlüssel:
Ähnlich wie beim Primärschlüssel müssen sich die Datensätze auch in den Sekundärschlüsseln unterscheiden. Sie dienen dazu, Redundanzen in den gespeicherten Daten zu
vermeiden, da in einem Schlüsselfeld ein Wert nicht mehrfach vorkommen darf.
Fremdschlüssel:
Ein Fremdschlüssel bezeichnet die Übereinstimmung eines Datenfeldes in einer Tabelle
mit dem Primärschlüssel einer anderen Tabelle. Im relationalen Datenmodell werden häufig so genannte Lookup-Tabellen, die zwei Tabellen miteinander verbinden.
Index:
Für ein oder mehrere Datenfelder angelegtes Inhaltsverzeichnis zum beschleunigten Filtern, Gruppieren oder Sortieren einer Tabelle.
23
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
4.2
Umwandlung des ER-Modells in ein relationales Modell
Das folgende ER-Modell soll in ein relationales Modell überführt werden.
Die Anzahl der Relationen, die aus dem ER-Modell erzeugt werden, hängt von den definierten Entitätsmengen und den Beziehungstypen zwischen den Entitätsmengen ab.
Entitätsmengen:
Für jede Entitätsmenge wird eine Relation erstellt, welche für jedes Attribut eine Spalte
besitzt. Die Primärschlüssel werden übernommen.
Relationenname
ABTEILUNG
MITARBEITER
Relationenschema
Beispiel
Attribut
AbteilungsNr
Datentyp
Zahl
Text
AbteilungsNr
001
002
003
Attribut
PersonalNr
Name
Vorname
Anschrift
Datentyp
Zahl
Text
Text
text
PersonalNr
0001
0002
0003
0004
0005
Attribut
ProjektNr
Beschreibung
Datentyp
Zahl
Text
Projekt2
AZ
BY
CX
Bezeichnung
Personal
Einkauf
Verkauf
Name
King
Dovalio
Fuller
Suyama
Callahan
Vorname
Robert
Nancy
Andrew
Michael
Laura
Anschrift
London
Seattle
Tacoma
London
Seattle
PROJEKTE
Beschreibung
Interview
Sales Fair
Analysis
1:1- und 1:n- Beziehungen:
Für die Umsetzung der beiden Beziehungstypen gibt es zwei Möglichkeiten:
Es wird eine neue Relation erzeugt, welche als Attribute (Spalten) die Primärschlüssel der
beiden Relationen, die in Beziehung stehen, enthält. Zusätzlich kann die Relation beschreibende Attribute in einer zusätzlichen Spalte aufnehmen. Die Darstellungsform hat
den Vorteil, dass keine Nullwerte auftreten, und den Nachteil, dass eine weitere Relation
benötigt wird.
2
Projekt = ProjektNr. / Projektkennziffer.
24
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Relationenname
besteht_aus
Relationenschema
Attribut
PersonalNr
AbteilungsNr
Position
Beispiel
Datentyp
Zahl
Zahl
Text
PersonalNr
0001
0002
0003
0004
0005
AbteilungsNr
001
002
002
003
003
Position
Leiter
Sachbearbeiter
Mitarbeiterin
Leiter
Mitarbeiter
Eine der beiden Relationen wird um ein Attribut (Spalte) erweitert. Bei 1:1-Beziehungen ist
es egal, welche der beiden Relationen erweitert wird. In der 1:n-Beziehung wird die Relation erweitert, bei der das n steht. Wird das Attribut an die Relation beschreibende Attribute,
so werden diese zusätzlich noch bei der erweiterten Relation angefügt, bei der die 1 steht,
treten Redundanzen auf, die Sie unbedingt vermeiden sollten. Besitzt die Relation beschreibende Attribute, so werden diese zusätzlich noch bei der erweiterten Relation angegeben.
Bei dieser Darstellungsform können Nullwerte auftreten; diese hat aber den Vorteil, dass
keine zusätzliche Relationen benötigt wird. Für das obige Beispiel bedeutet das, dass die
Relation MITARBEITER erweitert werden muss.
Relationenname
MITARBEITER
Relationenschema
Besipiel
Attribut
Pers
Nr
0001
0002
0003
0004
…
PersonalNr
Name
Vorname
Anschrift
AbtNr
Position
Datentyp
Zahl
Text
Text
Text
Zahl
Text
Name
King
Dovalio
Fuller
Suyama
…
Vorname
Robert
Nancy
Andrew
Michael
…
Anschrift
London
Seattle
Tacoma
London
…
Abt
Nr
001
002
002
003
…
Position
Leiter
Sachbe.
Mitarb.
Leiter
...
Bei Erweiterung der RELATION ABTEILUNG entstehen redundante Daten.
ABTEILUNG
Attribut
AbteilungsNr
Bezeichnung
PersonalNr
Position
Datentyp
Zahl
Text
Text
text
AbteilungsNr
Bezeichnung
001
002
003
004
…
Personal
Einkauf
Einkauf
Verkauf
…
Personal
Nr
0001
0002
0003
0004
…
Position
Leiter
Sachbe.
Mitarb.
Leiterin
...
Ein Nullwert kann in diesem Beispiel auftreten, wenn ein Mitarbeiter keiner Abteilung zugeordnet ist.
25
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
m:n-Beziehungen:
Bei einer m:n-Beziehung ist immer eine zusätzliche Relation erforderlich, um die betreffenden Entitäten zu verknüpfen. Diese Relation enthält die Primärschlüssel der beiden
Relationen und kann zusätzlich noch beschreibende Attribute enthalten.
Für das obige Beispiel wird eine Relation arbeiten_an benötigt. Das Relationsschema wird
aus den beiden Primärschlüsseln und den Attributen Tätigkeit und prozAnteil (prozentualer
Anteil der Arbeitszeit) aufgebaut.
Relationenname
arbeitet_an
Relationenschema
Attribut
PersonalNr
ProjektNr
Tätigkeit
prozAnteil
Beispiel
Datentyp
Zahl
Zahl
Text
text
PersonalNr
0004
0003
0005
0001
0002
ProjektNr
AZ
AZ
AZ
BY
BY
0004
0002
0003
CX
CX
CX
Tätigkeit
Leiter
Mitarbeiterin
Mitarbeiter
Leiter
Präsentationsvorbereitung
Leiter
Sachbearbeit.
Mitarbeiterin
prozAnteil
25
50
50
25
100
25
50
50
Generalisierung/Spezialisierung (is-a-Beziehung):
Für eine Überführung einer is-a-Beziehung gibt es mehrere Möglichkeiten, die von dem
jeweiligen Schema und von dem Kontext abhängig sind. In diesem Fall ist aber keine zusätzliche Relation für die Beziehung nötig.
Es wird für jede Entitätsmenge eine Relation mit den relevanten Attributen angelegt. Den
Teilmengen (Spezialisierungen) wird der Primärschlüssel der Obermenge (Generalisierung) als Fremdschlüssel hinzugefügt, um die Zuordnung zu sichern.
Relationenname
PERSONAL
Relationenschema
Attribut
PersonalNr
Name
Vorname
Anschrift
GebDatum
Beispiel
Datentyp
Zahl
Text
Text
Text
Datum
Personal
Nr
0001
0002
0003
0004
0005
…
26
Name
King
Dovalio
Fuller
Suyama
Callahan
…
Vorname
Robert
Nancy
Andrew
Michael
Laura
…
Anschrift
London
Seattle
Tacoma
London
Seattle
…
GebDatum
29.05.1960
08.12.1948
19.02.1952
02.07.1963
09.01.1958
…
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Relationenname
ARBEITER
Relationenschema
Attribut
PersonalNr
Schicht
Arbeitsplatz
ANGESTELLTER
Attribut
PersonalNr
ZimmerNr
TelefonNr
Beispiel
Datentyp
Zahl
Zahl
Text
PersonalNr
0011
0012
0015
0019
0037
Schicht
1
2
3
2
3
Arbeitsplatz
01
02
02
01
01
Datentyp
Zahl
Zahl
Text
PersonalNr
0001
0002
0005
0009
0007
Schicht
1
8
3
5
3
Arbeitsplatz
369
265
235
302
236
4.3
Normalisierungsprozess
Ziele:
¾
¾
¾
¾
Anomalien zu beheben
Redundanzen zu vermeiden
Einen übersichtlichen und möglichst einfachen Aufbau der Relationen zu erhalten
Eine einfache Datenpflege zu ermöglichen
Normalisierungsprozess:
¾ Die Normalisierung eines relationalen Schemas wird in mehreren Stufen vollzogen.
Dabei müssen die Daten in den Relationen in jeder Stufe bestimmte Bedingungen
erfüllen. Das Resultat der Anwendung dieser Regeln wird als Normalform des Relationsschemas bezeichnet.
¾ Beim Normalisierungsprozess werden die Daten einer Relation auf mehrere Relationen verteilt:
BestellNr
01
02
03
04
KdNr
1076
Name
Müller
Kundengr
1
Rabatt
0%
4904
4100
Henriot
Wong
2
3
5%
10 %
06
3901
v. Behr
1
0%
ArtNr
72
35
56
72
40
40
72
35
56
Bezeichnung
Mozarella
Starkbier
Gnocchi
Mozarella
Fleisch
Fleisch
Mozarella
Starkbier
Gnocchi
Preis
34,80 €
18,00 €
38,00 €
34,80 €
18,40 €
18,40 €
34,80 €
18,00 €
38,00 €
Menge
8
10
5
4
9
6
2
1
1
Ö bei BestellNr 06 bestellt der Kunde mit einer Bestellung unter einer Bestell-Nummer 4 Artikel.
27
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
1. Normalform:
¾ Wenn die Relation zweidimensional ist.
¾ Wenn sich in jedem Datensatz nur Daten befinden, die zu einem Objekt der realen
Welt gehören.
¾ Für jedes Attribut nur ein Wert eingetragen ist.
¾ Die ungeordnete Tabelle wird mit den fehlenden Eigenschaften ergänzt.
BestellNr
01
02
03
04
05
06
06
06
06
KdNr
1076
1076
4904
4100
4100
3901
3901
3901
3901
Name
Müller
Müller
Henriot
Wong
Wong
v. Behr
v. Behr
v. Behr
v. Behr
Kundengr
1
1
2
3
3
1
1
1
1
Rabatt
0%
0%
5%
10 %
10 %
0%
0%
0%
0%
ArtNr
72
35
56
72
40
40
72
35
56
Bezeichnung
Mozarella
Starkbier
Gnocchi
Mozarella
Fleisch
Fleisch
Mozarella
Starkbier
Gnocchi
Preis
34,80 €
18,00 €
38,00 €
34,80 €
18,40 €
18,40 €
34,80 €
18,00 €
38,00 €
Menge
8
10
5
4
9
6
2
1
1
2. Normalform:
¾ Eine Relation befindet sich in zweiter Normalform, wenn jedes Nicht-Schlüsselfeld
vom ganzen Primärschlüssel abhängig ist.
¾ Die Grundtabelle wird in mehrere Tabellen aufgeteilt, in denen wieder Primärschlüssel vergeben werden.
¾ Man erstellt eine weitere Tabelle mit einem neuem Primärschlüssel und fügt die
Primärschlüssel den anderen Tabellen als Fremdschlüssel in die zweite Normalform ein (es können auch weitere Attribute vorkommen Ö siehe Spalte Menge)
Beispiele:
KUNDE
KdNr
1076
4904
4100
3901
Name
Müller
Henriot
Wong
v. Behr
Kundengr
1
2
3
1
Rabatt
0%
5%
10 %
0%
Primärschlüssel
ARTIKEL
ArtNr
35
40
56
72
Bezeichnung
Starkbier
Fleisch
Gnocchi
Mozarella
Preis
18,00 €
18,40 €
38,00 €
34,80 €
28
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
BESTELLUNG
BestellNr
01
02
03
04
05
06
06
06
06
KdNr
1076
1076
4904
4100
4100
3901
3901
3901
3901
ArtNr
72
35
56
72
40
40
72
35
56
Menge
8
10
5
4
9
6
2
1
1
3. Normalform:
Eine Tabelle befindet sich in der 3. Normalform, wenn alle Datenfelder nur von einem
Schlüssel abhängig sind und untereinander keine Abhängigkeiten auftreten.
Sobald ein Nicht-Schlüsselfeld nur über ein anderes Nicht-Schlüsselfeld identifiziert ist,
wird von transitiver Abhängigkeit gesprochen.
Transitive Abhängigkeiten (direkt untereinander abhängige Attribute werden in einer neuen
Tabelle zusammengefasst).
Beispiel:
RABATT
Kundengr
1
2
3
Rabatt
0%
5%
10 %
Primärschlüssel
Weitere Normalformen:
Boyce-Codd-Normalform (Abhängigkeit von einzelnen Schlüsseln oder Schlüsselattributen)
4. und 5. Normalform:
In der 4. Normalform werden mehrwertige Abhängigkeiten von Attributmengen zu einem
so genannten Superschlüssel vereinigt.
In der 5. Normalform werden weitere Primärschlüssel hinzugefügt.
29
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
4.4
1.
Übungen: Relationales Datenbankmodell3
(Lösung)
Erstellen Sie für eine CD-Sammlung eine Datenbank. Gehen Sie folgendermaßen
vor:
¾
¾
Erstellen Sie ein ER-Diagramm
Wenden Sie die Normalformen an (bis zur 3. Normalform)
Um die Datenbank aufzubauen, steht Ihnen die folgende Feldliste zur Verfügung
(Sänger bedeutet der Interpret oder der Gruppenname; bei einer Gruppe entfällt die
Eingabe des Vornamens):
Sängernummer, Name des Sängers, Vorname des Sängers, Bild des Sängers,
Bemerkungen zum Sänger, CD-Nummer, Titel der CD, Laufzeit der CD, Bild des
Covers, Liednummer, Name des Liedes, Laufzeit des Lieds, Managernummer,
Name des Managers, Geschlecht des Managers und Adresse des Managers.
Als Regel gilt: Ein Sänger kann einen oder keinen Manager haben. Ein Manager
kann jedoch mehrere Sänger beraten.
2.
3.
3
Welche Aussagen treffen für eine m:n-Beziehung zu?
…
Eine m:n-Beziehung kann in der Praxis nicht erstellt werden.
…
In einer m:n-Beziehung kann die referentielle Integrität nicht eingeschaltet
werden.
…
Eine m:n-Beziehung liegt vor, wenn zwischen zwei Entitäten die
Primärschlüssel der beiden Tabellen mehrfach in der Relation vorkommen.
…
Eine m:n-Beziehung wird in Access oder Oracle benutzt, um zwei Tabellen
zu verknüpfen.
Kennzeichnen Sie die falschen Aussagen!
…
In einer Datenbank werden die Daten in Feldern strukturiert abgespeichert.
…
Die referentielle Integrität bedeutet, dass in einem Feld ein Wert eingegeben
werden muss.
…
Ein Standardwert soll die Arbeit erleichtern. Der Standardwert wird in jeden
neuen Datensatz für ein Feld eingegeben.
© ISCHNER, W., Prüfungsaufgaben zu Datenbankgrundlagen (Schulung dama.go GmbH Potsdam: Database Administrator Oracle), 2004.
30
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
5
Datenbanken
5.1
Datenbankabfragesprache „Structured Query Language“ (SQL)
Die Datenbankabfragesprache SQL wurde aus der Abfragesprache SEQUEL (Structured
English QUEry Language) der Firma IBM entwickelt. 1986 wurde SQL von ANSI (American National Standard Institute) als Standard SQL1 festgelegt. Die Weiterentwicklung der
Sprache wurde von den Standardisierungsorganisationen ISO (Internantional Standards
Organisation) und ANSI unter der Bezeichnung ISO/IEC 9075:1992 (DIN 66315) veröffentlicht. Sie wird als SQL2 bezeichnet.
Zum Sprachumfang von SQL gehören 4 Befehlsgruppen:
Erstellen von Datenbanken, Tabellen (Relationen)
und Indizes
Abfragen von Daten
Anlegen, Ändern und Löschen von Datensätzen
Anlegen von Benutzern und Vergabe von
Zugriffsrechten
DDL (Data Definition Language)
DQL (Data Query Language)
DML (Data Manipulation Language)
DCL (Data Control Language)
Installation einer Oracle-Datenbank4
5.2
Der erste Schritt beim Erstellen einer Datenbank ist das Anlegen der Datenbank selbst. In
ihr werden später die Daten in Form von mehreren Tablespaces und Tabellen gespeichert.
Es können beliebig viele Tablespaces und Tabellen in einer Oracle-Datenbank erstellt
werden.
In diesem ersten Abschnitt werden Sie Oracle mit Hilfe des Oracle Universal Installers installieren und dabei eine erste DB namens testdbx erstellen:
1)
2)
3)
4)
5)
6)
4
Starten Sie die Datei Setup.exe von CD.
Im Fenster Willkommen klicken Sie bitte auf Weiter.
Im Fenster Dateiverzeichnisse überprüfen Sie bitte die Quelle und das Ziel, verändern bitte nichts und klicken anschließend auf Weiter.
Im Fenster Verfügbare Produkte wählen Sie bitte Oracle Database 9.2.0.1.0
aus und klicken danach auf Weiter.
Im Fenster Installationsarten wählen Sie bitte Enterprise und klicken anschließend auf Weiter.
Im Fenster Datenbank-Konfiguration geben Sie bitte Universal ein klicken anschließend auf Weiter.
© HIETEL, S., Übungen (Schulung dama.go GmbH Potsdam: Database Administrator Oracle), 2004.
31
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
7)
8)
9)
10)
11)
12)
13)
14)
Im Fenster Oracle Services for MS Transaction Server klicken Sie auf Weiter.
Im Fenster Speicherort der Datenbankdatei klicken Sie bitte auf Weiter.
Im Fenster Datenbank-Identifikation geben Sie bitte als Globaler Datenbankname
testdbx (wobei X die Nummer ist, die Ihrem Computer zugeordnet wurde - eventuell beim Trainer erfragen) ein und klicken anschließend auf Weiter.
Im Fenster Speicherort der Datenbankdatei klicken Sie bitte auf Weiter.
Im Fenster Datenbank-Zeichensatz klicken Sie bitte auf Weiter.
Im Fenster Überblick klicken Sie bitte auf Installieren.
Geben Sie für das Konto sys das Kennwort sys ein und für das Konto system
bitte system.
Zum Abschluss klicken Sie bitte auf Weiter und anschließend auf Beenden.
Anmelden an Oracle-Datenbank mittels SQL*Plus Worksheet2
5.3
Im letzten Teil werden Sie lernen, wie man sich mit Hilfe des Worksheets mit dem OracleServer verbindet und arbeitet.
1)
2)
3)
4)
Starten Sie das SQLPlus Worksheet.
(Start Ö Programme Ö Oracle - OraHome92 Ö Application Development
Ö SQLPlus Worksheet).
Geben Sie als Benutzernamen den Namen sys und als Kennwort das Kennwort
sys ein. Geben Sie unter Dienst den Namen testdbx ein und unter Anmelden bitte SYSDBA auswählen. Klicken Sie anschließend auf OK.
Probieren Sie eine kleine Abfrage auszuführen. Geben Sie hierfür select * from
scott.emp; ein und bestätigen Sie die Anweisung mit F5.
Schließen Sie das SQLPlus Worksheet mit exit.
32
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
5.4
Anmelden an Oracle-Datenbank mittels Eingabeaufforderung
In diesem Teil werden Sie lernen, wie man sich mit Hilfe der MS-DOS Eingabeaufforderung mit dem Oracle-Server verbindet und dort arbeitet.
1)
2)
3)
4)
5)
6)
5.5
Starten Sie die MS-DOS-Eingabeaufforderung
(Start Ö Ausführen Ö CMD Ö OK)
Geben Sie sqlplus /nolog ein und bestätigen Sie mit Enter.
Im Feld Benutzernamen eingeben geben Sie bitte
connect sys/sys@testdb as sysdba ein und bestätigen Sie mit Enter.
Probieren Sie eine kleine Abfrage auszuführen. Geben Sie hierfür select * from
scott.emp; ein und bestätigen Sie die Anweisung mit Enter.
Schließen Sie sqlplus mit exit.
Nordwind-Datenbank
Im Folgenden werden Sie die Tabellen der Übungsdatenbank „Nordwind“ via Skript unter
Oracle installieren. Melden Sie sich mit Hilfe der Eingabeaufforderung an der Oracle Datenbank an. Geben Sie bitte folgende Syntax an dem SQL-Prompt ein, um die NordwindTabellen via Skript5 zu installieren:
SQL> start C:\nordwind_skript\nordwind.txt
5
Kommentare werden in Text-Skripten (.txt) mit „#“ und in SQL-Skripten (.sql) mit „--“ eingeleitet. Auch
kann unter der DOS-Oberfläche bei SQL*Plus ein Editor mit „edit“ aufgerufen werden.
33
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
5.6
Starten und Herunterfahren von Oracle6
Der Startvorgang von Oracle wird in drei Stati unterteilt:
Status 1 – NOMOUNT
SQL> STARTUP NOMOUNT;
Der erste Status ist der Status NOMOUNT. In diesem wird die entsprechende Startdatei (INI-Datei Ö „pfile“) gelesen, die entsprechenden physischen Strukturen (Datendateien, Redo-Log-Dateien und Control-Dateien)
identifiziert, die Speicherstrukturen (SGA Ö System Global Area) initialisiert
und die Hintergrundprozesse (DBWn Ö Database Writer, LGWR Ö Logwriter, CKPT Ö Checkpoint, SMON Ö SystemMONitor, PMON Ö ProzessMONitor und ARCn Ö ARChiver) gestartet. Hiermit wird eine Instanz gestartet. Sie können mit dem Parameter pfile= die entsprechend zu öffnende INI-Datei angeben.
Status 2 – MOUNT (DB angehängt)
SQL> STARTUP MOUNT;
Hier werden die Control-Dateien geöffnet und die Speicherorte der Datendateien sowie der Online-Redo-Log-Dateien gelesen.
Status 3 – OPEN (DB geöffnet)
SQL> STARTUP OPEN;
Hier werden die Datendateien sowie die Online-Redo-Log-Dateien geöffnet
und Sperren etc. gesetzt.
Eine Oracle-Datenbank wird hochgefahren und geöffnet.
6
© HIETEL, S., Skript zu Oracle Performance Tuning (Schulung dama.go GmbH Potsdam: Database Administrator Oracle), 2004.
34
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Ähnlich wie die Stati beim Hochfahren einer Datenbank gibt es auch vier Stati beim Herunterfahren der Datenbank:
Status 1 – Shutdown normal
SQL> SHUTDOWN NORMAL;
Wenn Sie die Option „Shutdown normal“ benutzen, so werden keine neuen
Benutzersitzungen zugelassen. Oracle wartet, bis sich alle Benutzer abgemeldet haben. Benutzer werden zum Abmelden jedoch nicht gedrängt
oder von Oracle informiert. Sind alle Benutzer abgemeldet, so wird die Datenbank geschlossen, die Instanz abgehängt (Control-Datei dismountet)
und die Instanz heruntergefahren (reservierter Speicher für die SGA freigegeben und alle Hintergrundprozesse beendet).
Status 2 – Shutdown immediate
SQL> SHUTDOWN IMMEDIATE;
Wenn Sie die Option „Shutdown immediate“ benutzen, so werden wie auch
bei der ersten Statusoption keine neue Benutzersitzungen zugelassen.
Oracle beendet alle Benutzersitzungen. Alle nicht abgeschlossenen Transaktionen werden beendet. Sind alle Benutzer abgemeldet, so wird die Datenbank geschlossen, die Instanz abgehängt (dismountet) und die Instanz
heruntergefahren.
Status 3 – Shutdown transactional
SQL> SHUTDOWN TRANSACTIONAL;
Wenn Sie die Option „Shutdown transactional“ benutzen, so werden wie
auch bei der ersten Statusoption keine neuen Besitzersitzungen zugelassen. Es werden keine neuen Transaktionen zugelassen. Oracle wartet bis
die aktuellen Transaktionen durch ein „commit“ (schreiben der Daten in die
Datenbank) beendet sind. Danach werden alle Benutzer abgemeldet, die
Datenbank geschlossen, die Instanz abgemeldet und heruntergefahren.
Status 4 – Shutdown abort
SQL> SHUTDOWN ABORT;
Die Datenbank wird sofort geschlossen. Es wird weder auf den Abschluss laufender SQL-Anweisungen gewartet, noch eine Speicherung für die abgeschlossenen Aktionen durchgeführt.
35
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
6
Tablespaces erstellen und verwalten
6.1
Tablespaces erstellen und löschen
Tablespaces fassen Datendateien zusammen. Sie dienen als „Speichereinheit“ für Objekte. Benutzern werden generell in einem Standard-Tablespace zugeordnet, aber nie im
System-Tablespace angelegt. Wenn nun diese Benutzer ein Objekt erstellen, so wird dieser Standard-Tablespace hierfür genutzt. Die wichtigsten Anweisungen sollen kurz an
dieser Stelle vorgestellt und erläutert werden:
Beispiel:
CREATE TABLESPACE testdbs
DATAFILE ’c:\oracle\oradata\testdb\testdbs01.dbf’
SIZE 10M ONLINE;
Es wird ein Tablespace namens „testdbs“ erstellt, welcher aus der Datendatei (Dateiname
ist gleich der Pfadname der Datei) „c:\oracle\oradata\testdb\testdbs01.dbf“ besteht. Der
Tablespace hat eine Initialgröße von 10 MByte und wurde auf Online gesetzt.
Beispiel:
DROP TABLESPACE testdbs;
Der Tablespace testdbs wird gelöscht. Die entsprechenden Dateien im Tablespace werden nicht mitgelöscht. Diese können anschließend manuell gelöscht werden.
6.2
Tablespaces Offline und Online setzen
Manchmal müssen Tablespaces Offline gesetzt werden. Dies kann notwendig werden,
wenn mehrere Datendateien eines Tablespaces beschädigt sind und das Öffnen der Datenbank verhindern. In diesem Fall können Sie die Datenbank „mounten“, den entsprechenden Tablespace Offline setzen, und anschließend die DB öffnen.
Beispiel:
1. ALTER TABLESPACE testdbs01 OFFLINE;
Der Tablespace „testdbs01“ wird OFFLINE gesetzt.
2. ALTER TABLESPACE testdbs01 ONLINE;
Der Tablespace „testdbs01“ wird ONLINE gesetzt.
36
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
7
Tabellen erstellen und verwalten
7.1
Tabellen erstellen
Tabellen (Relationen) sind die einzigen Objekte einer Datenbank, in denen Daten gespeichert werden.
Eine Tabelle besteht aus einzelnen Feldern. Durch die Namen und Datentypen der Felder
wird die Struktur bzw. das Schema der Tabelle festgelegt. Zusammengehörige Daten werden in einer Tabelle eingetragen. Diese bilden einen Datensatz bzw. ein Tupel.
Einfache Tabelle erstellen:
Eine Tabelle mit den dazugehörigen Datenfeldern wird mit der Anweisung CREATE
TABLE erstellt. Die Anweisung besitzt sehr viele Optionen, die z.B. das Definieren von
Standardwerten erlauben.
Einfachste Form:
CREATE TABLE Tabellenname (
datenfeld 1 datentyp 1,
datenfeld 2 datentyp 2
…
datenfeld x datentyp x);
Beispiel:
CREATE TABLE test1 (
vorname VARCHAR (100),
name VARCHAR (100));
Erstellen einer neuen Tabelle mit SQL*Plus / ORACLE.
Die Anweisung im Beispiel erstellt eine Tabelle der Anlieferfirmen „shippers“ mit den Spalten (Feldern) „shipperid“, „companyname“ und „phone“. Hinter dem Feld steht der Datentyp, den das Feld annehmen soll.
37
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Folgende optionale Parameter sind bei der Definition von Datenfeldern möglich:
Mit diesem Parameter wird eine Eingabe eines Wertes für das
entsprechende Datenfeld erzwungen. Die Angabe NOT NULL
ist für die Schlüsselfelder unbedingt anzugeben.
Mit diesem Parameter wird festgelegt, dass das Datenfeld
standardmäßig keinen Wert (auch nicht 0 oder eine leere
Zeichenkette enthält.
Der Parameter DEFAULT definiert einen Standardwert. Enthält
das Datenfeld bei der Eingabe keinen Wert, so wird automatisch
dieser Standardwert verwendet.
NOT NULL
NULL
DEFAULT standardwert
Datentypen:
Beim Erstellen einer Tabelle muss für jedes Datenfeld ein Datentyp angegeben werden.
Möglich sind hierbei:
Numerische Datentypen:
Datentypen
SMALLINT
INTEGER (INT)
FLOAT
Speicherbedarf
2 Byte
4 Byte
4 Byte
DATE
8 Byte
Wertebereich / Beschreibung
-32.768 + 32.767
- 2.147.483.648 + 2.147.483.648
Fließkommazahlen zwischen -1,79E + 308 und
1,79E + 308 (7 signifikante Stellen).
Interner Oracle-Datentyp zum eines Datums mit
Oder ohne Zeitanteil.
Datumswerte:
Eingabeformat
DD.MM.YYYY
Day, DD.MM.YY
Day, DD Mounth YYYY
Beispiel
18.09.2004
Samstag, 18.09.04
Samstag, 18 September 2004
Datentypen für Zeichen und Texte:
Datytyp
CHAR (Länge)
VARCHAR (Länge)
VARCHAR2 (Länge)
BLOB
Erklärung
Zum Speichern beliebiger Textinformationen. Die maximale Länge wird
dabei als Parameter übergeben.
Wie CHAR, nur wird der tatsächlich verbrauchte Speicherplatz belegt,
falls der eingegebene Text kleiner als die Maximallänge ist.
Intern verwendete Typenbezeichnung zum Speichern variabler Zeichenfolgen,
d.h., beim VARCHAR-Typ handelt es sich im Prinzip um ein kompatibles
Synonym für VARCHAR2. Wird empfohlen zur Standardbenutzung!
Zum Speichern großer, auch binärer Datenmengen, z.B. sehr große
Textdateien, Grafiken, Bilder oder Videos. Maximale Größe in Oracle 4 GByte.
38
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Integritätsregeln in Tabellen verwenden:
Beim erstellen einer Tabelle können bereits Regeln für die zu speichernden Daten definiert
werden. Eine Gültigkeitsprüfung wird nach der Definition der Datenfelder mit dem Schlüsselwort CONSTRAINT (engl. Zwang, Nebenbedingung) eingeleitet. Damit wird erreicht,
dass bereits bei der Eingabe nur gültige Werte in der Tabelle gespeichert werden können.
Beispiel:
CREATE TABLE test2 (
test2id INT NOT NULL,
name VARCHAR (30),
vorname VARCHAR (20),
CONSTRAINT test2_ck CHECK (test2id > 2));
Es wird eine Tabelle mit den Feldern „test2id“, „name“ und „vorname“ erstellt. Beim Feld
„test2id“ werden nur Werte größer als 2 akzeptiert.
Beispiele für Gültigkeitsbedingungen:
Bedingung
categoryid <= 100
categoryname NOT LIKE ’%A&’
description IN (’Apfel’, ‚Orange’)
Erklärung
Wahr, wenn die categoryid kleiner oder gleich 100.
Wahr, wenn der categoryname den Buchstaben A nicht enthällt.
Wahr, wenn description den Wert Apfel oder Orange trägt.
Eine weitere Möglichkeit ist das Erstellen von berechneten Spalten, deren Inhalt nicht in
der Datenbank gespeichert wird. Durch berechnete Spalten kann Platz eingespart und
Inkonsistenzen vermieden werden.
Beispiel:
CREATE TABLE test3 (
test3id INT NOT NULL,
stueck INT DEFAULT 1,
preis FLOAT NOT NULL,
wert COMPUTED BY (stueck*preis));
Es wird eine Tabelle mit den Feldern „test3id“, „stueck“ (Defaultwert=1), „preis“ (muss einen Wert enthalten) und dem Feld „wert“ in dem das Ergebis von „stueck“ * „preis“ berechnet wird.
Berechnete Datenfelder werden nicht von allen SQL-Dialekten
unterstützt !!!
39
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
7.2
Vorhandene Tabellen anzeigen, ändern und löschen
Vorhandene Tabellen anzeigen:
Über die Anweisung DESCRIBE (DESC) Tabellename kann man den Inhalt der in der Datenbank vorhandene Tabellen auflisten lassen:
Beispiel:
DESCRIBE [schema.]object[@datenbank];
DESC sys.v$tablespace;
Vorhandene Tabellen ändern:
Die Struktur einer Tabelle kann jederzeit über die Anweisung ALTER TABLE geändert
werden. Dabei ist es möglich:
¾ Datenfelder hinzuzufügen oder löschen
¾ Datenfelddefinitionen verändern
¾ Gültigkeitsprüfungen hinzufügen oder löschen
¾ Schlüssel und Indizes hinzufügen oder löschen
ALTER TABLE tabellenname
[ADD datenfelddefinition]
[ADD CONSTRAINT constraintname CHECK (gültigkeits-bedingung)]
[DROP objektname];
Beispiele:
1. ALTER TABLE test3
ADD name VARCHAR (20);
Das Datenfeld „name“ wird der Tabelle „test4“ hinzugefügt.
2. ALTER TABLE test3
ADD PRIMARY KEY (test3id);
Das vorhandene Datenfeld „test3id“ wird zum Primärschlüssel
gemacht.
3. ALTER TABLE test3
MODIFY name VARCHAR (20) NOT NULL;
Für das Datenfeld „name“ soll eine Eingabe erforderlich sein.
40
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
4. ALTER TABLE test3
ADD CONSTRAINT test3_ck CHECK (test3id > 1);
Für das vorhandene Datenfeld „test3id“ wird die Bedingung
> 1 festgelegt.
5. ALTER TABLE test3 DROP name;
[ALTER TABLE test3 DROP COLUMN name;]
Das Datenfeld „name“ wird aus der Tabelle gelöscht.
Vorhandene Tabelle löschen:
Mit der Anweisung DROP TABLE lassen sich Tabellen löschen. Dabei werden die Definitionen der Tabellenstruktur und alle in der Tabelle gespeicherten Datensätze gelöscht.
DROP TABLE tabellenname;
7.3
Übungen: Tabellen
(Lösung)
1.
Erstellen Sie eine neue Tabelle „t_artikel“ mit den Datenfeldern „artid“, „artname“ und
„artpreis“. Verwenden Sie geeignete Datentypen.
2.
Löschen Sie das Datenfeld „artpreis“.
3.
Erstellen Sie eine Tabelle „t_personen“ mit den Datenfeldern „persid“, „vorname“ und
„nachname“. Verwenden Sie geeignete Datentypen. Für alle Datenfelder soll dabei
eine Eingabe erforderlich sein.
4.
Ändern Sie die Tabelle und fügen Sie ein zusätzliches Datenfeld „lebenslauf“ hinzu.
In dem Feld soll eine größere Datenmenge – z.B. ein Word-Dokument – gespeichert
werden können.
5.
Fügen Sie ein neues Datenfeld „angestellt_seit“ in die Tabelle ein. Es soll ein Datumswert gespeichert werden können.
6.
Löschen Sie die Tabellen „t_artikel“ und „t_personen“.
41
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
8
Datenpflege
8.1
Daten einfügen, aktualisieren und löschen
Um Datensätze in eine Tabelle einzufügen, verwendet man die Anweisung INSERT INTO.
Dabei ist es möglich, einen vollständigen Datensatz oder nur Werte für ausgewählte Datenfelder einzufügen.
INSERT INTO tabellenname (feld1, …, feldx) VALUES (wert1, …, wertx);
Beispiel:
INSERT INTO wappenrolle (name,vorname, wappen, wohnort)
VALUES (’Freiherr v. Furtenbach’, ‘Franz’,
’Goldener Wellenbalken auf blauen Felde’,
’Hannover’);
Mehrere Datensätze einfügen:
Die zweite Form der INSERT INTO-Anweisung ermöglicht das Einfügen mehrerer Datensätze. Die einzufügenden Daten werden dabei mit Hilfe einer Abfrage aus einer existierenden Tabelle gewonnen.
INSERT INTO tabellenname (feld1, …, feldx) SELECT [datenfelder]
FROM tabellenname [WHERE bedingung];
Beispiel:
INSERT INTO wappenrolle (name,vorname, wappen, wohnort)
SELECT name, vorname, wappen
FROM adelsarchiv WHERE ort LIKE ’Hannover’;
In die Tabelle „wappenrolle“7 werden alle Datensätze der Tabelle „adelsarchiv“ eingefügt,
bei denen der Wohnort Hannover ist.
Ö SELECT wird in Kapitel 7 genauer erklärt!
Daten aktualisieren:
Beim Ausführen der INSERT INTO-Anweisung wird stets ein neuer Datensatz eingefügt.
Man kann aber auch existierende Datensätze bearbeiten und verändern. Mit der UPDATEAnweisung lassen sich ein oder mehrere Datensätze aktualisieren. Die Auswahl der Datensätze erfolgt über eine WHERE-Bedingung. Wird keine Bedingung angegeben, so werden alle Datensätze aktualisiert.
7
Eine „Wappenrolle“ ist ein Lexikon mit Wappendarstellungen und dazugehörigen Familieninformationen.
42
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
UPDATE tabellenname SET feld1 = wert1, …, feldx = wertx [WHERE bedingung];
Der Wert kann dabei eine Zahl sein, ein Text, ein berechneter Ausdruck oder eine
Unterabfrage sein.
Beispiele:
1. UPDATE wappenrolle SET wohnort = ’Leutkirch’
WHERE name = ’Furtenbach’
AND vorname = ’Franz’;
Der Ort von Franz v. Furtenbach wird auf Leutkirch geändert.
2. UPDATE wappenrolle SET wohnort = ’Leutkirch’;
Alle Datensätze der Tabelle bekommen als Ort Leutkirch
eingetragen.
Beispiel für die Wertzuweisung:
Wertzuweisung in UPDATE-Funktion
SET name = ’Georg’
SET anzahl = 100
SET anzahl = anzahl*2
SET vorfahren = (SELECT ahnenid FROM ahnen
WHERE ahnenid = 20)
Erläuterung
Zuweisen einer Textinformation
Speichern der Zahl 100 im Feld anzahl
Der aktuelle Wer des Feldes anzahl wird mit 2
Multipliziert und im Feld anzahl gespeichert.
Mittels einer Unterabfrage wird aus der Tabelle
ahnen ein Datensatz abgefragt und der ermittelte
Wert im Datenfeld vorfahren gespeichert.
Daten löschen:
Mit Hilfe der DELETE-Anweisung können ein oder mehrere Datensätze einer Tabelle gelöscht werden. Die Auswahl der Datensätze kann wie bei der UPDATE-Anweisung mit Hilfe der WHERE-Bedingung eingegrenzt werden.
DELETE FROM tabellenname [WHERE bedingung];
Beispiel:
1. DELETE FROM wappenrolle WHERE vorname = ‘Georg’;
Alle Datensätze der Tabelle Wappenrolle, bei denen der Wert im
Feld „vorname“ gleich Georg ist, werden gelöscht.
2. DELETE FROM wappenrolle;
Wird keine Bedingung angegeben, so werden alle Datensätze
der Tabelle Wappenrolle gelöscht.
43
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
8.2
Übungen: Datenpflege
(Lösung)
1.
Erstellen Sie eine neue Tabelle „wappenrolle“ mit den Datenfeldern „name“, „vorname“, „titel“, „wappen“ und „geboren“. Verwenden Sie geeignete Datentypen. Für alle
Datenfelder soll dabei eine Eingabe erforderlich sein.
2.
Fügen Sie folgende Informationen in die Tabelle „wappenrolle“ ein.
Name
v. Furtenbach
de Montifichet
Newton
v. Metternich
Romanow
Hannover
Bonaparte
Habsburg
Vorname
Franz
Richard
Isaac
Klemens
Michael
Georg II.
Napoleon
Friedrich III.
Titel
Freiherr
Lord
Sir
Prinz
Zar
König
Kaiser
Kaiser
Wappen
Wellenbalken
drei goldene Sparren
zwei gekreuzte Knochen
drei Muscheln
Doppelkopfadler
Silbernes Pferd
Adler
Doppelkopfadler
geboren
1880
1200
1642
1173
1597
1587
1769
1415
3.
Führen Sie eine einfache Datenabfrage durch, um das erfolgreiche Einfügen der
neuen Datensätze zu überprüfen.
4.
Ändern Sie den Titel „Zar“ in „Kaiser“ und das Geburtsdatum „1597“ in „1587“.
5.
Löschen Sie den Datensatz des Freiherrn Franz v. Furtenbach.
6.
Was bewirkt folgende Anweisung:
INSERT INTO wappenrolle SELECT * FROM wappenrolle;
7.
Wieviele Datensätze befinden sich jetzt in der Tabelle Wappenrolle? Löschen Sie
anschließend die Tabelle.
44
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
9
Einfache Datenabfrage
9.1
SELECT – Anweisung verwenden
Mit Hilfe der SELECT-Anweisung können Sie alle oder ausgewählte Datenfelder von Tabellen abfragen. Die SELECT-Anweisung muss die gewünschten Daten dabei nicht nur
aus einer einzigen Tabelle ermitteln. Es sind auch verknüpfte Anfragen über zwei oder
mehr Tabellen möglich.
Die mit einer SELECT-Anweisung abgefragten Daten können Sie gezielt über so genannte
WHERE-Bedingungen eingrenzen. Außerdem ist das Sortieren und Gruppieren des Abfrageergebnisses möglich.
Beispiel Datenabfrage 1:
Mit dieser Anweisung werden alle Datenfelder und alle Datensätze aus der Tabelle gelesen und angezeigt.
SELECT * FROM Tabellenname;
Die einfachste SELECT-Anweisung lautet SELECT * FROM Tabellenname. Damit rufen
Sie schnell alle Datensätze einer gewünschten Tabelle ab.
Beispiel Datenabfrage 2:
Mit dieser Anweisung werden folgende Datenfelder companyname und phone aus der Tabelle gelesen und angezeigt.
SELECT companyname, phone FROM shippers;
45
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Syntax einer einfachen Datenabfrage
Doppelte Datensätze vermeiden:
Um doppelte Datensätze zu vermeiden, können Sie nach dem Schlüsselwort SELECT die
Angabe DISTINCT hinzufügen. Dabei ist es ausreichend, wenn sich die Daten in einem
Datenfeld unterscheiden, um von der Datenbank als unterschiedlich erkannt zu werden.
1.
2.
SELECT * FROM Tabellenname;
SELECT [DISTINCT] * FROM Tabellenname;
Anzahl der Datensätze beschränken:
Die SELECT-Abfrage liefert standardmäßig alle Datensätze einer Tabelle, bzw. alle Datensätze auf die die Bedingung zutrifft. Mit dem Schlüsselwort LIKE kann die Datensätze
ausgeben, welche eine bestimmte Bedingung erfüllen.
46
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
SELECT DISTINCT productname FROM products
WHERE productname LIKE ’Ch%’ ORDER BY productname;
Alle Produkte werden ausgegeben, bei denen der Produktname mit „Ch“ beginnt.
Berechnungen ausführen:
In einer SELECT-Abfrage können Sie verschiedene Berechnungen durchführen. Die Ergebnisse werden wie der Inhalt eines Datenfeldes behandelt. Für Berechnungen können
Sie alle numerischen Datenfelder der Tabelle sowie konstante Werte verwenden.
Es werden alle Datensätze der Tabelle Produkte mit Netto- und Bruttopreisen angezeigt.
SELECT unitprice AS Netto, unitprice*1.16 AS Brutto FROM products;
In der Tabelle werden alle Datensätze mit Netto- und Bruttopreisen angezeigt. Um
den Bruttowert zu erhalten, wird zu dem in der Tabelle gespeicherte Preis 16 %
Mehrwertsteuer hinzugefügt.
Folgende Operatoren können Sie bei Berechnung in SQL verwenden „-“ „+“ „*“ „/“
47
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
9.2
Bedingungen definieren
Mit Hilfe der WHERE-Bedingung können Sie die mit einer SELECT-Abfrage zurückgelieferten Daten einschränken bzw. filtern. Dies ist vor allem bei sehr großen Datenmengen
wichtig und wird von einer SQL-Datenbank auch bei mehreren Millionen Datensätzen sehr
schnell ausgeführt, wenn diese dafür optimiert wurde (z.B. durch Verwendung von Indizes).
Möglichkeiten für WHERE-Bedingungen sind in folgenden Tabellen zu finden.
Bedingung
Vergleichsoperatoren
Beispiel
unitprice < 100
name = King
Bereichsprüfung
unitprice BETWEEN 30
AND 50
Elementprüfung
city IN (’London’)
Mustervergleich
productname LIKE ’S%’
Nullwertprüfung
unitprice IS NULL
Logische Operatoren
supplierid=1 AND categoryid=1
Erklärung
Vergleicht den Wert eines
Datenfeldes mit einem
vorgegebenen Wert.
Prüft, ob der Wert eines Feldes
innerhalb eines bestimmten
Bereichs liegt.
Prüft, ob der Wert eines Feldes
sich in der angegebenen Liste
befindet.
Überprüft einen Feldinhalt auf
Übereinstimmung mit einem
angegebenen Muster.
Prüft einen Feldinhalt auf den
Wert NULL (Datenfeld enthält
keinen Wert).
Verknüpfen mehrerer
Bedingungen.
Vergleichsoperatoren:
Operator
<
>
<>
=
>=
<=
Erklärung
kleiner als
größer als
ungleich
ist gleich
größer oder gleich
kleiner oder gleich
Beispiele:
1.
2.
SELECT * FROM products WHERE unitprice < 50;
SELECT * FROM employees WHERE city = ‘Berlin’;
1. Die Abfrage liefert alle Datensätze, bei denen der Preis kleiner als 50 ist.
2. Hier wird die Mitarbeitertabelle der Angestellten nach allen Datensätzen gefiltert,
bei denen der Ort Berlin ist.
48
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Bereichsprüfung:
Die Operatoren BETWEEN und IN erleichtern das Definieren von Wertebereichen oder
Wertelisten, indem sie mehrere verbundene Vergleichsausdrücke ersetzen. Mit dem Operator BETWEEN prüfen Sie, ob der Wer eines Datenfeldes in einem bestimmten Wertebereich liegt. Der Operator ersetzt dabei die Bedingung x >= Wert AND x <= Wert.
Beispiel:
1.
2.
3.
SELECT * FROM products WHERE unitprice >=30 AND unitprice <=50;
SELECT * FROM products WHERE unitprice BETWEEN 30 AND 50;
SELECT * FROM employees WHERE lastname BETWEEN ‘Ca’ AND ‘Da’;
1. Bei dieser Bedingung wird mit zwei Vergleichen geprüft, ob der Preis größer oder
gleich 30 und gleichzeitig kleiner oder gleich 50 ist.
2. Der BETWEEN-Operator vereinfacht diesen Ausdruck.
3. Auch ein alphabetischer Bereich kann auf diese Weise angegeben werden. Es
werden hier die Datensätze ausgewählt, bei denen die Namen zwischen „Ca“ und
„Db“ liegen. Das sind alle Namen, die mit „Ca“ beginnen bis zu den Namen, die mit
„Da“ beginnen. Auch der Wert „Db“ wird als richtig erkannt. Namen, welche mit „Bo“
beginnen, werden nicht mit ausgewählt, da sie außerhalb der Bereichsgrenze liegen.
Elementprüfung:
Sie können auch prüfen, ob der Wert eines Datenfeldes in einer Liste von Werten enthalten ist. Dazu definieren Sie eine Werteliste, die alle möglichen Werte enthält. Mit Hilfe des
In-Operators testen Sie in einer Bedingung, ob ein Wert in der Liste enthalten ist.
1.
2.
SELECT * FROM customers WHERE country = ‚’Brazil’ OR country = ’France’;
SELECT * FROM customers WHERE country IN (‘Brazil’,’France’);
1. Hier werden zwei verbundene Bereiche durch eine OR-Verknüpfungen miteinander
geprüft, ob der Wert des Datenfeldes gleich „Brazil“ oder „France“ ist.
2. Übersichtlicher wird die gleiche Bedingung mit dem IN-Operator formuliert. Die Liste
enthält die zwei gewünschten Orte.
49
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Mustervergleich:
Speziell für Textwerte existiert der LIKE-Operator, der einen flexiblen Vergleich mit einem
vorgegebenen Muster ermöglicht. Dies ist besonders dann nützlich, wenn Ihnen als Suchkriterium nur ein Teil einer Information zur Verfügung steht.
1.
2.
SELECT DISTINCT * FROM categories WHERE categoryname LIKE ’Co%’;
SELECT DISTINCT * FROM categories WHERE categoryname LIKE ’C%on_’;
1. Die Abfrage liefert alle Produktkategorien, deren Name mit „Co” beginnt.
2. Die Abfrage liefert alle Produktkategorien, deren Name mit „C“ beginnt und auf „on“
und ein beliebiges letztes Zeichen endet.
Logische Operatoren:
Mit Hilfe von logischen Operatoren können Sie mehrere Bedingungen miteinander verbinden. Auf diese Weise erhalten Sie sehr komplexe Suchkriterien.
SQL ermöglicht den Einsatz der folgenden logischen Operatoren.
AND
OR
NOT
UND-Verknüpfung: Beide Bedingungen müssen
erfüllt sein
ODER-Verknüpfung: Mindestens eine der
Bedingungen muss erfüllt sein.
NICHT-Operator: Die nachfolgende Bedingung
wird negiert (aus wahr wird falsch und aus falsch
wird wahr).
50
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Beispiel:
1.
2.
3.
SELECT * FROM employees WHERE lastname LIKE ‘D%’ AND city <> ‘Seattle;
SELECT * FROM employees WHERE lastname LIKE ‘D%’ AND
(city = ‘Hannover’ OR city = ‘London’);
SELECT * FROM employees WHERE NOT (lastname LIKE ‘D%’);
1. Die Abfrage liefert alle Mitarbeiter, deren Name „D“ beginnt und die nicht in Seattle
wohnen.
2. Mit dieser Abfrage werden alle Mitarbeiter ermittelt, deren Name mit „D“ beginnt
und die in Hannover oder London wohnen.
3. Hier werden alle Mitarbeiter gesucht, deren Name nicht mit „D“ beginnt.
9.3
Gruppieren bzw. Sortieren der Abfrageergebnisse
Gruppieren:
Um die Datensätze einer Tabelle nach einem oder mehreren Kriterien zusammenzufassen
(Gruppen zu bilden), verwendet man die GROUP BY-Anweisung. Auf diese Weise sucht
man alle Datensätze, die in einem bestimmten Datenfeld den gleichen Wert besitzen und
fassen diesen zu einer Gruppe zusammen.
Beispiel:
Es soll ermittelt werden, wie viele Mitarbeiter aus einem Ort kommen. Dazu werden alle
Datensätze nach dem jeweiligen Ort gruppiert (zusammengefasst) und danach wird die
Summe der verbliebenen Datensätze gebildet.
SELECT city, COUNT(lastname) FROM employees GROUP BY city;
Die Datensätze der Tabelle werden mit Hilfe der Anweisung GROUP BY nach dem
Ort gruppiert. Für jede Gruppe wird mit der Aggregatfunktion COUNT die Anzahl der
51
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Mitarbeiter ermittelt, die in diesem Ort wohnen. Der Name des Feldes, auf welches
die Aggregatfunktion angewendet werden soll, folgt der Funktionsname in runden
Klammern.
Sortieren:
Die SELECT-Anweisung liefert die Datensätze in keiner definierten Reihenfolge. Meist
verwendet die Datenbank dabei die Reihenfolge, in der die Daten in die Tabelle eingetragen wurden. Um das Abfrageergebnis nach einem oder mehreren Datenfeldern zu sortieren, kann man die ORDER BY-Klausel verwenden.
Beispiel:
1.
2.
3.
SELECT firstname, lastname, postalcode, city FROM employees ORDER BY
lastname, firstname;
SELECT * FROM products ORDER BY unitprice DESC;
SELECT COUNT(lastname) FROM employees GROUP BY city ORDER BY city;
1. In dieser Anweisung wird zuerst nach dem Familiennamen und dann nach dem
Vornamen der Mitarbeiter sortiert.
2. Mit dem Schlüsselwort DESC / ASC wird eine absteigende / aufsteigende Sortierung erreicht. Alle Datensätze der Tabelle werden ausgewählt und nach dem Preis
in absteigender Reihenfolge sortiert.
3. Die Sortierung lässt sich auch bei gruppierten Daten anwenden. Hier wird die Ausgabeliste nach dem Ort sortiert.
Spalten umbenennen:
Es wird eine Abfrage ausgewählter Datensätze und Datenfelder mit neuen aussagekräftigen Feldnamen erzeugt.
SELECT companyname AS shippers FROM shippers;
52
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
9.4
Übungen: Datenabfragen
(Lösung)
1.
Schreiben Sie eine Abfrage, die alle Datensätze der Produkttabelle mit der
Lieferantennummer = 2 und Kategorienummer = 1 liefert.
2.
Schreiben Sie eine Abfrage, die alle Produktnamen mit deren Kategorie-ID auflistet.
Dabei soll jeweils folgender Satz ausgegeben werden. Das Produkt X gehört zur Kategorie Y. Benutzen Sie als Hilfe die Funktion „Pipe – Pipe “ : ||
3.
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, die mit „C“, „D“ oder „E“
anfangen.
4.
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, bei denen der 5. Buchstabe kein „c“ ist.
5.
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, bei denen der 5. Buchstabe ein „c“ oder „d“ ist. Diese sollen aufsteigend nach dem Produktnamen sortiert
sein.
6.
Schreiben Sie eine Abfrage, die Ihnen die Spalte Ort der Kundentabelle ausgibt. Es
soll keine Stadt mehrmals auftauchen.
53
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
10
Constraints und Indizes
10.1
Constraints
Primärschlüssel erstellen und löschen:
Primärschlüssel werden in der Regel beim Erstellen einer Tabelle definiert. Dazu können
Sie die Anweisung PRIMARY KEY verwenden, die an das Ende der Tabellendefinition
gesetzt wird. Ein PRIMARY KEY ist eine besondere Art eines CONSTRAINT. Jede Tabelle besitzt eine Spalte oder zumindest eine Spaltenkombination, die eindeutig ist. Das bedeutet, mit dieser Spaltenkombination ist es möglich, jeden Datensatz der Tabelle eindeutig von den anderen Datensätzen abzugrenzen. Diese Spalte bzw. Spaltenkombination
wird als Primärschlüssel bezeichnet und darf nicht doppelt innerhalb einer Tabelle auftauchen. Der Primärschlüssel darf nicht NULL sein. Bei einem zusammengesetzten Primärschlüssel darf keine der am Primärschlüssel beteiligten Spalten NULL-Werte beinhalten.
Im Zuge des Erstellens eines Primärschlüssel wird automatisch von Oracle auf diese Spalte bzw. Spaltenkombination ein eindeutiger Index erstellt.
1.
2.
ALTER TABLE tabellenname
ADD CONSTRAINT constraintname
PRIMARY KEY datenfeldname;
ALTER TABLE tabellenname
DROP CONSTRAINT constraintname;
1. Die Anweisung wird mit den Schlüsselwörtern ALTER TABLE eingeleitet. Danach
folgt der Tabellenname. Mit ADD CONSTRAINT und PRIMARY KEY wird dann der
Primärschlüssel definiert.
2. Mit der Angabe DROP CONSTRAINT gefolgt vom Namen des Constraints wird ein
vorhandener Primärschlüssel gelöscht.
Beispiel:
1. ALTER TABLE employees
ADD CONSTRAINT empl_pk
PRIMARY KEY (employeeid);
54
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2. ALTER TABLE employees
DROP CONSTRAINT empl_pk;
Die Tabelle „employees“ wird verändert und ein neuer Primärschlüssel „empl_pk“ wird erstellt auf die Spalte Mitarbeiterkennung „employeeid“. Dies ist nur dann möglich, wenn es
noch keinen Primärschlüssel in dieser Tabelle gibt.
Fremdschlüssel erstellen und löschen:
Im relationalen Datenbankmodell werden die Datenbestände meist auf mehrere Tabellen
aufgeteilt, um sie möglichst effizient zu speichern und Redundanzen zu vermeiden. In einigen Tabellen werden dadurch nur Verweise auf die Primärschlüssel anderer Tabellen
gespeichert. Diese Verweise werden Fremdschlüssel (FOREIGN KEY) genannt.
ALTER TABLE tabellenname
ADD CONSTRAINT constraintname
FOREIGN KEY (spalte1, spalte2 ...)
REFERENCES tabellenname(spalte1, spalte2 ...);
Die Anweisung wird wieder mit den Schlüsselwörtern ALTER TABLE eingeleitet. Danach
folgt der Tabellenname.
Die ALTER TABLE-Anweisung erlaubt verschiedene Änderungen an der Tabellenstruktur.
Mit der Angabe ADD CONSTRAINT und FOREIGN KEY wird ein neuer Fremdschlüssel
definiert. Danach folgt in runden Klammern der Name des Datenfeldes in der aktuellen
Tabelle, das auf die Primärschlüssel einer anderen Tabelle verweist.
Danach folgt das Schlüsselwort REFERENCES und der Name der Tabelle, auf die verwiesen wird. In runden Klammern folgt der Name des Primärschlüsselfeldes der Tabelle.
Beispiel:
ALTER TABLE products
ADD CONSTRAINT prod_fk_cat
FOREIGN KEY (categoryid)
REFERENCES categories(categoryid);
Die Tabelle „products“ wird verändert und ein neuer Fremdschlüssel „empl_pk“ wird erstellt auf die Spalte Produktkennung „categoryid“ in der Tabelle „products“. Der Constraint sollte immer den
Namen beider Tabellen beinhalten mit denen er verbunden ist. Ebenso ein Kürzel um was für einen Constraint-Typ es sich handelt:
PK Ö PRIMARY KEY / FK Ö FOREIGN KEY / CK Ö CHECK
Constraints werden über folgende Sicht abgefragt:
SELECT table_name FROM dba_constraints;
55
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
10.2
Übungen: Constraints8
Im Folgenden werden Sie die Funktionsweise des Deaktivierens der verschiedenen Aktivierungszustände von Constraints kennen lernen. Arbeiten Sie folgende Übung mit dem
SQLPlus Worksheet durch.
1)
2)
Melden Sie sich an Ihrer Datenbank als sys an.
(Start Ö Programme Ö Oracle - OraHome92 Ö Application Development
Ö SQLPlus Worksheet).
Erstellen Sie eine Tabelle test1 im lokal verwalteten Tablespace test1 mit einer
Datendatei von 50 MByte. Die Tabelle soll eine Spalte name besitzen mit dem
Datentyp varchar(20):
CREATE TABLESPACE test1 DATAFILE ’c:\test1_dbf’ SIZE 50 M;
CREATE TABLE test1 (name VARCHAR(20)) TABLESPACE test1;
3)
Geben Sie folgende Namen in die Spalte name ein: Klaus, Carla, Berndt, Saskia.
INSERT INTO test1 VALUES (’Klaus’); etc.
4)
Erstellen Sie ein Check-Constraint für die Spalte name, der verhindern soll, dass
die Namen Carla und Berndt eingefügt werden können:
ALTER TABLE test1 ADD CONSTRAINT ck_name_test1
CHECK (name not in (’Anna’,’Bert’));
5)
Versuchen Sie nun den Namen Anna in die Tabelle einzufügen.
Was passiert und warum?
_________________________________________________________________
6)
Schalten Sie nun die Connstraint-Prüfung aus:
ALTER TABLE test1
DISABLE NOVALIDATE CONSTRAINT ck_name_test1;
7)
Versuchen Sie nun wiederum den Namen Anna in die Tabelle einzufügen.
Was passiert und warum?
_________________________________________________________________
8)
Schalten Sie die Constraint-Prüfung nun wieder ein. Aktivieren Sie sie so, dass
bestehende Datensätze nicht durch das Constraint geprüft werden:
ALTER TABLE test1
ENABLE NOVALIDATE CONSTRAINT ck_name_test1;
9)
Können Sie den Namen Bert nun in der Tabelle einfügen?
_________________________________________________________________
10) Löschen Sie den Constraint, die Tabelle und den Tablespace.
8
© FÖLLMER, R., Übungen (Schulung dama.go GmbH Potsdam: Database Administrator Oracle), 2004.
56
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
10.3
Indizes
Indizes erstellen:
Ein Index ähnelt dem Inhaltsverzeichnis eines Buches, in dem Suchbegriffe geordnet vorliegen und auf die entsprechenden Seiten des Buches verwiesen wird. Default-Index ist
immer der B*Tree- oder (B*Baum-)Index, welcher eine Baumstruktur hat, die einen direkten Zugriff auf ein Datensatz einer Tabelle ermöglicht. Indizes sollten immer in einem separaten Tablespace gespeichert werden, der auf einer separaten Platte liegen sollte.
CREATE INDEX indexname ON tabellenname (datenfeldname);
Die Anweisung zum erstellen eines neuen Index beginnt mit CREATE INDEX. Falls ein
absteigender Index gewünscht wird, kann die Anweisung CREATE DESC INDEX verwendet werden.
Danach folgt der gewünschte Indexname. Dieser Name wird nur zur internen Verwaltung
der Indizes verwendet. Über den Indexnamen kann ein Index später wieder gelöscht werden.
Nach dem Schlüsselwort ON werden der Name der Tabelle sowie in runden Klammern der
Name des Datenfeldes angegeben, für das der Index erzeugt werden soll.
Beispiel:
CREATE INDEX id_products
ON products (productid);
Beispiel für einen B*Tree-Index, der auf dem Datenfeld „productid“ der Tabelle „products“
angelegt worden ist um die Suchzeit nach bestimmten Produkten zu optimieren.
Indizes löschen:
Mit der DROP INDEX-Anweisung können Sie einen bestehenden Index löschen.
DROP INDEX indexname;
57
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
10.4
Übungen: Indizes
Im Folgenden werden Sie die Funktionsweise von Indizes und deren Verwendbarkeit kennen lernen. Arbeiten Se folgende Übung mit dem SQL*Plus Worksheet durch.
1)
Melden Sie sich an Ihrer Datenbank als sys an.
2)
Erstellen Sie eine Tabelle test2 im lokal verwalteten Tablespace test2 mit einer
Datendatei von 500 MByte. Die Tabelle soll eine Spalte name besitzen mit dem
Datentyp char(2000):
CREATE TABLESPACE test2 DATAFILE ’c:\test2_dbf’ SIZE 500 M;
CREATE TABLE test2 (name CHAR(2000)) TABLESPACE test2;
3)
Geben Sie folgendes Kommando ein, welches die Zeit in Minuten/Sekunden der
Befehlsausführung anzeigt:
SET TIMING ON;
4)
Geben Sie folgende Namen in die Spalte name ein: Klaus, Carla, Berndt, Saskia.
INSERT INTO test2 VALUES (’Klaus’); etc.
5)
Fügen Sie weitere Datensätze der Tabelle hinzu, indem Sie folgenden Befehl
ausführen:
INSERT INTO test2 SELECT * FROM test2;
Führen Sie diesen Befehl insgesamt 14 mal aus. Danach haben Sie ca. 80.000
Datensätze in Ihrer Tabelle.
6)
Fügen Sie einen weiteren Datensatz mit Bert als Namen ein:
INSERT INTO test2 VALUES (’Bert’);
7)
Sie werden nun eine Abfrage starten, bei der ein „full table scan“ durchgeführt
werden muss. Dabei wird die gesamte Tabelle nach dem entsprechenden
Datensatz durchsucht:
SELECT * FROM test2 WHERE name=’Bert’;
Wie lange benötigt die Abfrage zur Ausführung?
_________________________________________________________________
8)
Erstellen Sie nun einen normalen Index auf die Spalte name Ihrer Tabelle test2.
CREATE INDEX id_test2 ON test2 (name);
9)
Wiederholen Sie die in Punkt 7 getätigte Abfrage und notieren Sie sich die zur
Ausführung benötigte Zeit. Vergleichen Sie beide Zeiten und interpretieren Sie
das Ergebnis.
_________________________________________________________________
10) Löschen Sie den Index, die Tabelle und den Tablespace.
58
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
11
Funktionen in Abfragen
11.1
Standard-SQL-Funktionen
Aggregatfunktionen:
In vielen Fällen werden nicht die einzelnen Datensätze einer Abfrage benötigt, sondern
beispielsweise nur die Information über die Anzahl der ermittelten Datensätze oder über
einen Minimal- bzw. Maximalwert. Für diesen Zweck existieren in SQL Aggregatfunktionen, welche Berechnungen über alle oder ausgewählte Datensätze durchführen.
SELECT aggregatfunktionen(datenfeld), … FROM tabellenname;
Folgende Aggregatfunktionen stehen zur Verfügung:
Funktion:
COUNT( )
COUNT(DISTINCT)
AVG( )
MIN( )
MAX( )
SUM( )
Erklärung:
Liefert die Anzahl der Werte (außer den Wert
NULL) in der Ergebnismenge einer SELECTAbfrage bzw. einer Gruppierung.
Liefert die Anzahl der unterschiedlichen Werte
In einer Abfrage oder Gruppierung.
Liefert den Durchschnittswert eines
Datenfeldes einer Abfrage oder Gruppierung.
Liefert den kleinsten, bzw. größten Wert eines
Datenfeldes einer Abfrage oder Gruppierung.
Liefert die Summe der Werte eines
Datenfeldes in der Abfrage oder Gruppierung.
Beispiel:
SELECT COUNT(*)
FROM products;
SELECT
COUNT(DISTINCT lastname)
FROM employees;
SELECT AVG(unitprice)
FROM products;
SELECT MIN(unitprice)
FROM products;
SELECT SUM(unitprice)
FROM products
WHERE unitsinstock > 10;
In Abfragen können entweder nur Datenfelder oder nur Aggregatfunktionen angegeben werden. Eine Kombination wie im folgendem
Beispiel funktioniert nicht:
SELECT city, COUNT (lastname) FROM employees;
Wenn in einer SELECT-Abfrage eine GROUP BY-Anweisung angegeben wird, gruppiert
man die Datensätze der Tabelle anhand der Werte des angegebenen Datenfeldes. In
gruppierten SELECT-Abfragen ist eine Kombination von Datenfeldern und Aggregatfunktionen möglich. Die Aggregatfunktionen werden jeweils auf diese Gruppen angewendet.
Beispiel:
1. SELECT * FROM employees;
Datensätze de Tabelle „employees“ werden zurückgeliefert.
59
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2. SELECT COUNT(employeeid) FROM employees;
Durch Verwenden der Funktion COUNT() ohne GROUP BY wird
die Anzahl der Datensätze in der Tabelle ermittelt.
3. SELECT lastname, COUNT(employeeid) FROM employees
GROUP BY lastname;
Die Tabelle „employees“ wird mit Hilfe von GROUP BY nach
dem Datenfeld „lastname“ gruppiert. Für jeden dieser Gruppen
wird die Anzahl der Datensätze und damit die Anzahl der Mitarbeiter-Kennziffern pro Mitarbeiter ermittelt.
Aggregatfunktionen in Bedingungen:
Aggregatfunktionen können nicht in einer WHERE-Klausel verwendet werden. Eine Auswahl der Datensätze über das Ergebnis einer Aggregatfunktion ist jedoch mit Hilfe der
HAVING-Klausel möglich.
Beispiel:
SELECT productname, avg(unitprice) FROM products
GROUP BY productname HAVING avg(unitprice) > 75;
Durch das Hinzufügen der HAVING-Klausel werden nur die Projekte angezeigt, bei denen der Preis größer als 75 ist.
11.2
Nicht-standardisierte Funktionen
Um das Ergebnis einer Funktion zu erhalten, muss die SELECT-Abfrage verwendet werden. Im einfachsten Fall wird dabei der Funktionsaufruf nach dem Schlüsselwort SELECT
angegeben:
SELECT funktion();
Soll sich die Funktion auf den Datenbestand einer Tabelle beziehen, ist die Angabe der
FROM-Klausel notwendig. Der Funktionsaufruf erfolgt zwischen den Schlüsselwörtern
SELECT und FROM.
SELECT funktion( ) FROM tabellenname;
60
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Man kann auch Datenfelder und Funktionen mischen.
SELECT datenfeld1, … funktion() FROM tabellenname;
Auch kann man Funktionen in einer Bedingung anwenden.
SELECT datenfeld FROM tabellenname WHERE funktion()=wert;
Mathematische Funktionen die zur Auswahl stehen sind:
Funktion:
ABS(zahl)
CEIL()
FLOOR(zahl)
LOG(m,n)
MOD(zahl1, zahl2)
ROUND(zahl)
ROUND(zahl, stellen)
SIGN(zahl)
SIN(zahl)
COS(zahl)
TAN(zahl)
SQRT(zahl)
11.3
Erklärung:
Gibt den absoluten Wert einer Zahl wieder,
d.h. den Wert ohne Vorzeichen.
Rundet den Wert auf die nächste größere
Zahl.
Rundet auf die nächste kleinere Zahl.
Ermittelt den natürlichen Logarithmus zur
Basis e {vgl. „n“ Ö n=m(log(m,n))}
Liefert den Rest der Ganzzahldivision von
Zahl1 und Zahl2 {vgl. „2“ Ö 11/3 =3 Rest 2}
Rundet nach üblichen mathematischen
Regeln auf die ganze Zahl.
Rundet nach üblichen mathematischen
Regeln auf die angegebene Anzahl Dezimalstellen.
Ermittelt das Vorzeichen einer Zahl und
liefert daraufhin den Wert -1 oder 1
Berechnet
für
die
entsprechende
Winkelfunktion den angegebenen Wert.
Ermittelt die Quadratwurzel
übergebene Zahl.
für
die
Beispiel:
SELECT ABS(unitprice)
FROM products;
SELECT CEIL (3.22),
CEIL (-3.22) FROM dual;
SELECT FLOOR(unitprice)
FROM products;
SELECT LOG(7,3)
FROM dual;
SELECT MOD(11,3)
FROM dual;
SELECT ROUND(3.45)
FROM dual;
SELECT ROUND (3.456,2)
FROM dual;
SELECT SIGN(-4), SIGN(0),
SIGN(53) FROM dual;
SELECT SIN(5) FROM dual;
SELECT COS(3) FROM dual;
SELECT TAN(13) FROM dual;
SELECT SQRT(144)
FROM dual;
Übungen: Funktionen in Abfragen
(Lösung)
1.
Listen Sie alle Lieferanten auf, die mehr als 5 Produkte liefern!
2.
Listen Sie die Lieferanten mit Ihren jeweils teuersten Produkt auf. Es sollen nur die
Lieferanten angezeigt werden, bei denen das teuerste Produkt billiger als 10,- EURO
ist.
3.
Listen Sie den Nachnamen des Mitarbeiters auf, der am längsten angestellt war!
61
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
12 Datenabfragen über mehrere Tabellen
Datenbestände in mehreren Tabellen:
Bei relationalen Datenbanken werden die Daten in der Regel auf mehrere, logisch zusammengehörige Tabellen verteilt. In einer Abfrage müssen diese Daten so zusammengefügt werden, dass eine brauchbare Ergebnismenge entsteht. Eine wichtige Rolle spielen
dabei die Primär- und Fremdschlüssel, die die Verbindung von Datensätzen in mehreren
Tabellen vereinfachen. Die Verknüpfung von mehreren Tabellen miteinander ist ein wichtiger Aspekt des relationalen Datenbankmodells.
Die SELECT- Abfrage kann auf verschiedene Weise erweitert werden, um den Zugriff auf
mehrere Tabellen gleichzeitig zu ermöglichen. Diese Abfragen können sich auf zwei oder
auch mehr Tabellen beziehen.
Verknüpfungen von Tabellen über Mengenoperationen:
Die Datenbestände in den einzelnen Tabellen stellen Mengen von Datensätzen (Tupeln)
dar. Durch SQL-Anweisungen können diese unterschiedlich miteinander verknüpft werden. Voraussetzung für die Durchführung einer Mengenoperation ist, dass beide Tabellen
vereinigungskompatibel sind. Dies bedeutet, dass beide Tabellen die gleiche Struktur aufweisen müssen: Feldnamen und Wertebereiche müssen übereinstimmen. Wenn Sie zwei
oder mehr vereinigungskompatible Mengen addieren, erhalten Sie einen Datenbestand,
der alle Datensätze aus allen Tabellen erhält. Sie können auch Schnittmengen bilden, um
nur diejenigen Datensätze zu ermitteln, die in allen Tabellen vorhanden sind. Folgende
drei Mengenoperationen werden beim Verknüpfen von Tabellen am häufigsten eingesetzt:
Vereinigungsmenge:
Verbindung von zwei oder mehr Tabellen zu einem Datenbestand.
Beispiel: Es sollen alle Städte der Kunden und Lieferanten
der NORDWIND LTD. ausgegeben werden.
Schnittmenge:
Aus zwei oder mehr Mengen werden nur die Datensätze
herausgesucht, die in allen Mengen gleich sind.
Beispiel: Es sollen nur diejenigen Städte herausgesucht
werden, in denen sowohl Kunden als auch Lieferanten der
NORDWIND LTD. wohnen.
Differenzmenge:
Aus zwei oder mehr Mengen werden alle Datensätze ermittelt, die zwar in der einen Menge, jedoch nicht in der
anderen Menge enthalten sind.
Beispiel: Es sollen alle Städte der Kunden angezeigt werden, die nicht in der Lieferantentabelle vorhanden sind.
62
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
12.1
Verbund von Tabellen (Joins)
Der Verbund mehrerer Tabellen wird als Join (engl. Verbinden, vereinigen) bezeichnet.
Dazu werden jeweils ein oder mehrere Felder Tabellen miteinander verglichen. Die Datensätze, die der Vergleichsbedingung genügen, werden in die Ergebnistabelle aufgenommen. Es werden die Kundennamen mit dem jeweiligen zuständigen Kundenberater der
NORDWIND LTD. angezeigt und durch verschiedene Joins verbunden.
Nr:
0001
0002
0003
0005
Name:
King
Dovalio
Fuller
Callahan
Vorname:
Robert
Nancy
Andrew
Laura
Nr:
0001
0007
0010
Mitarbeiter-Tabelle „Employee“ der Nordwind Ltd
Natural-Join
Name:
King
Vorname: Nr:
Robert
0001
Name:
Wong
Von der ersten (linken) Tabelle werden alle Datensätze in
die Ergebnismenge aufgenommen. Von der zweiten (rechten) Tabelle werden nur die dazugehörigen Datensätze übernommen. Die Felder der zweiten Tabelle bleiben, wenn
kein passender Datensatz vorhanden ist.
Nr:
0001
0002
0003
0005
Right-Outer-Join
Rechte InklusionsVerknüpfung
Kunden-Tabelle „Customer“ der Nordwind Ltd.
Der Naural-Join arbeitet wie der Inner-Join – mit dem Unterschied, dass in der Ergebnistabelle keine identischen
Zeilen enthalten sind.
Nr:
0001
Left-Outer-Join
Linke InklusionsVerknüpfung
Name:
Wong
Ottlieb
Devon
Name:
King
Dovalio
Fuller
Callahan
Vorname:
Robert
Nancy
Andrew
Laura
Nr:
0001
NULL
NULL
NULL
Name:
Wong
NULL
NULL
NULL
Von der zweiten (rechten) Tabelle werden alle Datensätze
in die Ergebnismenge aufgenommen. Von der ersten (linken) Tabelle werden nur die dazugehörigen Datensätze
übernommen. Die Felder der ersten Tabelle bleiben leer,
wenn kein passender Datensatz vorhanden ist.
Nr:
0001
0002
0003
Name:
King
NULL
NULL
Vorname:
Robert
NULL
NULL
63
Nr:
0001
0007
0010
Name:
Wong
Ottlieb
Devon
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Full-Outer-Join =
Full-Join
Der Full-Join ist eine Kombination aus dem Left-Outer-Join
und dem Right-Outer-Join. Alle Datensätze beider Tabellen
werden in die Ergebnismenge übernommen. Passen Datensätze aus beiden Tabellen laut Vergleichsoperator zusammen, so werden diese verbunden.
Nr:
0001
0002
0003
0005
NULL
NULL
Semi-Join
Vorname:
Robert
Nancy
Andrew
Laura
NULL
NULL
Nr:
0001
NULL
NULL
NULL
0007
0010
Name:
Wong
NULL
NULL
NULL
Ottlieb
Devon
Um einen Semi-Join9 zu erhalten, werden zwei Tabellen
über einen Natural-Join verbunden. Anschließend erfolgt
eine Projektion auf die Spalte der ersten Tabelle.
Nr:
0001
Self-Join
Name:
King
Dovalio
Fuller
Callahan
NULL
NULL
Name:
King
Vorname:
Robert
Der Self-Join ist einer der zuvor genannten Joins, bei dem
nicht zwei verschiedene Tabellen miteinander verbunden
werden, sondern zweimal dieselbe.
Nr:
0001
0002
0003
0005
Name:
King
Dovalio
Fuller
Callahan
Vorname:
Robert
Nancy
Andrew
Laura
Chef:
NULL
0001
0002
0003
Mitarbeiter-Tabelle „Employees“ um eine Spalte erweitert.
Nr:
0001
0002
0003
0005
Name:
King
Dovalio
Fuller
Callahan
Vorname:
Robert
Nancy
Andrew
Laura
Chef:
NULL
King
Dovalio
Fuller
Self-Join auf Mitarbeiter-Tabelle.
Cartesien-Join
oder
Cross-Join10
9
10
Mit diesem Verbund wird das kartesische Produkt beider
Tabellen gebildet. Das heißt, jeder Datensatz der einen Tabelle wird mit jedem Datensatz der anderen Tabelle kombiniert.
Wird bei einem Join auf eine Nicht-Übereinstimmung geprüft, dann spricht man von einem Anti-Join.
Z.B. SELECT a.food FROM table1 a WHERE NOT EXISTS (SELECT * FROM table2 b WHERE a.food
= b.food);
Es gibt drei Hauptklassen von Joins: Natural-Join, Anti-Join (z.B. Anti-Semi-Join), und Cartesien-Join.
Alle anderen fünf Typen von Joins sind Spezialformen von diesen.
64
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Theta-Join
Es werden bestimmte Datensätze aus dem kartesischen
Produkt zweier Tabellen durch eine Bedingung ausgewählt.
In dieser Bedingung wird eine Spalte aus der einen und
eine Spalte aus der anderen Tabelle über eine logische
Operation verglichen, z.B. „Employee“ Nr < „Customer“
Nr. Wird auf Gleichheit geprüft, so erhalten Sie eine Spezialform des Theta-Join, den Equi-Join. Für das Beispiel
„Employee“ Nr < „Customer“ Nr erhalten Sie folgende
Ergebnistabelle:
Nr:
0001
0001
0002
0002
0003
0003
0005
0005
Inner-Join =
Equi-Join
Name:
King
King
Dovalio
Dovalio
Fuller
Fuller
Callahan
Callahan
Vorname:
Robert
Robert
Nancy
Nancy
Andrew
Andrew
Laura
Laura
Nr:
0007
0010
0007
0010
0007
0010
0007
0010
Name:
Ottlieb
Devon
Ottlieb
Devon
Ottlieb
Devon
Ottlieb
Devon
Die Datensätze aus beiden Tabellen werden verbunden,
wenn ein oder mehrere gemeinsame Felder den gleichen
Wert haben (deshalb auch Equi-Join – äquivalent). Dieser
Join ist der am häufigsten verwendete Verbund. Für das
Beispiel „Employees“ Nr = „Customers“ Nr erhalten Sie
folgende Ergebnistabelle.
Nr:
0001
Name:
King
Vorname: Nr:
Robert
0001
Name:
Wong
Einfaches Verknüpfen von Tabellen:
Durch eine SELECT-Anweisung können zwei oder mehrere Tabellen verbunden werden,
indem Felder aus mehreren Tabellen selektiert werden. Dazu lassen sich in der WHEREKlausel Bedingungen für die Verknüpfung der beteiligten Tabellen angeben. Ist die Bedingung für zwei Datensätze der beteiligten Tabellen erfüllt, so werden diese miteinander
verbunden.
Wenn in der WHERE-Klausel keine Felder angegeben werden, erhält man einen Full-Join.
SELECT datenfeldliste FROM tabelle1, tabelle2, …
WHERE tabelle1.datenfeld = tabelle2.datenfeld [AND …];
65
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Beispiel:
1. SELECT employee.lastname, employee.firstname,
employee.employeeid,
customert.customerid, customer.lastname
FROM employee, customer
WHERE employee.employeeid = customer.customerid;
Die zwei Tabellen „employee“ und „customer“ werden verknüpft, sodass ein einfacher
Equi-Join entsteht. Die Ergebnismenge beinhaltet alle Datensätze, in denen die Felder
„employeeid“ und „customerid“ der beiden Tabellen die gleichen Werte besitzen.
Beispiel:
SELECT * FROM tabelle1, tabelle2 …
SELECT tabelle1.feld1, tabelle1.feld2, tabelle2.* …
SELECT tabelle1.*, tabelle2.* …
Beispiel:
Erklärung:
Liefert alle Felder aus allen beteiligten Tabellen.
Liefert die angegebenen Felder der Tabelle „tabelle1“ und alle Felder der Tabelle „tabelle2“.
Gleichbedeutend mit der Angabe SELECT *.
2. SELECT employee.lastname, employee.firstname,
employee.employeeid, customer.customerid,
customer.lastname, customer.city
FROM employee, customer
WHERE employee.employeeid = customer.customerid
AND customer.city = ’London’;
Auswahl über zwei Tabellen mit einer zusätzlichen Bedingung.
66
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Es werden zwei Tabellen verknüpft und die Datensätze durch eine zusätzliche Bedingung
gefiltert.
Ersatznamen für Tabellen11 mit dem Schlüsselwort AS definieren:
SELECT e.lastname, e.firstname, e.employeeid, c.*
FROM employee AS e, customer AS c
WHERE e.employeeid = c.customerid;
Ersatznamen für Tabellen ohne das Schlüsselwort AS definieren:
SELECT e.lastname, e.firstname, e.employeeid, c.*
FROM employee AS e, customer AS c
WHERE e.employeeid = c.customerid;
Full-Join:
Beim Full-Join oder Cross-Join wird das kartesische Produkt aus beiden Tabellen gebildet.
SELECT datenfelder FROM tabelle1 CROSS JOIN tabelle2;
Beispiel:
SELECT e.lastname, e.employeeid, p.*
FROM employee e CROSS JOIN project p
WHERE e.projnr = p.projnr;
Gibt an, welche Mitarbeiter an welchen Projekten mitarbeiten.
11
Beispieltabellen, welche in Anlehnung der Nordwind-Datenbank benannt worden sind.
Vorsicht Verwechselungsgefahr !
67
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Inner-Join (Equi-Join):
SELECT datenfeldliste
FROM tabelle1 INNER JOIN tabelle2
ON tabelle1.datenfeld = tabelle2.datenfeld [WHERE …];
Beispiel:
SELECT e.lastname, e.deptno, d.*
FROM employee e INNER JOIN dept d
ON e.deptno = d.deptno;
Die zwei Tabellen sollen verknüpft werden.
68
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Inner-Join über mehr als zwei Tabellen:
SELECT datenfelder
FROM (
(tabelle1 INNER JOIN tabelle2 ON bedingung)
INNER JOIN tabelle3 ON bedingung
);
Beispiel:
SELECT e.lastname, p.description, p.end_time
FROM emp_proj ep INNER JOIN employee e
ON ep.employeeid = e.employeeid;
INNER JOIN project p
ON ep.projnr = p.projnr
ORDER BY p.description;
Es soll ermittelt werden, welche Mitarbeiter an welchen Projekten beteiligt sind. Die Namen der Mitarbeiter sind in der Tabelle „employee“ gespeichert, die Namen der Projekte in
der Tabelle „project“. Da ein Mitarbeiter in mehreren Projekten tätig sein kann, ist eine zusätzliche Tabelle „emp_proj“ notwendig, um die Beziehungen zwischen den Projekten und
den Mitarbeitern herzustellen.
Natural Join:
Beispiel:
SELECT DISTINCT e.lastname, e.deptno, d.*
FROM employee e NATURAL | INNER JOIN dept d
ON e.deptno = d.deptno;
Ein Natural-Join ist ein Inner-Join, der gleiche Datensätze nur einmal enthält. Er lässt sich
auf einfache Art erzeugen, indem der SELECT-Anweisung das Schlüsselwort DISTINCT
hinzugefügt wird.
69
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Theta-Join:
Beispiel:
SELECT e.lastname, e.firstname, e.employeeid,
c.customerid, c.lastname, c.firstname
FROM employee e INNER JOIN customer c
ON e.employeeid < c.customerid;
Beim Theta-Join wird in der ON-Klausel nicht auf Gleichheit geprüft, sondern ein anderer
logischer Operator eingesetzt (Operatoren: >, <, >=, <=, <>). In unserem Bespiel wird der
Kunde „Wong“ nicht angezeigt, da er die Zahl „1“ als Kundennummer hat, welche ebenfalls Mitarbeiterkennung vom Präsident King ist.
Outer-Join:
SELECT datenfeldliste
FROM tabelle1 LEFT | RIGT OUTER JOIN tabelle2
ON bedingung;
Beispiel:
SELECT e.lastname, e.firstname, d.description
FROM employee e LEFT OUTER JOIN dept d
ON e.deptno = d.deptno;
ORDER BY e.lastname;
70
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Hiermit wird eine Mitarbeiterliste erzeugt, die für jeden Mitarbeiter die entsprechende Abteilung enthält. Zwei Mitarbeiter (Buchanan und Dodsworth) sind keiner Abteilung zugeordnet.
Mitarbeiterliste als Ergebnis des Outer-Joins.
Self-Join:
SELECT e1.lastname, e2.lastname, e1.city
FROM employee e1 INNER JOIN employee e2
ON e1.city = e2.city WHERE e1.deptno <> e2.deptno;
Der Self-Join ist dann sinnvoll, wenn sich ein Feld einer Tabelle auf ein anderes Feld in
der gleichen Tabelle bezieht.
In der Tabelle „employee“ werden die Mitarbeiternamen und die jeweiligen Orte gespeichert. Der Self-Join wird verwendet um alle Mitarbeiter herauszufinden, die einer Abteilung
mitarbeiten und deren Standorte.
71
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
12.2
Tabellen vereinigen
Mit einem Join verknüpft man zwei oder mehr Tabellen, sodass bestimmte Datensätze aus
den verschiedenen Tabellen miteinander kombiniert werden.
Man kann auch zwei Abfragen vereinigen, sodass eine Ergebnismenge entsteht, die sowohl Datensätze der ersten als auch der zweiten Abfrage enthält.
SELECT e.lastname, e.firstname
FROM employee e
WHERE e.city = ’London’
UNION SELECT c.lastname, c.firstname
FROM customer c;
Die erste SELECT-Anweisung ermittelt die Datensätze aus der Tabelle „employee“, bei
denen der Ort London ist. Es wurden nur die Felder „lastname“ und „firstname“ projiziert.
Über das Schlüsselwort UNION wird die Ergebnismenge der zweiten Abfrage angefügt.
Die zweite Abfrage liefert die Felder „lastname“ und „firstname“ der Tabelle „customer“
aus.
Es werden alle Mitarbeiter und Kunden der NORDWIND LTD. aus den Tabellen „employee“
und „customer“ in einer Abfrage vereinigt, welche in London wohnen.
72
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
12.3
Übungen: Datenabfragen über mehrere Tabellen (Joins)
(Lösung)
1.
Welche Kunden „contactname“ haben Produkte der Kategorie „beverages“ bestellt.
Benutzen Sie NATURAL JOINs, soweit es möglich ist.
2.
Welcher Kunde hat noch nie etwas bestellt? Benutzen Sie einen OUTER JOIN.
3.
Welche Kunden wurden bisher von Speedy Express beliefert? Benutzen Sie INNER
JOIN und NATURAL JOIN, soweit es möglich ist. Erstellen Sie eine Hilfs-View hierfür.
4.
Erstellen Sie eine Abfrage, die Ihnen rechts den Angestellten und links den Vorgesetzten ausgibt. Der Chef sollte in der Spalte Vorgesetzter „BOSS“ zu stehen haben.
5.
Schreiben Sie eine Abfrage, die Ihnen die Kontaktnamen der Lieferanten ausgibt, die
Produkte der Kategorie 1 oder 2 oder 3 liefern!
6.
Schreiben Sie eine Abfrage, die Ihnen die Kundennamen, die entsprechenden Bestellnummern „orderid“ und den Namen des Angestellten „employees“, der die Bestellung bearbeitet hat, ausgibt. Es soll nach dem „contactname“ geordnet sein!
7.
Was machen folgende Abfragen?
a)
SELECT lastname
FROM employees GROUP BY city;
b)
SELECT discontinued, sum(unitprice*unitsinstock)
FROM products
GROUP BY discontinued;
c)
SELECT sum(unitprice*unitsinstock)
FROM products
GROUP BY supplierid;
73
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
13
Sichten
Abfragen sind eine Möglichkeit, die benötigten Daten bereitzustellen. Sie müssen aber
immer wieder neu eingegeben werden. Um diese sich wiederholende Arbeit einzusparen,
kann man vordefinierte Abfragen, sogenannte Sichten (engl. Views) verwenden. Sichten
sind gespeicherte SELECT-Anweisungen, die bis auf ihre Definition keinen zusätzlichen
Speicherplatz benötigen. Sie stellen Ergebnismengen von Abfragen dar, werden aber wie
Tabellen verwendet. Man kann Daten aus vorhandenen Sichten abfragen und teilweise
auch Datensätze mit Hilfe von Sichten aktualisieren bzw. neu einfügen.
13.1
Sichten erstellen und löschen
Sichten lassen sich mit der SQL-Anweisung CREATE VIEW erstellen. Dabei wird ein Name eingegeben, über den man im weiteren Verlauf auf die Sicht zugreifen kann.
CREATE VIEW viewname AS
SELECT abfrageanweisung;
Sichten werden mit der Anweisung DROP VIEW gelöscht. Danach folg der Name der
Sicht. Es wird dabei ausschließlich die Definition der Sicht gelöscht und nicht die zugrunde
liegenden Daten der Tabelle.
DROP VIEW viewname;
13.2
Daten über Sichten einfügen und ändern
Unter bestimmten Voraussetzungen können Sichten auch zum Eingeben und Ändern von
Daten verwendet werden. Die INSERT-, UPDATE- und DELETE-Anweisungen sind jedoch nur in folgenden Fällen erlaubt:
¾
In SELECT-Anweisungen der Sicht wird nicht das Schlüsselwort DISTINCT verwendet.
¾
Die Sicht bezieht sich nur auf eine Tabelle. Joins sind beim Ändern von Daten
nicht gestattet.
¾
Die Abfrage verwendet keine Unterabfragen in der Bedingung.
74
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Beispiel:
1.
2.
3.
CREATE VIEW exployeeview AS
SELECT employeeid, lastname, firstname
FROM employees;
UPDATE employeesview SET lastname=’Meyer’
WHERE employeesid=20
INSERT INTO employeesview (employeeid, lastname, firstname)
VALUES (20,’Meyer’,’Timo’);
1. Die Sicht „employeesview“ wird erstellt und enthält die Felder „employeeid“,
„lastname“ und „firstname“ aus der Tabelle „employees“.
2. Mit der UPDATE-Anweisung wird in dem Datensatz mit der „employeeid“
gleich 20 der Name auf Meyer gesetzt, falls diese vorhanden.
3. Ein neuer Datensatz wird mit der INSERT INTO-Anweisung eingefügt.
Sichten werden nicht von allen SQL-Dialekten unterstützt !!!
75
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
14
Zugriffsrechte und Benutzer verwalten
Die Benutzerverwaltung übernimmt in der Regel der Datenbank- oder der Systemadministrator. Er verfügt über die meisten Rechte bzw. Privilegien im System und kann diese anderen Benutzern (engl. user) zuweisen oder entziehen.
Für den Datenbankadministrator wird beim Installieren des Datenbanksystems automatisch ein Benutzerkonto erstellt. Dieser Benutzer hat ein vom verwendeten Datenbanksystem abhängigen Namen.
Datenbanksystem:
Interbase
Microsoft SQL-Server
MySQL
ORACLE
14.1
Benutzername des Administrators:
SYSDBA
sa
Root
1) sys
2) system
Standard-Passwort:
Masterkey
–
–
change_on_install
manager
Benutzer und Profile anlegen und verwalten
Benutzer anlegen und verwalten:
In Oracle besteht genau wie in vielen anderen Datenbanksystemen, die Benutzer und Rollen mit Hilfe spezieller SQL-Anweisungen anzulegen bzw. zu bearbeiten. Das schöne dabei ist, dass man sich hierfür kaum spezielle Befehle merken muss, denn ähnlich wie das
Anlegen, das Ändern oder Löschen von sonstigen Datenbankobjekten beginnen die Befehle zur entsprechenden Benutzerbearbeitung auch mit CREATE, ALTER und DROP.
Beginnen wir damit einen neuen Benutzer in der Datenbank anzulegen, was Sie mit Hilfe
der CREATE USER-Anweisung erledigen können. Neben der Nennung der neuen Benutzkennung sollten Sie hierbei wenigsten auch die IDENTIFIED BY-Klausel zur Vorgabe
des zugehörigen Passworts verwenden.
CREATE USER chef IDENTIFIED BY12 manager
DEFAULT TABLESPACE13 usr
TEMPORARY TABLESPACE14 temporary
PROFILE15 default ACCOUNT16 unlock
QUOTA unlimited ON usr
QUOTA unlimited ON indx
QUOTA unlimited ON temporary;
12
13
14
15
16
identified by
default tablespace
temporary tablespace
profile
account
:
:
:
:
:
Password für Benutzer vergeben
Legt einen Standard-Tablespace fest (Standard „system“).
Speichert temporäre Objekte (z.B. Zwischenergebnisse)
Name des zugeordneten Profils (z.B. default“)
Freigabe oder Sperren des Benutzerprofils.
76
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Löschen können Sie ein nicht mehr benötigtes Benutzerkonto mit Hilfe der DROP USERAnweisung , der wenigstens der Name der zu löschenden Benutzer-ID folgt.
DROP USER chef CASCADE;
Die zusätzliche CASCADE-Klausel sorgt dafür, dass das Löschen auch dann funktioniert,
wenn der Benutzer Eigentümer irgendwelche Datenbankobjekte, beispielsweise Tabellen
ist, denn aufgrund dieser Klausel werden seine Objekte ebenfalls aus der Datenbank entfernt.
Profile anlegen und verwalten:
Auch Benutzerprofile können Sie mit Hilfe von SQL-Anweisungen anlegen, ändern oder
löschen. Das folgende Beispiel zeigt Ihnen, wie einfaches Profil mit dem Namen „aushilfe“
erstellt wird.
CREATE PROFILE aushilfe limit
SESSIONS_PER_USER 1
PRIVATE_SGA 200K;
Das neue Profil enthält einmal abgesehen von zwei Ausnahmen für alle anderen Standardeinstellungen. Die Anlage des neuen Profils erfolgt durch die Anweisung CREATE
PROFILE, auf die der Name des neuen Profils und anschließend das Schlüsselwort „limit“
erfolgt. Danach erfolgt die Aufzählung der eingeschränkten Parameter, wobei ich in unserem Beispiel vor allem dafür gesorgt wurde, dass sich Benutzer mit diesem Profil nur einmal an der Datenbank anmelden können.
Genau wie beim Anlegen neuer Benutzer haben Sie auch bei den Profilen die Möglichkeit,
ein Profil zunächst einmal anzulegen und die einzelnen Parameter in einem zweiten
Schritt durch entsprechende ALTER PROFILE-Befehle zu verändern.
ALTER PROFIL aushilfe limit
FAILES_LOGIN_ATTEMPTS 5
PASSWORD_LOG_TIME 1;
Das letzte Beispiel kontrolliert die Anzahl der fehlerhaften Anmeldeversuche und sperrt
den Benutzer nach fünf vergeblichen Versuchen für einen Tag.
77
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
14.2
Zugriffsrechte an Benutzer vergeben
Mit der Anweisung GRANT werden Rechte für verschiedene SQL-Anweisungen vergeben,
die sich auf ein ausgewähltes oder alle Datenbankobjekte beziehen. So kann beispielsweise einem Benutzer schreibender Zugriff auf eine bestimmte Tabelle ermöglicht werden
und lesender Zugriff auf alle Tabellen und Datenbanken erlaubt werden. Standardmäßig
können Benutzerrechte nur vom Datenbankadministrator vergeben werden.
GRANT rechteliste ON datenbankobjekt TO benutzername;
Beispiel:
1.
2.
3.
GRANT ALL ON employees TO king;
GRANT SELECT, UPDATE ON products TO dovalio;
GRANT SELECT ON employees TO callahan;
1. Benutzer „king“ erhällt alle Rechte für die Tabelle „employees“.
2. Dem Benutzer „dovalio“ wird das Ausführen der SELECT- und UPDATEAnweisung für die Tabelle „products“ gestattet.
4. Der Benutzer „callahan“ erhält an dieser Stelle Leserechte für die Tabelle
„employees“.
Folgende Rechte können mit der GRANT-Anweisung vergeben werden:
Privileg:
ALL
INSERT
REVOKE
SELECT
UPDATE
REFERENCES
Erklärung:
Gewährt alle Rechte für das entsprechende Datenbankobjekt.
Recht zum Einfügen neuer Datensätze, Ausführen der INSERT-Anweisung.
Recht zum Löschen von Datensätzen, Ausführen der REVOKE-Anweisung.
Leserecht, Recht zum Ausführen der SELECT-Anweisung.
Recht zum Ändern von Datensätzen, Ausführen der UPDATE-Anweisung.
Recht zum Definieren von Regeln für die referentielle Integrität.
Seien Sie vorsichtig mit der Vergabe von Rechten und Privilegien.
Oft reicht eine SELECT-Zuzuweisen, damit der Benutzer alle seine
Aufgaben erfüllen kann !!!
78
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
14.3
Übungen: Verwaltung von Zugriffsrechten und Benutzern
In der folgenden Übung werden Sie zwei Benutzer namens „anna“ und „berta“ erstellen.
1)
2)
3)
4)
5)
6)
7)
8)
Öffnen Sie die Oracle Enterprise Manager-Konsole (OEM).
(Start Ö Programme Ö Oracle - OraHome92 Ö Enterprise Manager Console).
Wählen Sie Standalone starten und klicken Sie auf OK.
Erweitern Sie die Datenbank testdbx. Melden Sie sich an testdb01 mit Benutzernamen SYS und dem Kennwort sys als SYSDBA (Anmelden als) an.
Erweitern Sie Sicherheit und führen Sie einen Rechtsklick auf Benutzer aus.
Wählen Sie Erstellen.
Geben Sie unter Name: anna unter Kennwort ebenfalls anna.
Klicken Sie auf Erstellen und anschließend auf OK.
Melden Sie sich unter sqlplus als anna@testdbx an.
Geben Sie bei Aufforderung das Kennwort anna ein. Was passiert und warum?
_________________________________________________________________
_________________________________________________________________
Versuchen Sie, als Anna eine Tabelle zu erstellen. Geben Sie hierfür unter
SQLPLUS create table annatest(s1 int); ein und schließen Sie diese Anweisung
mit ENTER ab. Was passiert und warum?
_________________________________________________________________
_________________________________________________________________
9) Melden Sie sich bei SQLPLUS wieder ab. Geben Sie hierfür exit ein.
10) Im folgenden werden Sie anna unbegrenzten Speicherplatz auf dem Tablespace
users geben. Klicken Sie hierfür auf den Benutzer anna im OEM. Wählen Sie nun
die Registerkarte quota aus. Klicken Sie auf users und unten auf Unbegrenzt.
Klicken Sie nun auf Anwenden.
11) Versuchen Sie, als Anna eine Tabelle zu erstellen. Geben Sie hierfür unter
SQLPLUS create table annatest(s1 int); ein und schließen Sie diese Anweisung
Mit ENTER ab. Was passiert und warum?
_________________________________________________________________
_________________________________________________________________
12) Fügen Sie zwei Datensätze in die Tabelle annatest hinzu und die
Daten festschreiben. Geben Sie hierfür in SQLPLUS folgendes ein:
INSERT INTO annatest VALUES(1);
INSERT INTO annatest VALUES(2);
COMMIT;
13) Erstellen Sie selbstständig einen Benutzer berta als berta eine Tabelle namens
bertatest. Geben Sie Berta das Recht die Tabelle annatest abzufragen. Testen
Sie dies anschließend selbständig mit einer SELECT-Anweisung:
OEM : Berta Ö Objekt Ö Tabelle Ö Annatest zu Berta mit SELECT hinzufügen.
79
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
15
Anhang
15.1
Glossar
IT-Fachbegriff:
Erklärung:
3-Ebenen-Modell
(auch 3-Ebenen-Architektur)
nach ANSI-SPARC:
Dieses Modell besteht aus drei unterschiedlichen Abstraktionsebenen für die Darstellung des Datenbankschemas: der internen,
der konzeptionellen und der externen Ebene. Auf jeder Ebene wird eine andere
Sichtweise auf die Daten verwendet: die
physische Datenorganisation, die logische
Gesamtsicht und die logische Benutzersicht
der Daten.
Aggregatfunktion:
Funktionen, die der statistischen Auswertung der Werte eines Datenfeldes oder einer Gruppe innerhalb einer Abfrage dienen.
Archiver (ARCn):
Der Archiver Prozess sichert die OnlineRedo-Log-Datei, die gerade nicht aktuell ist.
Dies geschieht nur, wenn sich die Datenbank im ArchiveLog-Modus (es werden die
jeweils aktuellen Redo-Log-Dateien gesichert) befindet und der Archiver-Prozess
gestartet wurde. Der Archiver-Prozess wird
gestartet, indem die Anweisung „ARCHIVE
LOG START“ ausgeführt wird. Der Archiver-Prozess kann auch automatisch beim
Hochfahren der Datenbank gestartet werden.
Hierfür
muss
der
Eintrag
„LOG_ARCHIVE_START = TRUE“ in die
entsprechende INI-Datei eingefügt werden.
Attribut:
Spalte einer Relation, Eigenschaft einer
Entität oder Beziehung im ER-Modell.
Checkpoint-Prozess (CKPT):
Der Checkpoint stellt sicher, dass nach Abschluss des Checkpoint alle Datenänderungen aus Transaktionen, die zum Zeitpunkt des Checkpoint „commited“ waren, in
die entsprechenden Datendateien auf der
Platte geschrieben wurden.
80
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
IT-Fachbegriff:
Erklärung:
Client-Server-DBS:
Die meisten heutigen Datenbanksysteme
arbeiten nach dem Client-Server-Konzept,
bei dem der Datenbank-Server seinen
Clients Dienste zur Verfügung stellt. Beispielsweise werden Datenbank-Abfragen
an den Datenbank-Server gerichtet und
dieser liefert die entsprechenden Daten an
den Client zurück.
Commit:
Speichern und festschreiben der Daten in
der Datenbank.
Database-Buffer-Cache:
Einer der wichtigsten Bestandteile der SGA
(System-Speicherstruktur). Immer, wenn
Daten gelesen oder geändert werden,
schaut Oracle nach, ob die entsprechenden
Blöcke sich schon im Database-BufferCache befinden. Ansonsten lädt Oracle die
beteiligten Blöcke in den Cache wegen
schnellerem Zugriff und speicher diese dort
bis ein „Commit“ erfolgt.
Data-Dictionary-Cache:
(auch: Row-Cache)
Speichert Informationen über die Datenbank (Sichten, Datenbank-Schema etc.)
und deren Verwaltung (Zugriffsrechte etc.).
Database-Writer-Prozess (DBWn):
Der Prozess DatabaseWriter schreibt die
veränderten Blöcke („Dirty Blocks“) aus
dem Database-Buffer-Cache in die entsprechenden Datendateien. Dadurch werden die Dirty-Buffers wieder Free-Buffers
und können andere Blöcke zwischenspeichern. Unter folgenden Situationen schreibt
der DBW-Prozess Dirtys-Blocks in die Datendateien:
- Auftreten eines Checkpoint
- Ein anderer Block soll im Cache gespeichert werden und es findet sich kein freier
Block.
Datenbank (DB):
a) Sammlung logisch-zusammengehöriger
Daten, die physische zusammenhängend
auf einem externen permanenten Speichermedium abgelegt sind.
81
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
IT-Fachbegriff:
Erklärung:
Datenbank (DB):
b) Oberstes Objekt in der Datenbankhierarchie, welches einen Container für die darin
gespeicherten Tabellen bzw. weiteren Datenbankobjekte darstellt.
Datenbankmanagementsystem (DBMS):
Datenbanksoftware, mit der die Daten der
Datenbank und die Datenbank selbst erstellt, bearbeitet, verwaltet und gepflegt
werden.
Datenbanksicht:
Unterschiedliche Betrachtungsweisen einer
Datenbank.
Datenbanksystem (DBS):
Kombination aus den Datenbanken und
dem Datenbankmanagementsystem.
Datenfeld (Attribut):
Entspricht der Spalte einer Tabelle und
enthält Werte für alle dazugehörigen Datenfelder.
Datensatz (Tupel):
Entspricht der Zeile einer Tabelle und enthält die Werte für alle dazugehörigen Datenfelder.
Datenmodell:
Hilfsmittel zur Abstraktion der Daten aus
der realen Welt. Es wird eine Struktur aus
den relevanten Daten – deren Beziehungen
und Bedingungen – erzeugt.
Datentyp:
Durch den Datentyp wird festgelegt, welche
Art von Daten (Zahlen, Zeichenketten etc.)
in einem Feld gespeichert werden können.
Datenunabhängigkeit:
Die Anwendungsprogramme und die physische Speicherung der verwendeten Daten
sind voneinander unabhängig. Die Datenverwaltung wird von einem anderen Programm (z.B. DBMS) übernommen.
Entity:
Entität, Datensatz, Tupel, Zeile einer Tabelle.
ER-Modell:
Entity-Relationship-Modell: Hilfsmittel zur
grafischen Darstellung eines Datenbankentwurfs.
82
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
IT-Fachbegriff:
Erklärung:
Fremdschlüssel:
a) Referenziert den Primärschlüssel einer
anderen Tabelle. Über Fremdschlüssel wird
eine Beziehung zwischen zwei Tabellen
hergestellt.
b) Ein Fremdschlüssel ist ein Attribut einer
Relation, das einer anderen Relation als
Primärschlüssel dient. Mit Hilfe von Fremdschlüsseln lassen sich Beziehungen zwischen Relationen herstellen.
Hierarchisches DBS:
Die Daten werden nach streng hierarchischem Prinzip in einer baumartigen Struktur
abgelegt.
Index:
a) Ein Attribut bzw. eine Attributkombination
einer Relation wird als Index gespeichert,
um z.B. Sortierfunktionen schneller durchführen zu können.
b) Für ein oder mehrere Datenfelder angelegtes Inhaltsverzeichnis (in Form eines B*Baumes) zum beschleunigten Filtern, Gruppieren oder Sortieren einer Tabelle.
Integrität:
Liegt vor, wenn Daten in sich richtig (stimmig), widerspruchsfrei und vollständig sind
(logische Integrität Ö siehe Konsistenz).
Integritätsbedingungen:
Integritätsbedingungen sind Bestimmungen, die eingehalten werden müssen, um
die Korrektheit und die logische Richtigkeit
der Daten zu sichern.
Konsistenz/Inkonsistenz:
Konsistenz (referentielle Integrität) ist die
Übereinstimmung von mehrfach gespeicherten Daten. Werden bei Änderungen
nicht alle mehrfach gespeicherten Daten
geändert, ist der Datenbestand inkonsistent, d.h., es existieren unterschiedliche
Versionsstände der gleichen Daten.
Large Pool:
Durch den Large-Pool kann der Administrator für bestimmte Operationen Speicher
reservieren.
83
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
IT-Fachbegriff:
Erklärung:
Log-Writer-Prozess (LGWR):
Der LogWriter-Prozess schreibt den Inhalt
des RedoLog-Buffers in die entsprechende
Online-RedoLog-Datei auf der Festplatte.
Dieser Prozess tritt in folgenden Situationen
auf:
- Nach einem „Commit“
- Alle drei Sekunden
- RedoLog-Buffer ist zu einem Drittel gefüllt
- DBW schreibt „Dirty Blocks“ vom Databa
se-Buffer-Cache auf die Festplatte.
Netzwerk-DBS:
Gleichartige Daten werden in Recordsets
abgelegt, die Beziehung zwischen den Daten in Sets. In der grafischen Darstellung
entsteht ein gerichteter Graph, der als
Netzwerk bezeichnet wird.
Normalform (1.-5.):
Zustand, in dem sich ein Datenbankschema
bezüglich der Normalisierung befindet.
Normalisierung:
Methode zur Erreichung einer redundanzfreien Datenspeicherung in den Relationen
eines Datenbankschemas.
Paralleles DBS:
Läuft auf Parallelrechnern oder Multiprozessorsystemen. Die (eigentliche) Parallelarbeit wird durch den von Parallelrechnern
oder die Anwendung paralleler Algorithmen,
die gleichzeitig auf mehreren Prozessoren
ausgeführt werden (z.B. Multiprozessorsystemen), erreicht. Dadurch werden die Antwortzeiten bei Datenbank-Anfragen und
Transaktionen verkürzt.
Prozess-Monitor (PMON):
Der Prozess Monitor gibt alle Ressourcen,
Sperren und Transaktionen von abgebrochenen oder fehlgeschlagenen Benutzprozessen wieder frei.
Redundanz:
Mehrfache Speicherung von gleichen Daten
an verschiedenen Orten. Dadurch erhöht
sich das Risiko inkonsistenter Daten.
84
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
IT-Fachbegriff:
Erklärung:
Redo-Log-Buffer:
RedoLog-Verkehr wird primär beim Einfügen, Ändern oder Löschen von Daten erzeugt. RedoLog-Einträge werden durch
einen Prozess namens LGWR vom Cache
in die RedoLog-Dateien geschrieben.
Relation:
Geordnete Menge von Attributen, deren
Ausprägung die Tupel sind; eine Relation
kann in Form einer Tabelle notiert werden.
Die Begriffe Relation und Tabelle werden
häufig synonym gebraucht.
Relationale Datenbank:
Daten werden in Relationen organisiert, die
mit Daten anderer Relationen in Beziehung
stehen können. Eine Relation kann sowohl
Objekte (Entitäten) als auch Beziehungen
beinhalten.
Relationales DBS:
Die Daten werden in Tabellenform gespeichert. Zwischen den Tabellen können Beziehungen (Relationen) definiert werden.
Die meist verwendete Abfragesprache ist
SQL.
Relationship:
Beziehung zwischen zwei Entities.
Repository:
Wie ein Data Dictionary aufgebaut, speichert aber noch zusätzliche Informationen,
z.B. über Benutzer und Anwenderprogramme.
Schlüsselkandidat:
Zweidimensionale Konstruktion aus Spalten
und Zeilen zum Speichern der Datensätze
(Tupel).
Sekundärschlüssel:
Zusätzlicher Schlüssel, um Redundanzen in
den Datensätzen einer Tabelle zu vermeiden.
Shared Pool (Library-Cache):
Im Shared Pool (Library-Cache) befinden
sich
kürzlich
ausgeführte
SQLAnweisungen, Prozeduren und Ausführungspäne. Diese werden zum schnelleren
Zugriff dort zwischengespeichert.
85
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
IT-Fachbegriff:
Erklärung:
Sicht:
Ausschnitt (Teilmenge) einer Datenbank,
der die für eine Anwendung relevante Daten enthält.
Strings:
Zeichenketten: In einer Datenbank werden
Textinformationen als Zeichenketten gespeichert, Z.B. in Datenfeldern vom Datentyp VARCHAR.
System-Monitor (SMON):
Der SystemMonitor-Prozess ist primär verantwortlich für Instance-Recovery und
Crash-Recovery. Er stellt sicher, dass nach
einem Absturz einer Datenbank diese Datenbank beim nächsten Hochfahren wieder
in einen konsistenten Zustand überführt
wird.
Tabelle:
Stellt eine definierte Struktur für das Speichern von Daten zur Verfügung.
Transaktion:
Als Transaktion werden mehrere aufeinanderfolgende Lese- und Schreibzugriffe auf
eine Datenbank bezeichnet, die in einem
logischen Zusammenhang stehen. Diese
werden entweder vollständig oder gar nicht
ausgeführt.
Verteiltes DBS:
Die Datenbanken sind auf geografisch getrennt stehende Rechner verteilt. Auf jedem
dieser Rechner läuft das DBMS, welches
über Mechanismen zur Zusammenführung
der verteilten Datenbank verfügt. Es gibt
homogen und heterogen verteilte DBS.
Zentralisiertes DBS:
Die Datenbankanwendungen laufen auf
einem zentralen Rechner. Die Terminals
arbeiten über ein Netzwerk mit den Anwendungsprogrammen.
86
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
15.2
Wichtige SQL – Befehle
Aktion:
Syntax:
Bedingungen logisch verknüpfen
SELECT … WHERE bedingung1
AND / OR bedingung2 …;
Bedingungen negieren
SELECT … WHERE NOT bedingung;
Benutzer bestimmte Rechte gewähren
(ANY)
GRANT rechteliste ANY TABLE TO user;
Benutzer Administratorrechte zuweisen
(WITH ADMIN OPTION)
GRANT rechteliste ANY TABLE TO user
WITH ADMIN OPTION;
Benutzerrechte entziehen (REVOKE)
REVOKE rechteliste ANY TABLE TO user;
Benutzerrechte weitergeben
(WITH GRANT OPTION)
GRANT rechteliste
ON schema_user1.tabelle
TO user2 WITH GRANT OPTION;
Benutzern Objekt-Privilegien entziehen
REVOKE rechteliste ON schema.user1
FROM user2;
Daten einer Abfrage gruppieren
SELECT … ORDER BY datenfeldname;
Daten einer Abfrage mit einer
Bedingung definieren
SELECT … GROUP BY datenfeldname
HAVING bedingung;
Daten einer Abfrage sortieren
SELECT … ORDER BY datenfeldname;
Datenabfrage ausführen,
die alle Datensätze einer Tabelle liefert
SELECT * FROM tabellenname;
Datenabfrage mit Suchbedingung
definieren
SELECT * FROM tabellenname
WHERE bedingung;
Datenabfrage mit Mustervergleich
SELECT …
WHERE datenfeld BETWEEN
untergrenze AND obergrenze;
Datenfelder in einer Sicht benennen
CREATE VIEW viewname
(feldname1, …) AS SELECT …;
87
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Aktion:
Syntax:
Datenbank NOMOUNT-Status
STARTUP NOMOUNT;
(Start-Datei gelesen, Control-Datei identifiziert, SGA initialisiert und Hintergrundprozesse gestartet)
Datenbank angehängt – MOUNT-Status
STARTUP MOUNT;
(Control-Dateien geöffnet und die Speicherorte der Datendateien sowie OnlineRedo-Log-Dateien gelesen)
STARTUP OPEN;
Datenbank geöffnet – OPEN-Status
(Datendateien und Redo-Log-Dateien
geöffnet und Sperren gesetzt)
Datenbank herunterfahren:
SHUTDOWN NORMAL;
SHUTDOWN NORMAL – Oracle wartet
bis sich alle Benutzer abmelden.
Datenbank herunterfahren:
SHUTDOWN IMMEDIATE – Oracle
beendet alle Benutzersitzungen
(empfohlen !!!)
SHUTDOWN IMMEDIATE;
Datenbank herunterfahren:
SHUTDOWN TRANSACTIONAL;
SHUTDOWN TRANSACTIONAL –
Oracle wartet bei Transaktionen auf
„commit“ bzw. „rollback“.
SHUTDOWN ABORT;
Datenbank herunterfahren:
SUTDOWN ABORT – Oracle beendet
alles sofort ohne Speicherung. Nach
dem Neustart ist eine InstanceRecovery notwendig (nur Notfall !!!)
Datensatz einfügen
INSERT INTO tabellenname
(datenfeldliste) VALUES (wertliste);
Datensätze aktualisieren
UPDATE tabellenname
SET feld=wert, WHERE bedingung;
Datensätze mit einer Unterfrage einfügen
INSERT INTO tabellenname1
(datenfelder)
SELECT datenfelder
FROM tabellenname2
WHERE bedingung;
88
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Aktion:
Syntax:
Datensätze löschen
DELETE FROM tabellenname
WHERE bedingung;
Datensätze (referenzierte) beim
Löschen einschließen
FOREIGN KEY (datenfeldname)
REFERENCES tabellenname
(datenfeldname) ON DELETE CASCASE;
Datensätze über eine Sicht ändern
UPDATE viewname SET …;
Datensätze über eine Sicht erstellen
INSERT INTO viewname;
Datensätze über eine Sicht löschen
DELETE FROM viewname …;
Eingabe eines Wortes für ein Datenfeld
Erzwingen
NOT NULL
Ersatzname für eine Tabelle definieren
tabellenname AS ersatzname
Fremdschlüssel erstellen
CREATE TABLE tabellenname
ADD CONSTRAINT constraintname
FOREIGN KEY (datenfeldname)
REFERENCES tabellenname
(datenfeldname));
Fremdschlüssel nachträglich hinzufügen
ALTER TABLE tabellenname
ADD CONSTRAINT constraintname
FOREIGN KEY …;
Fremdschlüssel löschen
ALTER TABLE tabellenname
DROP CONSTRAINT constraintname;
Full-Join
SELECT datenfelder
FROM tabelle1, tabelle2;
Gültigkeitsbedingung definieren
CONSTRAINT name CHECK (bedingung);
Index erstellen
CREATE INDEX indexname
ON tabellenname (datenfeldname);
Index löschen
DROP INDEX indexname
ON tabellenname;
Inner-Join (Equi-Join)
SELECT datenfelder
FROM tabelle1, INNER JOIN tabelle2
ON tabelle1.datenfeld = tabelle2.datenfeld
[WHERE …];
89
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Aktion:
Syntax:
Natural-Join
SELECT DISTINCT datenfelder
FROM tabelle1 INNER JOIN tabelle2
ON bedingung;
Outer-Join von links erstellen
SELECT datenfelder FROM tabelle1
LEFT OUTER JOIN tabelle2
ON bedingung;
Outer-Join von rechts erstellen
SELECT datenfelder FROM tabelle1
RIGHT OUTER JOIN tabelle2
ON bedingung;
Primärschlüssel definieren
PRIMARY KEY (datenfeld);
Primärschlüssel erstellen
CREATE TABLE (…
PRIMARY KEY (datenfeldname));
Primärschlüssel nachträglich hinzufügen
ALTER TABLE tabellenname
ADD CONSTRAINT constraintname
PRIMARY KEY (datenfeldname);
Primärschlüssel löschen
ALTER TABLE tabellenname
DROP CONSTRAINT constraintname;
Self-Join (eine Tabelle mit sich selbst
verknüpfen)
SELECT
datenfelder_alt AS datenfelder_neu
FROM tabelle.datenfeld
WHERE bedingung;
Sicht erstellen
CREATE VIEW viewname AS SELECT …;
Sicht mit Datenüberprüfung erstellen
CREATE VIEW viewname
AS SELECT … WITH CHECK OPTION;
Sicht löschen
DROP VIEW viewname;
Standardwert festlegen
DEFAULT wert;
Tablespace erstellen
CREATE TABLESPACE tablespacename
DATAFILE ’c:\pfadangabe\tablespace.dbf’
SIZE größe_in_mb ONLINE;
Tablespace löschen
DROP TABLESPACE tablespacename;
Tablespace OFFLINE setzen
ALTER TABLESPACE tablespacename
OFFLINE;
90
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Tablespace ONLINE setzen
ALTER TABLESPACE tablespacename
ONLINE;
Tabelle ändern
ALTER TABLE tabellenname;
Tabelle erstellen
CREATE TABLE tabellenname
(datenfelddefinition);
Tabelle löschen
DROP TABLE tabellenname;
Wertebereich prüfen
SELECT …
WHERE datenfeld BETWEEN
untergrenze AND obergrenze;
Werteliste prüfen
SELECT …
WHERE datenfeld IN (werteliste):
15.3
Literaturhinweise
FRÖHLICH, L., Oracle9i. Administration. Data Warehouse. Hochverfügbarkeit, München:
Markt + Technik 2003.
HELD, A., Oracle 10g Hochverfügbarkeit. Die ausfallsichere Datenbank mit RAC, Data
Guard und Flashback, München: Addison-Wesley 2005.
HERDT-VERLAG (Hrsg.), SQL – Grundlagen und Datenbankdesign, Nackenheim 2003.
KERSKEN, S., Kompendium der Informatik, Bonn: Galileo Press GmbH 2003.
MICROSOFT PRESS DEUTSCHLAND (Hrsg.), Microsoft SQL Server 2000 Systemverwaltung
(MCSE 70-228), Unterschleißheim 2002.
NIEMIEC, R., Oracle9i Performance Tuning Tips & Techniques, California: McGraw-Hill
2003.
RAYMANS, H.-G., SQL, München: Addison-Wesley 2002.
91
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
16
Lösungen zu den Übungen
Kapitel 2:
1)
Einführung Datenbanken
(Übung)
Welche Datenbanktypen kennen Sie?
Wodurch sind sie gekennzeichnet?
•
Hierarchische Datenbanken:
„ Zwischen den Datensätzen besteht eine untergeordnete Rangfolge.
„ Dieses System dient der Verarbeitung von Datensätzen,
die eine unterschiedliche Länge besitzen können.
•
Netzwerkdatenbanken:
„ Zwischen den Tabellen besteht eine 1:n-Beziehung.
„ Relationen werden als SETS bezeichnet.
•
Relationale Datenbanken:
„ Daten werden in Tabellen (Relationen) gespeichert, zwischen denen Beziehungen (Integritäten) bestehen.
„ SQL stellt das Hauptbindeglied zwischen den Daten und den Resultaten dar.
2)
Nennen Sie die Namen der 3 Ebenen des 3-Ebenen-Modells, und geben Sie an,
was in jeder Ebene dargestellt wird.
•
3-Ebenen-Modell
„ Externe Ebene (Data Manipulation Language, Veränderung der Daten
Ö schreiben, löschen, hinzufügen).
„ Konzeptionelle Ebene (Data Definition Language, Beschreibung der Daten
und ihrer logischen Zusammenhänge: „Ausschnitt aus der realen Welt“).
„ Interne Ebene (Data Administration Language, beschreibt Organisation der
Daten auf Speichermedium und Zugriffsmöglichkeiten auf die Daten;
Zugriffsrechte werden vergeben).
3)
Was ist ein Datenbankmanagementsystem (DBMS)?
„ Ein DBMS ist ein Softwarepaket, welches die Verwaltung der Datenbank
übernimmt und alle Zugriffe darauf regelt.
92
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
4)
Was ist ein Data Dictionary, und wozu wird es benötigt?
„ Data Dictionary (speichert Informationen über die Daten der DB und deren
Verwaltung).
5)
Welche physischen Datenbankarchitekturen kennen Sie?
„
„
„
„
„
•
Zentralisiertes Datenbanksystem (DBS)
Verteiltes DBS
Client-Server DBS
Objektorientiertes DBS
Paralleles DBS
Erläutern Sie eine Datenbankarchitektur!
„ Objektorientiertes DBS
† Es werden keine Daten, sondern Objekte gespeichert,
die wiederum Eigenschaften und Methoden besitzen.
Kapitel 3:
1)
Datenbankentwurf
Welche Phasen werden beim Entwurf von Datenbanken durchlaufen?
„
„
„
„
„
„
2)
(Übung)
Anforderungsanalyse
Konzeptioneller Entwurf
Logischer Entwurf
Physischer Entwurf / Implementierung
Test und Validation
Anwendung und Wartung
Wozu dient das Entity-Relationship-Modell?
„ Das Entity-Relationship-Modell (kurz ER-Modell oder ERM) ist das bekannteste und meistverwendete grafische Hilfs- mittel für den Datenbankentwurf.
„ Es ermöglicht, konzeptionelle Entwürfe einer Datenbank auf leicht verständliche Art grafisch darzustellen.
93
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Kapitel 4:
1)
Relationales Datenbankmodell
(Übung)
Erstellen Sie für eine CD-Sammlung eine Datenbank. Gehen Sie folgendermaßen
vor:
„ Erstellen Sie ein ER-Diagramm
„ Wenden Sie die Normalformen an (bis zur 3. Normalform)
•
Um die Datenbank aufzubauen, steht Ihnen die folgende Feldliste zur Verfügung
(Sänger bedeutet der Interpret oder der Gruppenname; bei einer Gruppe entfällt die
Eingabe des Vornamens):
„ Sängernummer, Name des Sängers, Vorname des Sängers, Bild des Sängers, Bemerkungen zum Sänger, CD-Nummer, Titel der CD, Laufzeit der
CD, Bild des Covers, Liednummer, Name des Liedes, Laufzeit des Lieds,
Managernummer, Name des Managers, Geschlecht des Managers und Adresse des Managers.
94
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
•
Als Regel gilt: Ein Sänger kann einen oder keinen Manager haben. Ein Manager
kann jedoch mehrere Sänger beraten.
•
Ziel:
„ Anomalien beheben.
„ Redundanzen vermeiden.
„ Eine einfache Datenpflege ermöglichen.
•
1. Normalform:
„ Wenn die Relation zweidimensional ist.
„ Wenn sich in jedem Datensatz nur Daten befinden, die zu einem Objekt der
realen Welt gehören.
•
2. Normalform:
„ Eine Relation befindet sich in der zweiten Normalform, wenn jeder NichtSchlüsselfeld vom ganzen Primär-Schlüssel abhängig ist.
„ Die Grundtabelle wird in mehrere Tabellen aufgeteilt, in denen wieder Primärschlüssel vergeben werden.
•
3. Normalform:
„ Eine Tabelle befindet sich in der 3. Normalform, wenn alle Daten- felder nur
von einem Schlüssel abhängig sind und untereinander keine Abhängigkeiten
auftreten.
95
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2)
3)
Welche Aussagen treffen für eine m:n-Beziehung zu?
;
Eine m:n-Beziehung kann in der Praxis nicht erstellt
werden.
…
In einer m:n-Beziehung kann die referentielle Integrität
nicht eingeschaltet werden.
;
Eine m:n-Beziehung liegt vor, wenn zwischen zwei
Entitäten die Primärschlüssel der beiden Tabellen
Mehrfach in der Relation vorkommen.
…
Eine m:n-Beziehung wird in Access oder Oracle
benutzt, um zwei Tabellen zu verknüpfen.
Kennzeichnen Sie die falschen Aussagen!
…
In einer Datenbank werden die Daten in Feldern
Strukturiert abgespeichert.
;
Die referentielle Integrität bedeutet, dass in einem
Feld ein Wert eingegeben werden muss.
…
Ein Standardwert soll die Arbeit erleichtern. Der
Standardwert wird in jeden neuen Datensatz für
ein Feld eingegeben.
96
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
Kapitel 7:
1)
Tabellen einfügen und verwalten
(Übung)
Erstellen Sie eine neue Tabelle „t_artikel“ mit den Datenfeldern „artid“, „artname“
und „artpreis“. Verwenden Sie geeignete Datentypen?
CREATE TABLE t_artikel
(
artid
INT NOT NULL,
artname
VARCHAR (20),
artpreis
VARCHAR (10)
);
2)
Löschen Sie das Datenfeld „artpreis“.
„ Variante 1:
ALTER TABLE t_artikel
DROP COLUMN artpreis ;
„ Variante 2:
ALTER TABLE t_artikel
DROP artpreis ;
3)
Erstellen Sie eine Tabelle „t_personen“ mit den Daten- feldern „persid“, „vorname“
und „nachname“. Verwenden Sie geeignete Datentypen. Für alle Datenfelder soll
dabei eine Eingabe erforderlich sein.
CREATE TABLE t_personen
(
persid
INT NOT NULL,
vorname
VARCHAR NOT NULL,
nachname VARCHAR NOT NULL
);
97
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
4)
Ändern Sie die Tabelle „t_personen“ und fügen Sie ein zusätzliches Datenfeld
„lebenslauf“ hinzu. In dem Feld soll eine größere Datenmenge – z.B. ein Word- /
Bild-Dokument – gespeichert werden können.
ALTER TABLE t_personen
ADD lebenslauf BLOB ;
5)
Fügen Sie ein neues Datenfeld „angestellt_seit“ in die Tabelle „t_personen“ ein. Es
soll ein Datumswert gespeichert werden können.
ALTER TABLE t_personen
ADD angestellt_seit DATE ;
6)
Löschen Sie die Tabellen „t_artikel“ und „t_personen“.
„ Tabelle „t_artikel“:
DROP TABLE t_artikel ;
„ Tabelle „t_personen“:
DROP TABLE t_personen ;
Kapitel 8:
1)
Datenpflege
(Übung)
Erstellen Sie eine neue Tabelle „wappenrolle“ mit den Datenfeldern „name“, „vorname“, „titel“, „wappen“ und „geboren“. Verwenden Sie geeignete Datentypen. Für
alle Datenfelder soll dabei eine Eingabe erforderlich sein.
CREATE TABLE wappenrolle
(
name
VARCHAR2
vorname
VARCHAR2
titel
VARCHAR2
wappen
VARCHAR2
geboren
VARCHAR2
);
98
(20),
(15),
(8),
(30),
(4)
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2)
Fügen Sie folgende Informationen in die Tabelle „wappenrolle“ [Skript, S. 43] ein.
„ Erste Zeile der Tabelle „wappenrolle“, welche man als Datensatz eingeben
muss:
INSERT INTO wappenrolle
(name, vorname, titel, wappen, geboren)
VALUES
(‘v. Furtenbach‘, ‘Franz‘, ‘Freiherr‘,
‘Wellenbalken‘, ‘1880‘) ;
3)
Führen Sie eine einfache Datenabfrage durch, um das erfolgreiche Einfügen der
neuen Datensätze zu überprüfen.
SELECT * FROM wappenrolle ;
4)
Ändern Sie den Titel „Zar“ in „Kaiser“ und das Geburtsdatum „1597“ in „1587“.
„ 1. Schritt:
UPDATE wappenrolle SET titel = ‘Kaiser‘
WHERE name = ‘Romanow‘ ;
„ 2. Schritt:
UPDATE wappenrolle SET geboren = ‘1587‘
WHERE name = ‘Romanow‘ ;17
5)
Löschen Sie den Datensatz des Freiherrn Franz v. Furtenbach.
„ Variante 1:
DELETE FROM wappenrolle
WHERE name = ‘v. Furtenbach‘ ;
„ Variante 2:
DELETE FROM wappenrolle
WHERE wappen = ‘Wellenbalken‘ ;
17
Elegante Lösung: UPDATE wappenrolle SET titel=’Kaiser’, geboren=’1587’ WHERE name=’Romanow’.
99
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
6)
Was bewirkt folgende Anweisung:
INSERT INTO wappenrolle
SELECT * FROM wappenrolle ;
•
7)
Es werden alle vorhandenen Datensätze der Tabelle Wappenrolle noch einmal in
die Tabelle Wappenrolle eingefügt.
Wieviele Datensätze befinden sich jetzt in der Tabelle Wappenrolle?
Löschen Sie anschließend die Tabelle.
„
„
Es befinden sich nun 14 Datensätze in der Tabelle.
Löschen der Tabelle „wappenrolle“:
DROP TABLE wappenrolle ;
Kapitel 9:
1)
Einfache Datenabfragen
(Übung)
Schreiben Sie eine Abfrage, die alle Datensätze der Produkttabelle der „NordwindDatenbank“ mit der Lieferantennummer = 2 und Kategorienummer = 1 liefert.
SELECT * FROM products
WHERE supplierid = 2
AND categoryid = 1 ;
•
Lösung:
„ Es wurden keine Datensätze ausgewählt.
100
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2)
Schreiben Sie eine Abfrage, die alle Produktnamen mit deren Kategorie-ID auflistet.
Dabei soll jeweils folgender Satz ausgegeben werden. Das Produkt X gehört zur
Kategorie Y.
SELECT
' Das Produkt ' || PRODUCTNAME ||
' gehört zur Kategorie ' || CATEGORYID || '. '
FROM products ;
3)
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, die mit „C“, „D“ oder „E“
anfangen.
SELECT productname FROM products
WHERE productname
LIKE ‘C%’
OR productname
LIKE ‘D%’
OR productname LIKE ‘E%‘ ;
4)
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, bei denen der 5. Buchstabe kein „c“ ist.
SELECT productname
FROM products
WHERE productname
NOT LIKE ‘____c%’ ;
101
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
5)
Erstellen Sie eine Abfrage, die Ihnen alle Produkte ausgibt, bei denen der 5. Buchstabe ein „c“ oder „d“ ist. Diese sollen aufsteigend nach dem Produktnamen sortiert
sein.
SELECT productname FROM products
WHERE productname
LIKE ‘____c%‘
OR productname
LIKE ‘____d%’
ORDER BY productname ASC ;
6)
Schreiben Sie eine Abfrage, die Ihnen die Spalte Ort der Kundentabelle ausgibt. Es
soll keine Stadt mehrmals auftauchen.
SELECT DISTINCT city FROM customers ;
Kapitel 11: Abfragen in Funktionen
1)
(Übung)
Listen Sie alle Lieferanten auf, die mehr als 5 Produkte liefern!
SELECT supplierid
FROM products
GROUP BY supplierid
HAVING count(productname) > 5 ;
•
Lösung:
„ Es wurden keine Zeilen ausgewählt.
102
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2)
Listen Sie die Lieferanten mit Ihren jeweils teuersten Produkt auf. Es sollen nur die
Lieferanten angezeigt werden, bei denen das teuerste Produkt billiger als
10,- EURO ist!
SELECT supplierid, max(unitprice) 18
FROM products
GROUP BY supplierid
HAVING max(unitprice) < 10 ;
3)
Listen Sie den Nachnamen des Mitarbeiters auf, der am längsten angestellt war!
SELECT lastname, hiredate
FROM employees
WHERE hiredate IN
(
SELECT min(hiredate)
FROM employees
);
Kapitel 12: Datenabfragen über mehrere Tabellen (Joins)
1)
(Übung)
Welche Kunden „contactname“ haben Produkte der Kategorie „beverages“ bestellt?
Benutzen Sie NATURAL JOINs, soweit es möglich ist.
SELECT DISTINCT contactname
FROM customers
NATURAL JOIN
NATURAL JOIN
NATURAL JOIN
NATURAL JOIN
orders
order_details
products
categories
WHERE lower(categoryname) = 'beverages‘ ;
18
Oracle akzeptiert nur zwei Abfragefelder bei dieser Art von Syntax mit GROUP BY und HAVING.
103
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
2)
Welcher Kunde hat noch nie etwas bestellt? Benutzen Sie einen OUTER JOIN.
SELECT DISTINCT contactname, orderid
FROM customers c
LEFT JOIN orders o
ON c.customerid = o.customerid
WHERE orderid IS NULL ;
3)
Welche Kunden wurden bisher von Speedy Express beliefert? Benutzen Sie INNER
JOIN und NATURAL JOIN, soweit es möglich ist. Erstellen Sie eine Hilfs-View!
„ Erstellung einer Sicht (VIEW) – nach der Abfrage wieder löschen:
CREATE VIEW shippers_view
AS SELECT shipperid AS shipvia, companyname
AS sh_companyname
FROM shippers;
„ Abfrage über die erstellte Sicht (VIEW):
SELECT DISTINCT companyname, sh_companyname
FROM customers
NATURAL JOIN orders
NATURAL JOIN shippers_view
WHERE lower(sh_companyname) = 'speedy express‘ ;
4)
Erstellen Sie eine Abfrage, die Ihnen rechts den Angestellten und links den Vorgesetzten ausgibt. Der Chef sollte in der Spalte Vorgesetzter „BOSS“ zu stehen haben.
SELECT e.lastname Mitarbeiter,
nvl(boss.lastname,'Boss') AS Chef
FROM employees e
LEFT JOIN employees boss
ON e.reportsto = boss.employeeid ;
104
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
5)
Schreiben Sie eine Abfrage, die Ihnen die Kontaktnamen der Lieferanten ausgibt,
die Produkte der Kategorie 1 oder 2 oder 3 liefern!
SELECT s.contactname, p.productname
FROM products p, suppliers s
WHERE p.categoryid IN ('1','2','3') ;
6)
Schreiben Sie eine Abfrage, die Ihnen die Kundennamen, die entsprechenden
Bestellungnummern „orderid“ und den Namen des Angestellten „employees“, der
die Bestellung bearbeitet hat, ausgibt. Es soll nach dem „contactname“ geordnet
sein!
SELECT s.contactname, o.orderid, e.lastname
FROM customers c, oders o, employees e
WHERE e.employeeid = o.employeeid
AND o.customerid = c.customerid ;
7)
Was machen folgende Abfragen?
„ SELECT lastname
FROM employees GROUP BY city ;
† Fehler: Falsche Gruppierung, da die Spalte „lastname“ kein Primarykey ist und somit etwas nicht eindeutig identifiziert wird.
„ SELECT discontinued, sum(unitprice*unitsinstock)
FROM products GROUP BY discontinued ;
† Lösung: Anzeige des Warenbestandes im Warenlager!
„ SELECT sum(unitprice*unitsinstock)
FROM products GROUP BY supplierid ;
† Lösung: Syntaktisch richtig aber unlogisch (sum)!
105
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
17
Stichwortverzeichnis
1
DBMS ..................................................... 7, 12
DCL ........................................................ 31
DDL ........................................................ 31
DML ........................................................ 31
DQL ........................................................ 31
1:n-Beziehung ..................................... 9, 19, 24
3
3-Ebenen-Modell ................................ 11, 89
E
Ebene ..................................................... 11
- externe ........................................... 11
- konzeptionelle ................................ 11
- interne ............................................ 11
Eingabeaufforderung .............................. 33
Elementprüfung ...................................... 49
ENTITÄT ................................................. 16
Entitätsmengen ...................................... 24
ENTITY-RELATIONSHIP-MODELL ....... 16
Entwurfsphasen ...................................... 14
A
Abfragesprachen ................................ 8, 31
Aggregatfunktion ................................. 59, 80
Attribute .............................................. 23
B
Bedingungen .......................................
Berechnungen ....................................
BEZIEHUNGEN ..................................
- 1:n-Beziehung ............................
- 1:1-Beziehung ............................
- n:m-Beziehung ...........................
- is-a-Beziehung ...........................
48
46
10, 18
9, 19, 24
19, 24
19, 26
26
G
Generalisierung ...................................... 26
Gültigkeitsprüfung .................................. 38
Gruppieren .............................................. 51
C
H
CONSTRAINTS .................................. 54
Herunterfahren von Oracle ..................... 34
D
I
DATA DICTIONARY ...........................
Datenabfragen ....................................
Datenbankarchitektur ..........................
- zentralisiert .................................
- verteilte .......................................
- Client-Server ..............................
- parallele ......................................
Datenbank-Management-System .......
Datenbanken ......................................
- Hierarchische .............................
- Netzwerk ....................................
- Relationale .................................
Datenbankentwurf ...............................
Datenbestand .....................................
Datenintegrität ....................................
Datenschutz ........................................
Datensicherheit ...................................
Datentypen .........................................
Datumswerte .......................................
7, 12
45
12
12
13
13
14
7, 12
7
9
9
10
20
7, 62
8
7, 8, 12
8
38
38
Index ....................................................... 23
Indizes .................................................... 54, 57
Informationsfluss .................................... 8
Installation .............................................. 31
Integritäten .............................................. 10
J
JOINS ..................................................... 63
- Cross-Join ...................................... 64
- Equi-Join ........................................ 65, 68
- Full-Join ......................................... 64, 67
- Inner-Join ....................................... 65, 68
- Natural-Join ................................... 63, 69
- Outer-Join ...................................... 70
- Self-Join ......................................... 64, 71
- Semi-Join ....................................... 64
- Theta-Join ...................................... 65, 70
106
o9i_einf.pdf
Oracle 9i – Einführung
Timo Meyer © RRZN 2004-2005
K
S
KARDINALITÄTEN ............................. 18
KONSISTENZ ..................................... 8
Schema .................................................. 10
SCHLÜSSEL .......................................... 23
- Fremdschlüssel .............................. 23, 56
- Primärschlüssel ............................. 17, 54
- Sekundärschlüssel ......................... 23
- SETS ............................................. 9
SHUTDOWN .......................................... 35
- ABORT .......................................... 35
- IMMEDIATE ................................... 35
- NORMAL ....................................... 35
- TRANSACTIONAL ......................... 35
Sicht ........................................................ 11
Sichten .................................................... 74
Sortieren ................................................. 52
Spezialisierung ....................................... 26
SQL*Plus Worksheet .............................. 32
Startvorgang von Oracle ........................ 34
STARTUP ............................................... 34
- MOUNT .......................................... 34
- NOMOUNT .................................... 34
- OPEN ............................................. 34
Structured Query Language (SQL) ........ 8, 31
L
Lebenszyklus ......................................
- Konzeptioneller Entwurf .............
- Logischer Entwurf ......................
- Physischer Entwurf ....................
- Test ............................................
- Anwendung und Wartung ..........
Logbuch ..............................................
Logische Operatoren ..........................
15
15
15
15
15
15
12
50
M
Mengenoperatoren .............................
- Vereinigungsmenge ...................
- Schnittmenge .............................
- Differenzmenge ..........................
Mustervergleich ..................................
62
62
62
62
50
T
N
NORMALFORM ..................................
- 1. Normalform ............................
- 2. Normalform ............................
- 3. Normalform ............................
- 4. Normalform ............................
- 5. Normalform ............................
Normalisierungsprozess .....................
Tabellen .................................................. 37, 71
TABLESPACES ..................................... 36
Typen ...................................................... 21, 86
28
28
28
29
29
29
27
V
Validation ................................................ 15
Vergleichsoperatoren ............................. 48
Verknüpfungen ....................................... 62, 65
VIEWS .................................................... 74
P
Profile .................................................. 76
Projektverwaltung ............................... 20
Protokollierung .................................... 8
Z
Zugriffsrechte .......................................... 76, 78
R
Rechtevergabe ................................... 8
REDUNDANZ ..................................... 8
RELATIONEN ..................................... 10, 23
107
o9i_einf.pdf
Herunterladen