Veränderungen an der DB

Werbung
Datenmanipulationssprache
SQL
• Ein DML Statement wird ausgeführt
wenn:
– neue Tupel eingefügt werden
Datenmanipulation
– existierende Tupel geändert werden
– existierende Tupel aus der Tabelle
gelöscht werden
• Eine Transaktion besteht aus einer
Menge von DML Statements, die logisch
zusammengehören.
Copyright © Oracle Corporation, 1998. All rights reserved.
SQL2 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Ein neues Tupel hinzufügen
Das INSERT Statement
50 DEVELOPMENT DETROIT
“…füge ein neues
Tupel in die DEPT
Tabelle ein…”
Neues Tupel
DEPT
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
DEPT
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
• Einfügen neuer Tupel mit INSERT
INSERT INTO
VALUES
table [(column [, column...])]
(value [, value...]);
• Es kann jeweils nur ein Tupel mit dieser
Anweisung eingefügt werden.
50 DEVELOPMENT DETROIT
SQL3 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
SQL4 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Einfügen neuer Tupel
• Für jedes neue Tupel muss eine
INSERT-Anweisung mit den Werten
erstellt werden.
• Die Werte müssen in der Reihenfolge
der Attribute aufgeführt werden.
• Optional dazu kann eine Liste der
Attribute in anderer Reihenfolge
angegeben werden.
SQL> INSERT INTO
2 VALUES
1 row created.
dept (deptno, dname, loc)
(50, 'DEVELOPMENT', 'DETROIT');
• Zeichen- und Datumswerte werden in
einfache Apostrophe eingeschlossen.
SQL5 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Eingabe spezieller Werte
Die SYSDATE -Funktion erzeugt das
gegenwärtige Datum und die Zeit
SQL> INSERT INTO
2
3
4 VALUES
5
6
1 row created.
emp (empno, ename, job,
mgr, hiredate, sal, comm,
deptno)
(7196, 'GREEN', 'SALESMAN',
7782, SYSDATE, 2000, NULL,
10);
SQL7 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Einfügen von Tupeln mit NULLWerten
• Implizite Methode: Weglassen der
Spalten aus der Attributsliste.
SQL> INSERT INTO
2 VALUES
1 row created.
dept (deptno, dname )
(60, 'MIS');
• Explizite Methode: mit dem Schlüsselwort NULL.
SQL> INSERT INTO
2 VALUES
1 row created.
dept
(70, 'FINANCE', NULL);
SQL6 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Eingabe spezieller Datenwerte
• Einen neuen Angestellten hinzufügen
SQL> INSERT INTO
2 VALUES
3
4
1 row created.
emp
(2296,'AROMANO','SALESMAN',7782,
TO_DATE('FEB 3,97', 'MON DD, YY'),
1300, NULL, 10);
• Verify your addition.
EMPNO ENAME
JOB
MGR
HIREDATE SAL COMM DEPTNO
----- ------- -------- ---- --------- ---- ---- -----2296 AROMANO SALESMAN 7782 03-FEB-97 1300
10
SQL8 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Werteingabe mit
Substitutionsvariablen
Erzeuge ein interaktives Skript mit
SQL*Plus Substitutionsparametern.
SQL> INSERT INTO
2 VALUES
3
dept (deptno, dname, loc)
(&department_id,
'&department_name', '&location');
Erzeuge ein Skript mit
angepassten PROMPTs
• ACCEPT speichert die Werte in der
Variablen.
• PROMPT gibt den Text aus.
ACCEPT
department_id PROMPT 'Bitte geben Sie die
Abteilungsnummer ein:'
department_name PROMPT 'Bitte geben Sie den
ACCEPT
Abteilungsnamen ein:'
location PROMPT Bitte geben Sie den
Ort ein:'
Enter value for department_id: 80
Enter value for department_name: EDUCATION
Enter value for location: ATLANTA
ACCEPT
1 row created.
INSERT INTO
VALUES
SQL9 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Kopieren von Tupel aus anderen
Tabellen
SQL10 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Veränderung von Daten in einer
Tabelle
EMP
EMPNO ENAME
• Shreibe das INSERT Statement mit einer
Unterabfrage.
SQL> INSERT INTO managers(id, name, salary, hiredate)
2
SELECT empno, ename, sal, hiredate
3
FROM
emp
4
WHERE job = 'MANAGER';
3 rows created.
• keine VALUES Klausel.
• Die Anzahl der Spalten muss gleich der
in der Unterabfrage sein.
SQL11 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
dept (deptno, dname, loc)
(&department_id, '&department_name',
'&location');
7839
7698
7782
7566
...
KING
BLAKE
CLARK
JONES
JOB
...
DEPTNO
“…ändern eines Tupels
der EMP Tabelle…”
PRESIDENT
MANAGER
MANAGER
MANAGER
10
30 in
10
20
EMP
EMPNO ENAME
7839
7698
7782
7566
...
KING
BLAKE
CLARK
JONES
JOB
PRESIDENT
MANAGER
MANAGER
MANAGER
SQL12 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
...
DEPTNO
10
30
20
10
20
Das UPDATE Statement
• verändern existierender Tupel mit dem
UPDATE Statement.
UPDATE
SET
[WHERE
table
column = value [, column = value]
condition];
• verändern von mehreren Tupeln ist
erforderlich
Ändern von Tupeln in einer
Tabelle
• Ein oder mehrere Tupel werden durch
Angaben in der WHERE-Klausel
geändert
SQL> UPDATE emp
2 SET
deptno = 20
3 WHERE
empno = 7782;
1 row updated.
• Alle Tupel, die den Bedingungen der
WHERE-Klausel genügen werden
geändert.
SQL> UPDATE employee
2 SET
deptno = 20;
14 rows updated.
SQL13 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Veränderung mit mehrspaltigen
Unterabfragen
Ändern des Jobs und der Abteilung des
Angestellten 7698 zu denen des Angestellten
7499.
SQL> UPDATE emp
2 SET
(job, deptno) =
3
(SELECT job, deptno
4
FROM
emp
5
WHERE
empno = 7499)
6 WHERE
empno = 7698;
1 row updated.
SQL15 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
SQL14 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Veränderung der Tupel, basierend
auf einer anderen Tabelle
Mit Unterabfragen.
SQL> UPDATE employee
2 SET
deptno =
3
4
5 WHERE
job
=
6
7
2 rows updated.
(SELECT
FROM
WHERE
(SELECT
FROM
WHERE
deptno
emp
empno = 7788)
job
emp
empno = 7788);
SQL16 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Verändern von Tupeln:
Integritätsverletzung
SQL> UPDATE
2 SET
3 WHERE
emp
deptno = 55
deptno = 10;
e
5
r5
e
t
x is
ier
t
ch
i
tn
Löschen von Tupeln
DEPT
DEPTNO
-----10
20
30
40
50
60
...
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
DEVELOPMENT DETROIT
MIS
A
Das DELETE Statement
Existierende Tupel werden mit DELETE
aus der Tabelle gelöscht.
DELETE [FROM]
[WHERE
table
condition];
DEPT
DEPTNO
-----10
20
30
40
60
...
m
UPDATE emp
um
*
n
s
ERROR at line 1:ng
u
ORA-02291: integrity
constraint (USR.EMP_DEPTNO_FK)
il
te
violated - bparent
key not found
SQL17 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
“…lösche ein Tupel aus
der DEPT Tabelle…”
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
MIS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
SQL18 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Löschen von Tupeln
• Spezielle Tupel werden gelöscht, wenn
sie den Bedingungen der WHEREKlausel genügen.
SQL> DELETE FROM
2 WHERE
1 row deleted.
department
dname = 'DEVELOPMENT';
Ohne WHERE-Klausel werden alle Tupel
gelöscht
SQL> DELETE FROM
4 rows deleted.
SQL19 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
department;
SQL20 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Löschen von Tupeln basierend
auf einer anderen Tabelle
Verwendung von Subqueries
SQL> DELETE FROM
2 WHERE
3
4
5
6 rows deleted.
employee
deptno =
(SELECT
FROM
WHERE
deptno
dept
dname ='SALES');
SQL21 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Löschen von Tupeln:
Integritätsverletzung
lt, er
hä ein
t
n
SQL> DELETE FROM
dept
l e er in
e
2 WHERE
deptno = 10; ss ies
lü d
ch nn t.
s
e is
r
mä n, w sel
i
r
DELETE FROM dept
e
s
n P erd hlü
*
e
c
w
n
s
t
ERROR at line 1: ei
s sconstraint
ch emd
a
ORA-02292: integrity
(USR.EMP_DEPTNO_FK)
r
l, d grecord
elö le Ffound
violated - child
e
up cht bel
T
i
a
n
Ei nn n en T
k a de r
an
SQL22 basierend auf OAI-Kurs Copyright © Oracle Corporation, 1998. All rights reserved
Herunterladen