• Keine Ergebnisse gefunden

Einf ¨uhrung in SQL mit Oracle

N/A
N/A
Protected

Academic year: 2021

Aktie "Einf ¨uhrung in SQL mit Oracle"

Copied!
27
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Seminar

Einf ¨uhrung in SQL mit Oracle

von

Prof. Dr. Rainer Schwenkert Hochschule M ¨unchen

(2)

Themenbereiche

• SQL-Historie

• Wichtige DDL- und DML-Anweisungen

• Der Select-Befehl

• Spezialthemen

(3)

Die standardisierte Sprache SQL

Was ist SQL?

SQL ist eine Abk ¨urzung f ¨ur Structured Query Language.

SQL ist eine Norm-Datenbanksprache (ANSI und ISO) zur Definition, Kontrol- le, Abfrage und Manipulation von Daten in (objekt)relationalen Datenbanksyste- men.

Durch seine Rolle als Quasi-Standard ist SQL sehr stark verbreitet, da eine gewisse Unabh ¨angigkeit vom benutzten Datenbankmanagementsystem erzielt werden kann.

SQL wurde Mitte der 70er Jahre im Rahmen des Projekts “System R“ (ers- te lauff ¨ahige relationale Datenbank) von IBM unter der Abk ¨urzung SEQUEL (Structured English Query Language) entwickelt.

(4)

Die standardisierte Sprache SQL

Historische Entwicklung des Standards

• 1987: SQL0 ist erster Standard ¨uberhaupt, ohne Konzepte zur Integrit ¨atssi- cherung;

• 1989: SQL1 mit Integrit ¨atserweiterungen, jedoch viele Schw ¨achen bei pra- xisrelevanten Aufgabenstellungen;

• 1992: SQL2 bzw. SQL-92 genannt, deutliche Verbesserung von SQL1;

• 1999: SQL3 bzw. SQL-99 Erweiterung von SQL2 um prozedurale Elemente und objektorientierte Ans ¨atze;

• 2003: SQL4 bzw. SQL:2003: Integration von XML in SQL;

(5)

Die standardisierte Sprache SQL

Der SQL3-Standard Typischer heutiger Dialekt in Produkten:

SQL3 + propriet ¨are Erg ¨anzungen

Der SQL3-Standard trat am 15. November 1999 in Kraft. SQL3 definiert einen Sprachkern, das sog. Core-SQL als minimalen Sprachumfang. Diesen Kern muss jede standardkonforme Implementierung von SQL3 umfassen.

Wir werden in diesem Seminar wesentliche Aspekte von Core-SQL kennen ler- nen, dar ¨uber hinaus einige wichtige Oracle-Besonderheiten.

(6)

Die standardisierte Sprache SQL

Unterschied von SQL zu Programmiersprachen SQL ist im Gegensatz zu g ¨angigen Programmiersprachen

mengenorientiert: das Ergebnis einer Abfrage ist stets eine Menge von Tupeln (diese kann auch leer sein oder aus nur einem Element bestehen), also wieder eine Tabelle;

deskriptiv: der Anwender formuliert lediglich die gew ¨unschten Eigenschaf- ten der Datens ¨atze (logische Beschreibung) und erh ¨alt eine Antwort ohne Kenntnis der inneren Struktur der Datenbank.

(7)

Die standardisierte Sprache SQL

Nachteile von SQL

• Verschiedene DBS-Hersteller verwenden verschiedene Standards und zus ¨atz- lich eigene Erweiterungen.

• Integrit ¨atspr ¨ufungen sind in den meisten SQL-Implementierungen nicht in ausreichendem Umfang realisiert.

• SQL ist redundant, d.h. ein und dieselbe Abfrage l ¨asst sich oft auf mehrere Weisen formulieren, ohne dass der Anwender weiß, welche Art die schnel- lere, effektivere ist.

• SQL l ¨aßt das Auftreten von sog. uneigentlichen Relationen (Multisets), d.h.

Tabellen mit mehrfachen Tupeln (Duplikaten) zu. Dadurch wird die Effizienz der Abfrageoptimierung gemindert.

(8)

Die standardisierte Sprache SQL

Vereinbarungen zur Syntax-Beschreibung

Zun ¨achst wird immer die allgemeine Form der Kommandos vorgestellt. Dann bauen wir eine Beispieldatenbank auf. Dabei werden die Befehle strukturiert und

¨ubersichtlich angegeben, obwohl SQL formatfrei ist und nicht zwischen Groß- und Kleinschreibung unterscheidet.

