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 Architektur-bedingt: 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 SERIAL-Spalte 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 ALL- Mittelwert 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 (column-name [ASC|DESC], ...)
Die angegebenen Spalten der genannte Tabellen werden mit einem Index des Namens index-name 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-Referenz-Dokumentation).
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 SQL-Anweisungen 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 AUDIT-Kommandos 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