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