Oracle SQL im Überblick

Werbung
Oracle SQL im Überblick
Editor: Klaus Philipp (Hochschulrechenzentrum Dortmund, E-Mail: [email protected] )
Dies ist ein Überblick über die gängigsten SQL-Kommandos, die dem Leser als
Kurzanleitung dienen soll. Als umfassendes Nachschlagewerk sei das Werk von Koch:
„Oracle 8: Die umfassende Referenz“ empfohlen.
SQL, die Standard-Abfragesprache für Datenbanken
•
•
•
•
•
1. Allgemeines
2. Datentypen und Operatoren
3. Datendefinition (DDL)
4. Datenmanipulation (DML)
5. Der Select-Befehl
1. Allgemeines
Die sogenannte SQL (Structured Query Language) ist eine standardisierte Abfragesprache,
die alle Sprachelemente enthält, die erforderlich sind, um sämtliche Arbeiten, die beim
Umgang mit einer relationalen Datenbank anfallen, auszuführen.
SQL ist relational vollständig und damit gleichmächtig zum Relationenkalkül bzw. zur
Relationenalgebra.
Die gängigen Datenbankmanagementsysteme, zu denen ORACLE, INFORMIX und andere
zählen, bieten den Sprachumfang gemäß dem ANSI-Standard (92), allerdings im allgemeinen
nicht den vollen Sprachumfang.
Jedes System stellt aber auch eigene Erweiterungen zur Verfügung, die bei anderen
Datenbanksystemen nicht vorhanden sind. Diese Erweiterungen sind meistens Architekturbedingt: z. B. CREATE TABLESPACE
In SQL unterscheidet man mehrere Befehlsgruppen:
•
•
•
die zur Datendefinition dienen Diese Befehlsgruppe wird als Data Definition
Language (DDL) bezeichnet.
die zur Manipulation der Daten verwendet werden. Diese Gruppe wird Data
Manipulation Language (DML) genannt.
Eine besondere Bedeutung kommt dem sogenannten SELECT-Kommando zu, mit
dem man Auswertungen fast jeder Komplexität durchführen kann.
Darüber hinaus gibt es Befehlsgruppen, die
•
•
•
die Vergabe von Zugriffsrechten steuern (DCL, Data Control Language),
die Struktur und Größe der Datenbank beeinflussen
zur Transaktionsverarbeitung notwendig sind
•
Daten aus dem UNIX-Filesystem laden bzw. in das Filesystem entladen (ORACLE (
eigene Tools, INFORMIX ( SQL)
Alle SQL-Befehle können bei ORACLE mit dem Programm sqlplus ausgeführt werden.
Bevor wir zu den eigentlichen SQL-Anweisungen kommen, sollen einige wichtige Begriffe
geklärt werden.
Manipulierte Objekte
- Table
Eine Tabelle ist eine Datenstruktur, die in einer relationalen Datenbank die Daten enthält. Sie
besteht aus Zeilen und Spalten.
- Column
Jede Spalte repräsentiert ein Attribut des Entity. Z. B. enthält die Employee-Tabelle die
Spalten ename und sal, die den Namen und das Gehalt eines Angestellten repräsentieren.
- Row
Zeilen speichern die Daten einer Tabelle. Jede Zeile repräsentiert ein Exemplar eines Entity.
In der Employee-Tabelle entspricht also eine Zeile genau einem Angestellten.
- Value
Ein Wert ist das Datum, das durch den Schnitt einer gegebenen Zeile und Spalte referenziert
wird. Ein Wert nimmt den Datentypen seiner Spalte an.
- View
Ein View ist die logische Repräsentation einer Tabelle oder einer Kombination von Tabellen.
Ein View erhält seine Daten aus den Tabellen, auf denen er basiert. Diese Tabellen heißen
daher base tables. Basistabellen können reale Tabellen, aber auch selbst Views sein.
- Index
Indizes werden in relationalen DBMS für zwei verschiedene Zwecke benötigt:
•
•
Beschleunigung des Zugriffs auf die Zeilen einer Tabelle
Erzwingung der Eindeutigkeit von Zeilen einer Tabelle
- Cluster
Clustering ist ein Mittel zur Strukturierung der Daten in ein oder mehreren Tabellen, so daß
deren Zeilen physisch nebeneinander liegen. Clustering ist vorteilhaft, wenn eine Anwendung
häufig dieselben Gruppierung der Zeilen einer Tabelle vornimmt.
Beispiel
Wenn Angestellte aus der Employee-Tabelle jedesmal anhand der Abteilungsnummer
verarbeitet werden, ist es von Vorteil ein Clustering dieser Tabelle nach der Spalte depno
durchzuführen.
Die Verwendung von Indizes und Clustern ist für den Benutzer transparent:
ORACLE verwendet diese implizit, wenn es für die auszuführende Operation
vorteilhaft ist.
Der Benutzer kann nicht durch Modifikation eines SQL-Statements explizit
den ORACLE- Query-Optimizer beeinflussen.
Optimizer können Regel- oder Statistik-basierend sein.
Die oben beschriebene Eigenschaft der Transparenz wird als Physische Datenunabhängigkeit
bezeichnet.
Durch den Zugriff auf Daten mittels SQL wird ebenfalls die Logische Datenunabhängigkeit
gewährleistet, d. h.:
keine Manipulation von Pointern, sondern Zugriff durch Namensangabe
Schützen der logischen Struktur durch den Einsatz von Views
Weitere wichtige Begriffe
- Keys
Primary Key
Der Primärschlüssel einer Tabelle wird benutzt, um jede Zeile eindeutig zu identifizieren. Er
kann aus einer oder mehreren Spalten der Tabelle bestehen (bei mehreren Spalten ( composite
(compound) primary key
Es besteht eine bijektive Beziehung zwischen dem Primärschlüssel und genau einer Zeile der
Tabelle. Der Primärschlüssel wird benötigt, da eine Tabelle als ungeordnete Menge angesehen
wird (wird in SQL aber nicht zwingend vorgeschrieben).
Foreign Key
Fremdschlüssel repräsentieren Beziehungen zwischen Tabellen. Fremdschüssel ( Spalte oder
Gruppe von Spalten, deren Werte abgeleitet sind von dem Primärschlüssel einer anderen
Tabelle. So ist die Spalte deptno der Primärschlüssel der Tabelle dept. Die Spalte deptno der
Employee-Tabelle emp ist ein Fremdschlüssel, der die Tabelle dept referenziert.
Unique Key
Ein Unique Key hat alle Eigenschaften eines Primary Key.
Im Gegensatz zum Primary Key, der eine Zeile identifizieren soll, stellt der
Unique Key lediglich die Eindeutigkeit sicher.
Ein Unique Key sollte keine Null-Werte enthalten.
- Constraints
Ein Integrity Constraint ist eine Regel, die eine Beziehung innerhalb des Systems erzwingt.
Sie werden eingesetzt, um die referentielle Integrität in einem relationalen DBMS zu sichern.
(u. a. die Beziehung Primärschlüssel ( Fremdschlüssel). Der Nutzen referentieller Integrität ist
die Datenkonsistenz. ( Constraints werden im ORACLE Data-Dictionary gespeichert. ( In
Version 6 wird nur die Syntax unterstützt, die Semantik erst ab Version 7
Beispiel
Einem Angestellten aus der emp-Tabelle darf keine deptno zugewiesen werden, die in der
Tabelle dept nicht existiert.
Constraints können folgende Formen annehmen:
- NOT NULL-Restriktion
- UNIQUE-Restriktion
- PRIMARY KEY-Restriktion (---> UNIQUE und NOT NULL)
- FOREIGN KEY-Restriktion
Die Spalte gehört zu einem Fremdschlüssel und muß den Primärschlüssel der angegebenen
Tabelle referenzieren.
- CHECK-Restriktion
Bevor eine Zeile eingefügt oder geändert wird, muß sie einem vorgegebenen Ausdruck
genügen.
2. Datentypen und Operatoren
Auch hier gibt es Unterschiede zwischen den einzelnen SQL-Implementierungen. Falls ein
Datentyp nur bei einem Konkurrenzsystem verfügbar ist, wird dies notiert.
Datentypen:
SERIAL[(n)] Eindeutige fortlaufende Zahl, die automatisch vergeben wird. Sie kann zu
Beginn mit n initialisiert werden, der Standard-Anfangswert ist 1. Eine Zahl in einer SERIALSpalte kann nicht verändert werden. (nur bei INFORMIX verfügbar)
CHAR(n) Eine Zeichenfolge der Länge n, die zulässige Länge hängt vom DBMS ab.
INFORMIX: 1 - 32767 ORACLE: 1 - 255 (default = 1)
CHARACTER wie oben
VARCHAR wie CHAR, jedoch muß eine Länge angegeben werden Zukünftige Versionen
von ORACLE definieren CHAR vielleicht als Zeichenketten fester Länge.
LONG Daten vom Typ "Character" mit einer variablen Länge von bis zu 65535 Zeichen.
Maximal eine Spalte vom Typ LONG je Tabelle zulässig
LONG VARCHAR wie oben
RAW(n) Binäre Daten in der Länge n. Die Größe muß angegeben werden (max. 255 B.). Die
Werte müssen als Zeichenstrings in hexadezimaler Notation eingegeben werden.
LONG RAW Binäre Daten, ansonsten wie LONG
DATE Ein Datum, das in Form einer Zeichenkette eingegeben wird.
ROWID Identifiziert eindeutig eine Zeile in einer Tabelle. Werte vom Typ ROWID werden
von der Pseudo-Spalte ROWID geliefert (aber ROWIDTOCHAR ---> CHAR möglich) Keine
Definition von Spalten dieses Typs möglich.
Numerische Datentypen:
SMALLINT Eine ganze Zahl INFORMIX: Wertebereich -32767 bis +32767 ORACLE:
NUMBER(38)
INTEGER Eine ganze Zahl INFORMIX: -2.147.483.647/+2.147.483.647. ORACLE:
NUMBER(38)
DECIMAL(m,n) Zahl mit definierbarer Größe und Nachkommastellen. INFORMIX: m<= 32,
Default: DECIMAL(16) ORACLE: m<= 38.
NUMBER ähnlich dem obigen Datentypen
SMALLFLOAT Eine Gleitkommazahl mit bis zu 7 signifikanten Ziffern und einfacher
Genauigkeit (nur bei INFORMIX verfügbar).
FLOAT Gleitkommazahl
REAL Gleitkommazahl
DOUBLE PRECISION Gleitkommazahl
MONEY(m,n) wie DECIMAL (Format: DBMONEY-Variable) (nur bei INFORMIX
verfügbar)
Die SQL/DS GRAPHIC-Datentypen haben in ORACLE keine Entsprechung.
Abspeicherung der numerischen Datentypen (ORACLE-spezifisch)
Angegebener Datentyp Präzision Nachkommastellen
NUMBER 38 null
NUMBER(*) 38 null
NUMBER(*,s) 38 s
NUMBER(p) p 0
NUMBER(p,s) p s
DECIMAL 38 0
DECIMAL(*) 38 0
DECIMAL(*,s) 38 s
DECIMAL(p) p 0
DECIMAL(p,s) p s
INTEGER 38 0
SMALLINT 38 0
FLOAT 38 null
FLOAT(*) 38 null
FLOAT(b) b null
REAL 63b,18d null
DOUBLE PRECISION 38 null
Alle Datentypen werden in einem internen ORACLE Number Format abgespeichert.
Wertebereiche:
p (decimal precision) 1 - 38
s (scale) -84 - 127
b (binary precision) 1 - 126
Die Angabe null impliziert eine Fließkommazahl.
DEC und NUMERIC sind Synonyme für DECIMAL. INT ist ein Synonym für INTEGER.
Datentyp-Konvertierungen:
nach CHAR NUMBER DATE
von
CHAR - TO_NUMBER TO_DATE
NUMBER TO_CHAR - TO_DATE
DATE TO_CHAR nicht zulässig Syntax und Einzelheiten zu den Datentypen
- ROWID ( Pseudo-Spalte, die mit jeder Zeile in der Datenbank assoziiert wird. ( ROWID
liefert ein Ergebnis in einer Hexadezimal-String Repräsentation für jede selektierte Zeile
zurück.
Beispiel
ROWID ENAME
-------------------------------------------------0000000F.0000.0002 SMITH
0000000F.000C.0002 SCOTT
Block Zeile Database-File
Vorteile ( schnellste Möglichkeit des Zugriffs auf Daten ( Angabe, wo die Zeilen einer
Tabelle gespeichert sind
- CHAR/VARCHAR Syntax '[char]...' Dabei ist char aus dem verfügbaren Zeichensatz (z. B.
ASCII).
Beispiel 'Hallo', 'Willi Mueller', '31-DEC-92'
- INTEGER Syntax [ + | - ]ziffer[ziffer]...[ K | M ]
Beispiele 255, 29K, 6M
- NUMBER Syntax [ + | - ]ziffer[ziffer]...[Exponent | Multiplizierer] Exponent: {e|E}[+|]digit[digit]... Multiplizierer: K oder M
Beispiele 25, 2.98, 5E3, 5e-3, 512K
- DATE Für jedes Datum werden Jahrhundert, Jahr, Monat, Tag, Stunde, Minute, Sekunde
abgespeichert.
- Die Speicherung erfolgt im 24-Stunden-Format
- Der Defaultwert für die Zeit ist 12:00:00 a.m.
- Der Defaultwert für das Datum ist der erste Tag des laufenden Monats.
- Die aktuellen Werte liefert die Funktion SYSDATE (Maschinendatum).
- Das ORACLE DATE-Standardformat ist DD-MON-YY.
Beispiel: 24-DEC-92
Zur Eingabe von Daten, die nicht dem Standardformat entsprechen oder einen Zeitanteil
enthalten, muß die TO_DATE-Funktion mit einer Formatmaske verwendet werden.
Beispiel: insert into geburtstag (gname,gtag) values ('Willi', to_date ('70-DEC-24 16:30 P.M.',
'YY-MON-DD HH:MI P.M.')
Arithmetik mit DATE-Feldern:
Datum - Datum
Datum +/- Konstante (z.B. SYSDATE + 1 / -7)
Operatoren:
Die im folgenden aufgeführten Operatoren können innerhalb der meisten SQL-Anweisungen
(DML) verwendet werden.
Arithmetische Operatoren:
() überschreibt die normalen Vorrangregeln select (x+y)/(x-y)
+ - bezeichnet einen positiven oder negativen ...where wert = -1 Ausdruck ...where -gehalt < 0
* / multiplizieren u. dividieren select 2*x+1
+ - addieren u. subtrahieren ...where x > y/2
Operatoren für Zeichenketten || Konkatenation von Characterwerten select 'Name: '||ename
Vergleichsoperatoren:
() überschreibt die normalen Vorrangregeln ...not(a=1 or b=1)
= Test auf Gleichheit ...where gehalt = 1000
!=,^=,<> Test auf Ungleichheit ...where gehalt != 1000
>,<,>=,<= Tests auf kleiner/größer als ...where gehalt >= 1000
IN Gleichheit zu einem Mitglied einer ...where job in
Menge ('CLERK','ANALYST')
äquivalent zu "=ANY" ...where sal in (select sal from emp
where deptno = 30)
NOT IN äquivalent zu "!=ALL" ...where sal not in (select sal from
emp where deptno = 30)
ANY vergleicht einen Wert mit jedem Wert aus ...where sal = any
einer Liste oder Subquery. Vorausgehen (select sal from emp where
muß einer der Operatoren =,!=,<,>,<=,>= deptno = 30)
ALL vergleicht einen Wert mit allen Werten aus ...where (sal,comm) >= all
einer Liste oder Subquery. Vorausgehen ((1500,300),(3000,0))
muß einer der Operatoren =,!=,<,>,<=,>=
[NOT] [nicht] größer als oder gleich x und kleiner ...where a between 0 and 9
BETWEEN als oder gleich y
x AND y
[NOT] liefert TRUE, wenn eine Subquery mindestens ...where exists
EXISTS eine [keine] Zeile zurückliefert (select sal from emp where
deptno = 30)
[NOT] LIKE stimmt mit dem nachfolgenden Muster ...where nachname
überein oder nicht. Das Zeichen "%" ent- like 'M%'
spricht irgendeinem String der Länge >= 0,
"_" entspricht genau einem Zeichen
IS [NOT] NULL Test auf NULL-Wert ...where job is null
Logische Operatoren:
() überschreibt die Vorrangreihenfolge select ... where x = y and
der Operatoren (a = b or p = q)
NOT invertiert das Ergebnis eines ...where not (job is null)
logischen Ausdrucks ...where not (plz like '4%')
AND logisches UND ...where a=1 and b=1
OR logisches ODER ...where a=1 or b=1
Mengenoperatoren:
UNION kombiniert Queries, indem alle Zeilen select... union select ...;
geliefert werden, die von jeder einzelnen
Abfrage erfaßt werden (Vereinigung)
INTERSECT Mengen-Durchschnitt der Zeilen ...select ... intersect select ...;
MINUS Mengen-Differenz ...select ... minus select ...;
sonstige Operatoren:
COUNT liefert die Anzahl der Zeilen select count(gehalt)
(expr) für die expr nicht NULL ist from emp
COUNT(*) liefert alle Zeilen einer Tabelle
DISTINCT eliminiert doppelte Zeilen oder select distinct * ...
doppelte Werte in einem ...count(distinct deptno)
Aggregatausdruck
Funktionen:
Die nachstehende Liste der Funktionen ist sicherlich nicht vollständig. Ebenso werden nur in
einigen Fällen Beispiele angeführt wie diese Funktionen eingesetzt werden. Für
weitergehende Informationen wird auf die Originaldokumentation verwiesen.
Numerische Funktionen (Single Row)
ABS ABS(n) select abs(-15) "Absolute" from dual
Ergebnis Absolute
----------15
CEIL CEIL(n)
COS COS (n)
COSH COSH (n)
EXP EXP (n)
FLOOR FLOOR(n)
LN LN (n)
LOG LOG (m,n)
MOD MOD(m,n)
POWER POWER(m,n)
ROUND ROUND(n[,m]) select round(15.193,1) "Round" from dual
Ergebnis Round
-------15.2
select round(15.193,-11) "Round" from dual
Ergebnis Round
-------20
SIN SIN (n)
SINH SINH (n)
SIGN SIGN(n)
SQRT SQRT(n)
TAN TAN (n)
TANH TANH (n)
TRUNC TRUNC(n[,m])
Character Funktionen (Single Row)
CHR CHR(n) select chr(75) "Character" from dual
Ergebnis Character
-----------K
CONCAT CONCAT (s1, s2) select concat (concat (ename, ´ is a ´), job)
"Job" from emp where empno = 7900
Ergebnis Job
---------------------------JAMES is a CLERK
INITCAP INITCAP(char) select initcap('HERR WILLI MEIER')
"Capitalized" from dual
Ergebnis Capitalized
--------------------Herr Willi Meier
LOWER LOWER(char) select lower('HERR WILLI MEIER')
"Lowercase" from dual
Ergebnis Lowercase
--------------------herr willi meier
REPLACE REPLACE select replace('Jack & Jue','J','BL')
(s, search_string[,replacement_string]) "Changes" from dual
Ergebnis Changes
--------------Black & Blue
SOUNDEX SOUNDEX(char) select ename from emp where
soundex(ename) = soundex('SMYTHE')
Ergebnis ename
----------SMITH
SUBSTR SUBSTR(char,m[,n])
TRANSLATE (s, from, to) select translate (´2KRW229´,
´0123456789ABC...XYZ´,´9999999999XXX...XXX´)
"Translate example" from dual
Ergebnis Translate example
---------------------9XXX999
UPPER UPPER (s)
Character-Funktionen mit numerischen Rückgabewerten
ASCII ASCII(char) select ascii('Q') from dual
Ergebnis ASCII('Q')
-------------81
INSTR INSTR(char1,char2, select instr
[,n[,m]]) ('MISSISSIPPI','S',5,2)
"Beispiel" from dual
liefert die Position des m-ten Auftretens von char2 in char1 ab Position n
Ergebnis Beispiel
-----------7
LENGTH LENGTH (char) select length (´Willi´) "Laenge" from dual
Ergebnis Laenge
--------5
Gruppenfunktionen:
Diese Art von Funktionen liefert Resultate, die auf Gruppen von Zeilen basieren; im
Gegensatz dazu liefern Single Row Funktionen je Zeile ein Ergebnis.
Als Defaultwert wird das gesamte Resultat als eine einzige Gruppe aufgefaßt. Um das
Ergebnis in kleinere Gruppen zu zerlegen, muß die GROUP BY-Klausel verwendet werden.
AVG AVG select avg(sal) "Average" from emp
([DISTINCT|ALL] n)
liefert den Mittelwert von n, ignoriert NULL-Werte
Ergebnis Average
-----------2073,50
Beispiel: Es liegen die Werte 1,1,1 und 3 vor. Der DISTINCT-Mittelwert ist 2. Der ALLMittelwert ist 1.5.
COUNT COUNT select count(jobs) "Count"
(expr) ([DISTINCT|ALL] expr) from emp
Ergebnis Count
----------4
COUNT(*) COUNT(*) select count(*) from emp
MAX MAX ([DISTINCT|ALL] expr) select max(sal) "Maximum" from emp
MIN MIN ([DISTINCT|ALL] expr) select min(hiredate) "Mindat" from emp
Ergebnis Mindat
------------17-DEC-80
STDDEV STDDEV ([DISTINCT|ALL] n)
SUM SUM ([DISTINCT|ALL] n)
VARIANCE VARIANCE ([DISTINCT|ALL] n)
Konvertierungsfunktionen (Auszug):
CHARTOROWID(char)
HEXTORAW(char)
RAWTOHEX(raw)
ROWIDTOCHAR(rowid) select rowid from graphics where
rowidtochar(rowid) like '%F38%'
TO_CHAR(n,[,fmt])
TO_CHAR(d,[,fmt])
TO_DATE(char[,fmt]) insert into bonus (bonus_date)
select to_date ('January 15, 1989','Month dd, YYYY') from dual
TO_NUMBER ...sal+to_number(substr('$100 raise,2,3)
Date-Funktionen:
LAST_DAY LAST_DAY (d) select sysdate, last_day (sysdate) "Last",
last_day (sysdate) - sysdate "Days Left" from dual
Ergebnis SYSDATE Last Days Left
-------------- -------------- -----------18-NOV-93 30-NOV-93 12
MONTHS_BETWEEN MONTHS_BETWEEN (d1,d2)
select months_between (to_date (´02-02-93´, ´MM-DD-YYYY´),
(to_date (´01-01-93´, ´MM-DD-YYYY´)) "Monate" from dual
Ergebnis Monate
--------------1.03225806
sonstige Funktionen:
LEAST LEAST (expr [,expr] ...) select least (´Harry´, ´Harald´) from dual
Ergebnis LEAST
--------Harald
NVL NVL (expr1, expr2) select ename, nvl (to_char
Nullwert-Ersetzung (provision), ´KEINE´) from emp
3. Datendefinition (DDL)
Anweisungen zur Datendefinition dienen zur Einrichtung, Änderung oder Löschung von
Datenbankobjekten wie z. B. Tabellen, Indizes, Cluster, usw. Hierunter fallen hauptsächlich
die CREATE-, ALTER- und DROP-Anweisungen. Die folgende Liste ist alphabetisch
geordnet.
ALTER CLUSTER
•
•
Änderung von Speichereigenschaften eines Clusters
Allokierung eines Extents für einen Cluster
ALTER CLUSTER [schema.]cluster
[PCTUSED integer] [PCTFREE integer]
[SIZE integer]
[INITRANS integer] [MAXTRANS integer]
[STORAGE storage-clause]
[ALLOCATE EXTENT [(SIZE integer DATAFILE ´filename´
INSTANCE integer)]]
Beispiel
ALTER CLUSTER scott.customer SIZE 512 STORAGE (MAXEXTENTS 25)
ALTER DATABASE
•
•
•
•
•
•
Öffnen oder Mounten einer Datenbank
Konvertieren eines ORACLE Version 6-Data Dictionary bei der Migration auf
Version 7
Wählen zwischen archivelog / noarchivelog
Ausführen eines Media-Recovery
Hinzufügen / Löschen von Redo-Logfile(-Gruppen)
Umbenennung von Datenfiles / Logfiles-Members
•
•
•
•
•
Backup des aktuellen Controlfiles
Erstellen eines neuen Datenfiles
Setzen eines Datenfiles auf online / offline
Aktivieren und Deaktivieren von Logfile-Gruppen
Ändern des globalen Datenbanknamens
Voraussetzung: Der Benutzer muß das ALTER DATABASE Systemprivileg haben.
ALTER DATABASE [database]
[MOUNT --]
[CONVERT]
[OPEN [RESETLOGS | NORESETLOGS]]
[ARCHIVELOG]
[NOARCHIVELOG]
[RECOVER ---]
[ADD LOGFILE ---]
--[DROP LOGFILE MEMBER ---]
[RENAME FILE ---]
[BACKUP CONTROLFILE TO filename REUSE]
[CREATE DATAFILE ---]
[DATAFILE filename [ONLINE | OFFLINE [DROP]]]
--[RENAME GLOBAL_NAME TO database ---]
--Beispiele
ALTER DATABASE hrz MOUNT EXCLUSIVE
ALTER DATABASE hrz ADD LOGFILE GROUP 3 (´diska:log3.log´, ´diskb:log3.log´)
SIZE 50K
ALTER DATABASE hrz ADD LOGFILE MEMBER ´diskc:log3.log´ TO GROUP 3
ALTER INDEX
•
Redefinieren der zukünftigen Speicherallokation eines Index
ALTER INDEX [schema.]index
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage_clause]
Beispiel
ALTER INDEX scott.customer INITRANS 5 STORAGE (NEXT 100K)
Der Index wird so geändert, daß zukünftige Datenblocks 5 initiale Transaktionseinträge und
ein inkrementelles Extent von 100k verwenden.
ALTER PROFILE
•
Hinzufügen oder Entziehen eines Resource-Limits zu oder von einem Profil
ALTER PROFILE profile LIMIT
[SESSIONS_PER_USER integer | UNLIMITED | DEFAULT]
[CPU_PER_SESSION " ] [IDLE_TIME " ] [LOGICAL_READS_PER_SESSION " ] --Beispiele
ALTER PROFILE engineer LIMIT SESSIONS_PER_USER 5
ALTER PROFILE default LIMIT IDLE_TIME 2
ALTER ROLLBACK SEGMENT
•
•
Ändern der Speichercharakteristika eines Rollback-Segments
Setzen auf online oder offline
ALTER ROLLBACK SEGMENT rollback_segment [ONLINE | OFFLINE | STORAGE
storage_clause]
ALTER SEQUENCE
•
Redefinieren der Wertgenerierung für eine Sequenz
ALTER SEQUENCE [schema.]sequence
[INCREMENT BY integer]
[MAXVALUE integer | NOMAXVALUE]
--[CYCLE | NOCYCLE]
--Beispiele
ALTER SEQUENCE folge MAXVALUE 1500
ALTER SEQUENCE folge CYCLE CACHE 5
ALTER SESSION
•
Ändern der aktuellen Sitzung durch Aufruf spezieller Funktionen
ALTER SESSION SET
[NLS_LANGUAGE = language]
--[NLS_DATE_FORMAT = ´fmt´]
--[OPTIMIZER_GOAL = ALL_ROWS|FIRST_ROWS|RULE|CHOOSE]
---
ALTER SNAPSHOT
•
•
Ändern der Snapshot-Speichercharakteristika
Einstellen der automatischen Refresh-Zeit und des Refresh-Modus
ALTER SNAPSHOT [schema.]snapshot
[PCTFREE integer]
[PCTUSED integer]
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage_clause]
ALTER SNAPSHOT [schema.]snapshot REFRESH FAST | COMPLETE | FORCE --ALTER SYSTEM
•
Ändern der ORACLE-Instanz durch Aufruf einer speziellen Funktion
ALTER SYSTEM
[ENABLE | DISABLE RESTRICTED SESSION]
--[CHECKPOINT | CHECK DATAFILES GLOBAL | LOCAL]
[SET ---]
[KILL SESSION integer1, integer2] (* aus V$SESSION *)
ALTER TABLE
•
•
•
•
•
•
Hinzufügen einer Spalte
Hinzufügen eines Integrity-Constraints
Redefinieren einer Spalte
Redefinieren von Speichereigenschaften einer Tabelle
Aktivieren, Deaktivieren oder Löschen eines Integrity-Constraints
Allokation eines Extents
ALTER TABLE [schema.]table
[ADD (column datatype [DEFAULT expr][column_constraint ...] | table_constraint)]
[MODIFY (column [datatype][DEFAULT expr][column_constraint ...])]
[PCTFREE integer]
--[STORAGE storage_clause]
[DROP drop_clause]
[ALLOCATE EXTENT ---]
--Beispiele
ALTER TABLE emp MODIFY (gehalt NUMBER (9,2))
ALTER TABLE emp PCTFREE 30 PCTUSED 60
ALTER TABLESPACE
•
•
•
•
Hinzufügen oder Umbenennen von Datenfiles
Ändern von Speichereigenschaften
Setzen von Tablespaces auf online / offline
Starten / Stoppen eines Backup
ALTER TABLESPACE tablespace
[ADD DATAFILE ---]
[RENAME DATAFILE ---]
--[ONLINE]
[OFFLINE ---]
[BEGIN | END BACKUP]
Beispiel
ALTER TABLESPACE accounting OFFLINE NORMAL
ALTER USER
•
•
•
Ändern eines Benutzerpasswortes
Ändern des default-Tablespace und des temporären Tablespace
Ändern von Tablespace-Quoten, Profilen oder von default-Rollen
ALTER USER user
[IDENTIFIED BY password | EXTERNALLY]
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA integer[K | M] | UNLIMITED ON tablespace]
[PROFILE profile]
[DEFAULT ROLE role, ... | ALL [EXCEPT role, ...] | NONE]
Beispiel
ALTER USER scott IDENTIFIED BY lion DEFAULT TABLESPACE tstest
ALTER USER scott PROFILE sachbearbeiter
ALTER VIEW
•
Recompilieren eines Views
ALTER VIEW [schema.]view COMPILE
Beispiel
ALTER VIEW customer_view COMPILE
AUDIT
•
•
Wählen eines Auditing für spezifizierte SQL-Anweisungen
Wählen eines Auditing für Operationen auf Schema-Objekten
für SQL-Statements:
AUDIT statement_opt | system_priv, ...
[BY USER]
[BY SESSION | ACCESS]
[WHENEVER [NOT] SUCCESSFUL]
Beispiele
AUDIT ROLE
AUDIT ROLE WHENEVER SUCCESSFUL
AUDIT SELECT TABLE, UPDATE TABLE BY scott
AUDIT DELETE ANY TABLE
für Schema-Objekte:
AUDIT object_opt, ... ON [schema.]object | DEFAULT
[BY SESSION | ACCESS]
[WHENEVER [NOT] SUCCESSFUL]
Beispiel AUDIT SELECT ON scott.emp WHENEVER NOT SUCCESSFUL
COMMENT
•
Hinzufügen eines Kommentars über eine Tabelle, einen View, einen Snapshot oder
eine Spalte zum Data-Dictionary
COMMENT ON TABLE | COLUMN
[schema.]table[.column] |
[schema.]view[.column] |
[schema.]snapshot[.column]
IS text
Beispiel
COMMENT ON COLUMN adressen.name IS ´Nachnamen einschliesslich Titel´
COMMENT ON COLUMN adressen.name IS ´´ (Löschen)
CREATE CLUSTER
•
•
Erstellen eines Clusters, der eine oder mehrere Tabellen umfassen kann
Sind mehrere Tabellen betroffen, so haben diese eine oder mehrere Spalten
gemeinsam
CREATE CLUSTER [schema.]cluster (column datatype, ...)
[PCTUSED integer]
---
[MAXTRANS integer]
[SIZE integer [K | M]]
[TABLESPACE tablespace]
[STORAGE storage_clause]
[INDEX |
[[HASH IS column] HASHKEYS integer]
Beispiele
CREATE CLUSTER personnel (department_number NUMBER (2)) SIZE 512 STORAGE
(INITIAL 100K NEXT 50K PCTINCREASE 10)
Es wird der (Index-)Cluster mit dem Namen personnel erzeugt, der die cluster key-Spalte
department_number, eine Größe von 512 B und die angegebenen Parameterwerte hat.
Die folgenden Anweisungen fügen die Tabellen emp und dept zum Cluster hinzu:
CREATE TABLE emp
(empno NUMBER PRIMARY KEY,
ename VARCHAR(10) NOT NULL
CHECK (ename=UPPER(ename)),
--deptno NUMBER(2) NOT NULL)
CLUSTER personnel (deptno)
CREATE TABLE dept
(deptno NUMBER (2),
--CLUSTER personnel (deptno)
Optional kann noch ein Index über den Cluster gelegt werden:
CREATE INDEX idx_personnel ON CLUSTER personnel
CREATE CLUSTER personnel (department_number NUMBER) SIZE 512 HASHKEYS 500
(= 503) --CREATE CONTROLFILE
Erneutes Erstellen eines Kontrollfiles, falls
alle Kopien des Controlfiles durch Plattenfehler verloren gegangen sind
die maximale Anzahl von Redo-Log-Files bzw. Gruppen o. ä. geändert werden soll
Notfall-Kommando: sollte im allg. wegen Backups überflüssig sein
CREATE DATABASE
•
Erzeugen einer Datenbank
Dient zur Erstellung einer leeren Datenbank mit dem angegebenen Namen database und führt
zu der in Teil 6 (wird zur Zeit noch bearbeitet) beschriebenen Verzeichnisstruktur.
CREATE DATABASE database
[CONTROLFILE REUSE]
[LOGFILE [GROUP integer] filespec, ...]
[MAXLOGFILES integer]
--[DATAFILE filespec, ...]
[MAXDATFILES integer]
--[CHARACTER SET charset]
Beispiele
CREATE DATABASE
Erzeugt eine kleine Datenbank mit Standardwerten für alle Argumente
CREATE DATABASE testneu
CONTROLFILE REUSE
LOGFILE GROUP 1 (´diskb:log1.log´, ...) SIZE 50K
LOGFILE GROUP 2 (´diskb:log2.log´, ...) SIZE 50K
MAXLOGFILES
MAXLOGHISTORY 100
DATAFILE ´diska:dbeins.dat´ SIZE 2M
MAXDATAFILES 10
ARCHIVELOG
EXCLUSIVE
CREATE INDEX
•
Erzeugen eines Index für eine Tabelle oder einen Cluster
ORACLE 6
CREATE [UNIQUE|DISTINCT] [CLUSTER] INDEX index-name ON table-name (columnname [ASC|DESC], ...)
Die angegebenen Spalten der genannte Tabellen werden mit einem Index des Namens indexname versehen. Dieser Name muß in der Datenbank eindeutig sein.
ORACLE 7
CREATE INDEX [schema.]index ON
[[schema.]table (column [ASC | DESC], ...)] |
[CLUSTER [schema.]cluster]
--[TABLESPACE tablespace]
--[NOSORT]
Beispiel
CREATE INDEX idx_emp_ename ON emp (ename)
CREATE PROFILE
•
Erstellt ein Profil und spezifiziert dessen Resource-Limits
CREATE PROFILE profile LIMIT
[SESSIONS_PER_USER integer | UNLIMITED | DEFAULT]
[CPU_PER_SESSION " ]
[IDLE_TIME " ]
[LOGICAL_READS_PER_SESSION " ]
--[PRIVATE_SGA integer[K | M] | UNLIMITED | DEFAULT]
PRIVATE_SGA bestimmt den Umfang für privaten Platz im shared pool.
Beispiel
CREATE PROFILE system_manager LIMIT --- CPU_PER_SESSION UNLIMITED
COMPOSITE_LIMIT 5000000
CREATE ROLLBACK SEGMENT
•
Erzeugt ein Rollback-Segment
CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment
[TABLESPACE tablespace | STORAGE storag_clause], ...
Beispiel
CREATE PUBLIC ROLLBACK SEGMENT rbs_2 TABLESPACE system STORAGE
(INITIAL 50K NEXT 50K OPTIMAL 150K MAXEXTENTS 10)
CREATE SEQUENCE
•
Erzeugt ein Sequenz zur Generierung aufeinander folgender Werte
CREATE SEQUENCE [schema.]sequence
[INCREMENT BY integer]
[MAXVALUE integer | NOMAXVALUE]
--[CYCLE | NOCYCLE]
--Beispiel
CREATE SEQUENCE eseq INCREMENT BY 10
ESEQ.NEXTVAL liefert damit 1, 11, 21 (zusätzlich CURRVAL)
CREATE SNAPSHOT
•
Erzeugen eines Snapshots der Daten einer oder mehrerer Tabellen
Ein Snapshot ist eine Tabelle, die die Resultate von Queries auf eine oder mehrere Tabellen
oder Views - häufig auf remote-Datenbanken- enthält.
Beispiel
CREATE SNAPSHOT emp_sf
PCTFREE 5 PCTUSED 60
TABLESPACE users
--REFRESH FAST NEXT sysdate + 7
AS SELECT * FROM emp@ny
CREATE SYNONYM
•
Kreiert ein Synonym für ein Schema-Objekt
CREATE [PUBLIC] SYNONYM [schema.]synonym FOR [schema.]object[@dblink]
Beispiel
CREATE PUBLIC SYNONYM emp FOR scott.emp@sales
CREATE TABLE
•
•
•
Erstellen einer Tabelle
Definieren von Spalten und Integrity-Constraints
Festlegen der Speicherallokation
CREATE TABLE [schema.]table [table_constraint]
(column datatype [DEFAULT expr][column_constraint]
| table_constraint)], ...)
[PCTFREE integer]
--[TABLESPACE tablespace]
[STORAGE storage_clause]
[CLUSTER cluster (cluster, ...)]
[ENABLE enable_clause | DISABLE disable_clause]
[AS subquery]
- DEFAULT spezifiziert einen Wert, wenn ein nachfolgendes INSERT-Kommando den Wert
für die Spalte wegläßt.
- PCTFREE Prozent des freien Platzes im Tabellenblock
- PCTUSED minimale Benutzung (in Prozent)
- INITRANS initiale Anzahl von Transaktionseinträgen
- MAXTRANS maximale Anzahl von Transaktionen, die gleich- zeitig einen Datenblock
ändern können
- ENABLE/DISABLE aktivieren/deaktivieren Integrity-Constraints
STORAGE
STORAGE
([INITIAL integer [K | M]] |
[NEXT integer [K | M]] |
[MINEXTENTS integer] |
[MAXEXTENTS integer] |
[PCTINCREASE integer] |
[OPTIMAL integer[K | M] | NULL] |
--INITIAL Größe des ersten Extents
NEXT Größe des nächsten Extents
PCTINCREASE Prozentuales Wachstum der Extents nach dem zweiten
MINEXTENTS Gesamtzahl allokierter Extents beim Erzeugen des Segmentes
MAXEXTENTS Maximale Anzahl von reservierbaren Extents
OPTIMAL spezifiziert die optimale Größe für ein Rollback-Segment
Beispiele
CREATE TABLE salgrade
(grade NUMBER CONSTRAINT pk_salgrade PRIMARY KEY
USING INDEX TABLESPACE users_a,
minsalary NUMBER)
TABLESPACE statistik
CREATE TABLE scott.emp
(empno NUMBER CONSTRAINT pk_emp PRIMARY KEY,
--sal NUMBER (10,2) CONSTRAINT ck_sal CHECK (sal < 10000),
--- )
STORAGE (INITIAL 6144 NEXT 6144
MINEXTENTS 1 MAXEXTENTS 5 PCTINCREASE 5)
CREATE TABLESPACE
•
•
Erzeugen eines Platzes in der Datenbank zur Speicherung von Schema-Objekten,
Rollback-Segmenten und temporären Segmenten
Angabe der Datenfiles, aus denen der Tablespace besteht
CREATE TABLESPACE tablespace
DATAFILE filespec, ...
[DEFAULT STORAGE storage_clause]
[ONLINE | OFFLINE]
Beispiel
CREATE TABLESPACE tabspace_2 DATAFILE ´diska:tabspace_file2.dat´ SIZE 20M
DEFAULT STORAGE ( --- ) ONLINE
CREATE TRIGGER
Diese Anweisung dient zum Erzeugen und Aktivieren eines Datenbank-Triggers. Ein Trigger
ist hier ein gespeicherter PL/SQL-Block, der mit der Tabelle assoziiert ist. ORACLE führt
den Trigger automatisch aus, wenn ein SQL-Statement gegen die Tabelle gestartet wird. Dies
kann z. B. vor oder nach DELETE, INSERT oder UPDATE der Fall sein (s. SQL-ReferenzDokumentation).
CREATE USER
•
Kreieren eines Datenbank-Benutzers
CREATE USER user IDENTIFIED BY password | EXTERNALLY
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
[QUOTA integer[K | M] | UNLIMITED ON tablespace]
[PROFILE profile]
Beispiel
CREATE USER werner IDENTIFIED BY beinhart
DEFAULT TABLESPACE user_3
TEMPORARY TABLESPACE temp_2
QUOTA 10M ON user_3
QUOTA 5M ON temp_2
QUOTA 5M ON system
PROFILE hausmeister
CREATE VIEW
•
•
Definieren eines Views über eine oder mehrere Tabellen oder Views
erzeugt eine bestimmte Benutzersicht auf die selektierten Daten
CREATE [OR REPLACE] [FORCE | NOFORCE]
VIEW [schema.]view [(alias, ...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
FORCE erzeugt den View auch wenn die Basistabellen nicht existieren oder keine Privilegien
darauf bestehen
alias spezifiziert Namen für die durch die Query selektierten Ausdrücke
subquery SELECT ohne ORDER BY und FOR UPDATE
WITH CHECK OPTION garantiert, daß die durch den View durchgeführten Einfügungen
und Änderungen in Zeilen resultieren, die durch die View-Query selektiert werden können
CONSTRAINT ist der Name des CHECK OPTION-Constraints, default ist SYS_Cn (n
integer)
Ein View kann dort verwendet werden, wo eine Tabelle in einer der folgenden SQLAnweisungen zulässig ist:
COMMENT DELETE INSERT LOCK TABLE UPDATE SELECT
Beispiel
CREATE VIEW dept20 (person, jahresgehalt) AS SELECT ename, sal * 12 annual_salary
FROM emp WHERE deptno = 20
DROP CLUSTER
•
Löscht einen Cluster aus der Datenbank
DROP CLUSTER [schema.]cluster [INCLUDING TABLES [CASCADE CONSTRAINTS]]
Existieren Tabellen bzw. Constraints ohne daß die Optionen angegeben wurden, wird eine
Fehlermeldung geliefert.
DROP INDEX
•
Löschen eines Index aus der Datenbank
DROP INDEX [schema.]index
DROP PROFILE
•
Löschen eines Profils aus der Datenbank
DROP PROFILE profile [CASCADE]
Das DEFAULT-Profil kann nicht gelöscht werden. Ist das Profil noch Benutzern zugewiesen,
muß CASCADE verwendet werden.
DROP ROLLBACK SEGMENT
•
Entfernen eines Rollback-Segmentes aus der Datenbank
DROP ROLLBACK SEGMENT rollback_segment
DROP SEQUENCE
•
Löschen einer Sequenz aus der Datenbank
DROP SEQUENCE [schema.]sequence
DROP SNAPSHOT
•
Entfernt einen Snapshot aus der Datenbank
DROP SNAPSHOT [schema.]snapshot
DROP SYNONYM
•
Entfernen eines Synonyms aus der Datenbank
DROP [PUBLIC] SYNONYM [schema.]synonym
Beispiel DROP PUBLIC SYNONYM Aktienkurse
DROP TABLE
• Löschen einer Tabelle inklusive ihrer Indizes und Daten
DROP TABLE [schema.]table CASCADE CONSTRAINTS
DROP TABLESPACE
•
Entfernt einen Tablespace aus der Datenbank
DROP TABLESPACE tablespace [INCLUDING CONTENTS [CASCADE
CONSTRAINTS]]
CASCADE CONSTRAINTS löscht alle Integritätsbedingungen, die außerhalb des
Tablespace liegen und sich auf Primärschlüssel beziehen.
Beispiel
DROP TABLESPACE user_3 INCLUDING CONTENTS CASCADE CONSTRAINTS
DROP USER
•
•
Löscht einen Benutzer
Entfernt alle Objekte im Schema des Benutzers
DROP USER user [CASCADE]
CASCADE muß spezifiziert werden, wenn noch Objekte im Benutzerschema enthalten sind.
DROP VIEW
•
•
Löscht einen View aus der Datenbank
Gleichzeitig werden alle Views entfernt, die im Rahmen dieses Views definiert
wurden.
DROP VIEW [schema.]view
NOAUDIT
•
Deaktiviert das Auditing, indem es die Wirkung eines vorhergehenden AUDITKommandos teilweise oder ganz rückgängig macht
für SQL-Statements:
NOAUDIT statement_opt | system_priv, ... [BY user, ...] [WHENEVER [NOT]
SUCCESSFUL]
Beispiele
NOAUDIT ROLE
NOAUDIT SELECT TABLE BY scott
für Schema-Objekte:
NOAUDIT object_opt, ... ON [schema.]object [WHENEVER [NOT] SUCCESSFUL]
Beispiel
NOAUDIT SELECT ON scott.emp
RENAME
•
Ändert den Namen eines Schema-Objektes
RENAME old TO new
kann für Tabellen, Views, Sequenzen oder private Synonyme verwendet werden
Beispiel Reorganisieren einer Tabelle ohne vorherigen Export
CREATE TABLE temp (newname, col2, col3) AS SELECT oldname, col2, col3 FROM
static
DROP TABLE static
RENAME temp TO static
TRUNCATE
•
•
Löschen aller Zeilen einer Tabelle oder eines Clusters
Freigabe des von den Zeilen verwendeten Speicherplatzes
TRUNCATE TABLE [schema.]table | CLUSTER [schema.]cluster ---
4. Datenmanipulation (DML)
Zur Datenmanipulation dienen die DELETE-, INSERT- und UPDATE-Statements.
DELETE
•
Löschen einer oder mehrerer Zeilen einer Tabelle
DELETE FROM [schema.]table | view --- [WHERE condition]
Es werden alle Zeilen gelöscht, die dem Ausdruck condition genügen.
Bei einigen DBMS werden alle erfaßten Zeilen solange gesperrt, bis der DELETE-Befehl
vollständig durchgeführt wurde. Dadurch kann eine vom Betriebssystem festgelegte
maximale Anzahl von gleichzeitigen Sperren überschritten werden (---> LOCK TABLE)
Beispiele
DELETE FROM emp WHERE job = ´SALESMAN´ AND comm < 100
DELETE FROM blake.accounts@dallas
EXPLAIN PLAN
•
•
Liefert den Ausführungsplan für ein SQL-Statement
kann die Kosten für die Ausführung einer Anweisung bestimmen
Beispiel
EXPLAIN PLAN SET STATEMENT_ID = ´Gehaltserhoehung in Dortmund´ INTO output
FOR UPDATE emp SET sal = sal * 1.10 WHERE deptno = (select deptno FROM dept
WHERE loc = ´DORTMUND´)
Die Tabelle output enthält dann Informationen über den Ausführungsplan und die Kosten.
INSERT
•
Einfügen einer oder mehrerer neuer Zeilen in eine bestehende Tabelle
INSERT INTO [schema.]table | view[@dblink] [(column, ...)] {VALUES (expr, ...) |
subquery}
expr, ... ist die Liste der Werte, die in die angegebenen Spalten column, ... eingefügt werden
sollen.
subquery = SELECT-Anweisung
ORACLE fügt die Daten in der Reihenfolge der angegebenen Spaltennamen in die Tabelle
ein, falls keine Spaltennamen angegeben wurden, ist die Reihenfolge wie beim Erzeugen der
Tabelle.
Alternativ zur VALUES-Klausel, die lediglich die Eingabe einer einzelnen Zeile ermöglicht,
ist die Angabe eines SELECT-Statements zulässig, dessen Resultat ebenso wie bei VALUES
in die Tabelle eingefügt wird.
Beispiele
INSERT INTO emp (empno, ename, sal) VALUES (7810, ´MEIER´, 4900)
INSERT INTO bonus
SELECT ename, job, sal, comm FROM emp WHERE comm > 0.25 * sal OR job IN
(´PRESIDENT´, ´MANAGER´)
LOCK TABLE
•
Sperrt eine Tabelle oder einen View und begrenzt den Zugriff darauf durch andere
Benutzer
LOCK TABLE [schema.]table | view [@dblink] IN lockmode MODE [NOWAIT]
Beispiel
LOCK TABLE emp IN EXCLUSIVE MODE NOWAIT
UPDATE
•
Ändern der Werte einer oder mehrerer Spalten von einer oder mehreren Zeilen einer
Tabelle
UPDATE [schema.]table | view --- SET {(column, ...) = (subquery)}, ... | {column = expr |
(subquery)}, ... [WHERE condition]
Wenn sich das Kommando auf alle Spalten beziehen soll, kann alternativ * eingegeben
werden. Die Anzahl der Namen in col-list muß mit der Anzahl der Werte in expr-list
übereinstimmen.
Beispiele
UPDATE emp SET comm = NULL WHERE job = ´TRAINEE´
UPDATE emp SET (sal, comm) = (SELECT 1.1 * AVG (sal), 1.5 * AVG (comm)) WHERE
ename = ´MUELLER´
5. Der Select-Befehl
Die Select-Anweisung dient dem Retrieval. Das SELECT-Kommando ist die Anweisung mit
der größten Komplexität. Das Ergebnis einer Datenbankabfrage kann durch die Angabe einer
Vielzahl von Schlüsselwörtern beeinflußt werden (s. SQL-Referenz-Dokumentation).
SELECT [ALL | DISTINCT] select-list | *
FROM [schema.]table | view ---
[WHERE condition]
[[START WITH condition] CONNECT BY condition]
[GROUP BY column-list [HAVING condition]]
[UNION | UNION ALL | INTERSECT | MINUS
SELECT command]
[ORDER BY {column-name [ASC | DESC]}, ...]
[FOR UPDATE OF {[schema.]table. |view. column}, ... [NOWAIT]]
* liefert alle Spalten von allen Tabellen oder Views, die in der FROM-Klausel aufgeführt sind
START WITH CONNECT BY liefert die Zeilen in einer hierarchischen Reihenfolge
GROUP BY gruppiert die selektierten Zeilen basierend auf dem Wert der Ausdrücke und
liefert eine einzelne Zeile an Informationen je Gruppe
HAVING analog WHERE
FOR UPDATE sperrt die selektierten Reihen
NOWAIT Benutzer erhält die Kontrolle, wenn eine Sperre nicht erworben werden konnte
WHERE conditions:
expr rel-op expr
expr [NOT] BETWEEN expr AND expr
expr [NOT] IN (items)
column-name [NOT] LIKE "string" [ESCAPE escape-character]
column-name [NOT] MATCHES "string" [ESCAPE escape-character]
expr rel-op {ALL | [ANY | SOME]} (SELECT-statement)
expr [NOT] IN (SELECT-statement)
[NOT] EXISTS (SELECT-statement)
column-name IS [NOT] NULL
Nur die Angabe der SELECT-und der FROM-Klausel sind unbedingt erforderlich.
Beispiele
SELECT ename, job, sal, deptno FROM emp WHERE NOT (job = ´SALESMAN´AND
deptno = 30)
SELECT LPAD (´ ´, 2* (LEVEL - 1)) || ename org_chart, empno, manager, job FROM emp
START WITH job = ´PRESIDENT´ CONNECT BY PRIOR empno = manager
Ergebnis:
ORG_CHART EMPNO MANAGER JOB
------------------- ------------------------ ---------------- ---------------KOENIG 7839 PRESIDENT
MEIER 7566 7839 ABT-LEITER
SCHULZ 7788 7566 GRP-LEITER
KUNZ 7876 7839 ABT-LEITER
HINZ 7990 7876 GRP-LEITER --SELECT deptno, MIN (sal), MAX (sal) FROM emp GROUP BY deptno
Ergebnis:
DEPTNO MIN(SAL) MAX(SAL)
-------------- --------------- ---------------10 1300 5000
20 800 3000
SELECT deptno, MIN (sal), MAX (sal) FROM emp WHERE job =
´VERTRIEBSBEAUFTRAGTER´ GROUP BY deptno HAVING MIN (sal) < 1000
Ergebnis:
DEPTNO MIN(SAL) MAX(SAL)
-------------- --------------- ---------------20 800 3000
SELECT ename, deptno, sal FROM emp WHERE job = ´SACHBEARBEITER´ ORDER BY
deptno ASC, sal DESC
SELECT ename, emp.deptno, dname FROM emp, dept WHERE emp.deptno = dept.deptno
Ergebnis:
ENAME DEPTNO DNAME
------------- -------------- ----------------MEIER 10 BUCHHALTUNG
MUELLER 10 BUCHHALTUNG
SCHNEIDER 10 BUCHHALTUNG
SCHMITT 20 VERKAUF
KOWALSKI 20 VERKAUF
Herunterladen