Bei der Syntaxdefinition werden wir Schl ¨usselworte groß schreiben, benutzer- spezifische Angaben hingegen klein.

Optionale Teilausdr ¨ucke sind in eckige Klammern ([. . .]) gesetzt, diese Klam- mern sind kein Bestandteil der SQL-Syntax.

Der senkrechte Strich | wird zur Trennung von Alternativen verwendet.

(9)

Die DDL - Data Definition Language

Die DDL - Aufbau einer Datenbank

Wir wollen hier die DDL-Befehlsklasse von SQL, zu der die Befehle

• CREATE/DROP TABLE: Erzeugen/L ¨oschen von Tabellen

• ALTER TABLE: ¨Anderung des Tabellenaufbaus

• CREATE/DROP INDEX: Index f ¨ur Tabellen anlegen/l ¨oschen

• CREATE/DROP VIEW: Erzeugen/L ¨oschen einer virtuellen Tabelle (Sicht) geh ¨oren, vorstellen.

(10)

Die DDL - Data Definition Language

Die Beispieldatenbank

ABT

ABTNR NAME

AN Ausland Nord AS Ausland S ¨ud AW Ausland West

ABTL

ABTNR PNR

AN 111

AS 222

AW 333

PERS

PNR NAME VORNAME ABTNR GEHALT

100 Stocker Manfred AN 3

500 M ¨uller Andreas AW 4

111 Meier Stefan AN 5

102 Huber Herbert AS 7

222 Stoer Michael AS 3

333 Wenzel Ludger AW 6

112 J ¨ager Heinz AN 5

444 M ¨uller Stefan AW 6

(11)

Die DDL - Data Definition Language

Die Beispieldatenbank

PKFZZ

PNR KFZNR FAEHIGKEIT

100 1 gut

100 2 mittel

100 3 mittel

500 1 schlecht

111 2 mittel

111 3 gut

102 1 schlecht

222 1 gut

333 2 gut

112 3 schlecht

KFZ

KFZNR NAME

1 LKW

2 Kran

3 Bagger

(12)

Die DDL - Data Definition Language

Definition von Tabellen

F ¨ur jede in die Datenbank aufzunehmende Tabelle muss nun eine Tabelle er- zeugt werden:

CREATE TABLE Tabellenname

(Spaltenname_1 Datentyp_1, Spaltenname_2 Datentyp_2,

...

Spaltenname_n Datentyp_n);

(13)

Die DDL - Data Definition Language

Definition von Tabellen – Datentypen Die wichtigsten standardisierten SQL-Datentypen sind:

ANSI-Datentyp Erl ¨auterung Oracle-Datentyp

SMALLINT ganze Zahl mit Vorzeichen (klein)

INT,INTEGER ganze Zahl mit Vorzeichen NUMBER(38)

DEC[IMAL](m,n) Dezimalzahl mit mindestens m Stellen,

davon n Nachkommastellen NUMBER(n,m) NUMERIC(m,n) Dezimalzahl mit exakt m Stellen,

davon n Nachkommastellen NUMBER(n,m) CHAR[ACTER](n) Zeichenkette (String) mit fester L ¨ange n CHAR(n)

CHAR[ACTER] VARYING(n) Zeichenkette (String) mit variabler L ¨ange bis n VARCHAR2(n)

DATE Datum (JJJJ-MM-TT) DATE

(14)

Die DDL - Data Definition Language

Definition der Beispieldatenbank

CREATE TABLE Abt CREATE TABLE Abtl (Abtnr CHAR(2), (Abtnr CHAR(2),

Name VARCHAR2(14)); Pnr NUMBER(4));

CREATE TABLE Pers CREATE TABLE Pkfzz

(Pnr NUMBER(4), (Pnr NUMBER(4),

Name CHAR(14), Kfznr NUMBER(2), Vorname CHAR(10), Faehigkeit CHAR(8));

Abtnr CHAR(2));

CREATE TABLE Kfz

(Kfznr NUMBER(2),

Name VARCHAR2(6));

(15)

Die DDL - Data Definition Language

Modifikation von Tabellen ALTER TABLE Tabellenname

ADD|DROP (Spaltenname_1 Datentyp_1, Spaltenname_2 Datentyp_2, ...

Spaltenname_n Datentyp_n);

Unsere Verbesserung lautet nun:

ALTER TABLE Pers

ADD (Gehalt NUMBER(1));

