Data Manipulation Language (DML)
Fügt neue Zeilen in eine Tabelle hinzu
Syntax:
INSERT INTO tabelle [(spalte, ...)] VALUES (value, ...);
Beispiel:
INSERT INTO emp
(empno, ename, job, deptno)
VALUES
(8000,'HUBER','TRAINEE',40);
INSERT INTO dept
VALUES
(50, 'HEAD_QUARTER', null);
Kopiert Zeilen aus einer anderen Tabelle
Syntax:
INSERT INTO tabelle [(spalte ...)]
unterabfrage
Beispiel:
INSERT INTO emp_copy
SELECT * FROM emp WHERE job = 'MANAGER';
Syntax:
UPDATE tabelle
SET spalte = value ändert vorhandene Zeilen
[WHERE condition] ändert bestimmte Zeilen
Beispiel:
UPDATE emp SET sal = 2000
WHERE deptno = 10;
UPDATE emp
SET sal = 1111, comm = 1000, deptno = 50
WHERE ename = 'HUBER';
UPDATE emp
SET (deptno, sal, comm) =
(SELECT deptno, sal, comm
FROM emp WHERE empno = 7499)
WHERE ename = 'MILLER';
Löscht Zeilen aus einer Tabelle
Syntax:
DELETE FROM tabelle
[WHERE condition]
Beispiel:
DELETE FROM emp
WHERE job = 'TRAINEE';
DELETE FROM emp
WHERE deptno = (SELECT MIN(deptno)FROM emp);
Kombination von INSERT- und UPDATE-Anweisungen (ab 9i)
Syntax:
MERGE INTO tabelle
USING tabelle
ON (condition)
WHEN MATCHED THEN UPDATE
SET (condition)
WHEN NOT MATCHED THEN INSERT
(condition)
Beispiel:
MERGE INTO annsal a USING emp e
ON (a.empno = e.empno)
WHEN MATCHED THEN UPDATE
SET a.peryear = (e.sal*12)
WHEN NOT MATCHED THEN INSERT
(a.empno, a.peryear)
VALUES (e.empno, e.sal*12);
Transaktionen
COMMIT; → Datenänderungen werden permanent festgeschrieben
ROLLBACK; → alle Änderungen werden zurückgesetzt
ROLLBACK TO SAVEPOINT test; → alle vorgenommenen Änderungen werden bis zum SAVEPOINT zurückgesetzt
Sperrmechanismen
SET TRANSACTION READ COMMITTED; → (Standardeinstellung)
SET TRANSACTION READ ONLY; → erlaubt nur Lesen der Daten, kein Ändern
Data Definition Language (DDL)
Erstellt Tabelle mit Spalten und -attributen
Syntax:
CREATE TABLE tabellenname
(spalte type(n), ...)
Beispiel:
CREATE TABLE kollegen (
k_nr number(3) NOT NULL,
nname varchar2(20),
ort varchar2(20) DEFAULT 'MÜNCHEN');
Datentypen
⇒z.B. number[(p,s)], varchar2(n), char[(n)], date
Erstellt Tabelle mittels Unterabfrage aus anderer Tabelle
Syntax:
CREATE TABLE tabellenname
AS subquery
Beispiel:
CREATE TABLE dept10 AS
SELECT empno, ename, sal*12 j_gehalt,
hiredate FROM emp WHERE deptno = 10;
Fügt eine neue Spalte in eine Tabelle
Syntax:
ALTER TABLE tabellenname
ADD (spalte type(n), ...)
Beispiel:
ALTER TABLE kollegen ADD (email char(30));
Ändert eine vorhandene Spalte
Syntax:
ALTER TABLE tabellenname
Modify (spalte type(n), ...)
Beispiel:
ALTER TABLE kollegen
MODIFY (email varchar2(35));
Löscht eine Spalte aus einer Tabelle
Syntax:
DROP COLUMN spalte
Beispiel:
ALTER TABLE emp DROP COLUMN job;
ALTER TABLE dept DROP COLUMN deptno
CASCADE CONSTRAINTS;
Löscht die gesamte Tabelle unwiderruflich
Syntax:
DROP TABLE tabellenname;
Beispiel:
DROP TABLE kollegen;
DROP TABLE dept CASCADE CONSTRAINTS;
Benennt eine Tabelle um
Syntax:
RENAME table TO table_neu
Beispiel:
RENAME kollegen TO ex_kollegen;
Leert eine Tabelle
Syntax:
TRUNCATE TABLE tabellenname
Beispiel:
TRUNCATE TABLE ex_kollegen;
Views
Bettet Unterabfrage in die Anweisung 'CREATE VIEW' mit ein
Syntax:
CREATE VIEW viewname
AS subquery
Beispiel:
CREATE OR REPLACE VIEW empvu20 (nr, nname,
beruf) AS SELECT empno, ename, job FROM emp
WHERE deptno = 20 WITH CHECK OPTION;
Löscht eine View
Syntax:
DROP VIEW viewname
Beispiel:
DROP VIEW empvu20;
Fügt Daten einer View hinzu
Syntax:
INSERT INTO view [(spalte, ...)]
VALUES (value, ...)
Beispiel:
INSERT INTO emp_view (empno, ename, deptno)
VALUES (9000,'HUGO',20);
Benutzen einer Inline View als Datenquelle
Syntax:
SELECT spalte, spalte
FROM tabelle alias,
(inline view) alias
bedingung
Beispiel:
SELECT a.ename, a.sal, a.deptno, b.maxsal
FROM emp a, (SELECT deptno, max(sal) maxsal
FROM emp GROUP BY deptno) b
WHERE a.deptno = b.deptno
AND a.sal<b.maxsal;
Top-N-Analysen ermitteln die größten bzw. kleinsten Werte einer Spalte
Syntax:
SELECT rownum alias, spalte, ...
FROM (inline view
ORDER BY spalte)
bedingung
Beispiel:
SELECT rownum rang, ename, sal
FROM (SELECT ename, sal FROM emp
ORDER BY sal desc)
WHERE rownum< = 5;