Steht im ALTER-Befehl anstelle der ADD- eine DROP-Klausel, so werden die dort spezifizierten Spalten gel ¨oscht.

(16)

Die DDL - Data Definition Language

Modifikation von Tabellen ALTER TABLE Tabellenname

MODIFY (Spaltenname_1 Datentyp_1, ...

Spaltenname_n Datentyp_n);

• Datentyp ¨anderungen (z.B. NUMBER zu CHAR(n)) sind nur erlaubt falls die betreffende Spalte leer ist.

• Anderung der L ¨ange von VARCHAR2-Spalten ist jederzeit m ¨oglich.¨ ALTER TABLE Kfz

MODIFY (Name VARCHAR2(8));

(17)

Die DDL - Data Definition Language

Definition eines Index

Ein Index ist eine physikalische Zugriffsstruktur. Er erleichtert den Zugriff auf Zeilen ¨uber Bedingungen, welche die indexierten Attribute betreffen.

CREATE [UNIQUE] INDEX Indexname ON Tabellenname

(Spaltenname_1 [ASC|DESC], ...

Spaltenname_n [ASC|DESC]);

• Das Befehlswort UNIQUE erstellt einen eindeutigen Index. Eindeutigkeit wird stets vom System gepr ¨uft (eventl. werden Einf ¨uge- bzw. ¨Anderungsvorg ¨ange nicht ausgef ¨uhrt.

• ASC bzw. DESC legen die Sortierreihenfolge (auf- bzw. absteigend) fest, keine Angabe entspricht der Standardvorgabe ASC.

(18)

Die DDL - Data Definition Language

Definition eines Index

Wir indexieren nun die Personaltabelle mit einem Index “Persnr“ (aufsteigend sortiert):

CREATE UNIQUE INDEX Persnr ON Pers (Pnr ASC);

Da die Pflege eines Index aufwendig ist (Updates der Basisrelation, Speicherbe- darf), sollte man den Index l ¨oschen, sobald er nicht mehr ben ¨otigt wird:

DROP INDEX Persnr;

(19)

Die DML - Data Manipulation Language

Die DML - Datenbankabfragen und -manipulationen Zur DML-Befehlsklasse von SQL geh ¨oren die folgenden Befehle:

• SELECT: Tabellen abfragen

• DELETE: Datens ¨atze (Zeilen) einer Tabelle l ¨oschen

• INSERT: Datens ¨atze (Zeilen) in eine Tabelle einf ¨ugen

• UPDATE: Daten (Zeilen, Spaltenwerte) in einer Tabelle ver ¨andern

Beim Abfragen von Tabellen werden nat ¨urlich keine Daten manipuliert. Dennoch z ¨ahlt der SELECT-Befehl zur DML.

(20)

Die DML - Data Manipulation Language

Der INSERT-Befehl – Eingabe von Tabellenzeilen INSERT INTO Tabellenname

[(Spaltenname_1, Spaltenname_2, ..., Spaltenname_n)]

VALUES

(Wert_1, Wert_2, ..., Wert_n);

• Wird die bei der Tabellendefinition angegebene Spaltenreihenfolge einge- halten, so kann die Aufz ¨ahlung der Spaltennamen entfallen.

• Die Reihenfolge der Eingabewerte muss der vereinbarten Spaltenreihenfol- ge entsprechen.

• Alphanumerische Daten m ¨ussen in einfache Hochkommata (’. . .’) einge- schlossen werden.

(21)

Die DML - Data Manipulation Language

Eingabe von Tabellenzeilen – F ¨ullen der Beispiel-DB INSERT INTO Pers

(Pnr, Vorname, Name, Gehalt, Abtnr) VALUES

(100, ’Manfred’, ’Stocker’, 3, ’AN’);

Bei Einhaltung der Spaltenreihenfolge aus dem CREATE TABLE-Befehl (GE- HALT nach ABTNR) gen ¨ugt auch:

INSERT INTO Pers VALUES

(500, ’M¨uller’, ’Andreas’, ’AW’, 4);

(22)

Die DML - Data Manipulation Language

Der INSERT-Befehl – Zweite Form

Sind die in die Tabelle zu ¨ubernehmenden Daten bereits in anderen Tabellen vorhanden, dann kann auch mit dem SELECT-Befehl gearbeitet werden:

INSERT INTO Tabellenname

[(Spaltenname_1, Spaltenname_2, ..., Spaltenname_n)]

SELECT-Befehl;

Beispiele folgen sp ¨ater. Oracle sieht weitere M ¨oglichkeiten zum Datenimport (SQLLoader, CSV-Import) aus externen Dateien vor.

(23)

Die DML - Data Manipulation Language

Datenbankabfragen – Der SELECT-Befehl Prinzipielle Funktionsweise des SELECT-Befehls:

FROM WHERE SELECT Was ?

Woher ? Wann ?

<Attributliste>

<Tabellenliste>

<Bedingung(en)>

Resultatsattribute angefragte Tabellen Bedingung(en) an die Resultatstupel

(24)

Die DML - Data Manipulation Language

Datenbankabfragen – Der SELECT-Befehl Eine vereinfachte Syntax des SELECT-Befehls lautet:

SELECT [ALL | DISTINCT] Spaltenliste

FROM Tabellenname_1, Tabellenname_2, ..., Tabellenname_n WHERE Bedingung | Subquery

GROUP BY Spaltenliste

HAVING Bedingung | Subquery

ORDER BY Spaltenliste [ASC | DESC];

Die einzelnen Teile des SELECT-Befehls nennt man Klauseln.

(25)

Die DML - Data Manipulation Language

Formale Regeln f ¨ur die Reihenfolge der Klauseln

• Die SELECT-Klausel muss am Anfang stehen, danach kommt die FROM- Klausel.

• Alle Klauseln bis auf die SELECT- und FROM-Klausel k ¨onnen weggelassen werden.

• Die WHERE-Klausel hat stets nach der FROM-Klausel zu erscheinen.

• Die HAVING-Klausel darf nur in Verbindung mit einer vorangestellten GROUP BY-Klausel eingesetzt werden.

• Die ORDER BY-Klausel muss am Ende stehen.

(26)

Die DML - Data Manipulation Language

Der SELECT-Befehl – Einfache Beispiele

Den gesamten Inhalt einer Tabelle (z.B. der Tabelle PKFZZ) kann man sich mit- tels “∗“ in der SELECT-Klausel anzeigen lassen. M ¨ochte man nur bestimmte Spalten der Tabelle sehen, so gibt man deren Namen an:

SELECT * SELECT Pnr, Kfznr FROM Pkfzz; FROM Pkfzz;

Jede Tabelle hat eine Pseudospalte, die intern vom System vergeben wird. Da- mit ist jede Tabellenzeile eindeutig identifizierbar. Die Spalte sieht man nur durch explizite Angabe des Spaltennamens “ROWID“.

SELECT ROWID, Pnr, Kfznr FROM Pkfzz;

(27)

Die DML - Data Manipulation Language

Die WHERE-Klausel an Beispielen

• “Wer arbeitet in der Abteilung AN ?“

SELECT Name, Vorname FROM Pers WHERE Abtnr=’AN’;

• “Suche die Vornamen aller Mitarbeiter, die in AN oder AW arbeiten und nicht Stocker heißen.“

SELECT Vorname FROM Pers

WHERE (Abtnr=’AN’ OR Abtnr=’AW’) AND NOT Name=’Stocker’;

Referenzen

ÄHNLICHE DOKUMENTE

In Zeile 2 wird ange- ordnet, dass diese Datei immer wieder auf reelle Zahlen durchsucht werden

➥ im Bsp.: Eigent ¨umer darf alles, Benutzer der Eigent ¨umer- gruppe darf nicht schreiben, f ¨ur alle anderen kein Zugriff. ➥ Rechte werden bei jedem (relevanten) Zugriff vom BS

Einem Prozeß, der im Besitz einer Ressource ist, kann diese nicht gewaltsam entzogen werden?.

Um eine Gleichzeitigkeit von Aufwachsen ohne Vater und Auftreten einer Teenagerschwangerschaft aufzuzeigen h¨ atte man andere Gruppen miteinander vergleichen m¨ ussen, n¨ amlich

(ii) Sei X 2 die Anzahl der W¨ urfe, bis das zweite verschiedene Wurfergebnis kommt und X 3 die Anzahl der W¨ urfe, bis das dritte verschiedene

Einf¨ uhrung in die

Es wird angenommen, daß sich die Bedienungszeiten durch unabh¨angige, identisch exponentialverteilte Zufallsvariablen beschreiben lassen.. Berechnen Sie n¨aherungsweise

Suche nach geeigneten R¨aumen f¨uhrt auf Sobolev- R¨aume (reflexive Banachr¨aume bzw..