n n n INSERT UPDATE DELETE 2 INSERT

  • Slides: 26
Download presentation

목차 n n n INSERT 문 UPDATE 문 DELETE 문 2

목차 n n n INSERT 문 UPDATE 문 DELETE 문 2

INSERT 문의 기본 형식 INSERT INTO 테이블명 [컬럼명, VALUES [값, ] ] INSERT 문의

INSERT 문의 기본 형식 INSERT INTO 테이블명 [컬럼명, VALUES [값, ] ] INSERT 문의 예 q dept 테이블을 이용하여 dept 01 테이블 생성 SQL> CREATE TABLE dept 01 AS SELECT * FROM dept; q dept 01 에 (60, 회계과, 서울) 추가 SQL> INSERT INTO dept 01 (deptid, dname, loc) VALUES (60, '회계과', '서울'); 3

오류를 발생하게 되는 예 기술된 컬럼의 수와 values 다음의 값의 수가 일치해야 함. SQL>

오류를 발생하게 되는 예 기술된 컬럼의 수와 values 다음의 값의 수가 일치해야 함. SQL> INSERT INTO dept 01(deptid, dname, loc) VALUES (60, '회계과'); >>> not enough values SQL> INSERT INTO dept 01(deptid, dname, loc) VALUES (70, '회계과', '서울', 50); >>> too many values 4

오류를 발생하게 되는 예 –cont’d SQL> INSERT INTO dept 01 (num, dname, loc) VALUES

오류를 발생하게 되는 예 –cont’d SQL> INSERT INTO dept 01 (num, dname, loc) VALUES (60, '회계과', '서울'); >>> invalid column name Num 이라는 컬럼명이 없으므로 SQL> INSERT INTO dept 01 (deptid, dname, loc) VALUES ('60', '회계과', 서울); here >>> column not allowed Loc 데이터타입의 불일치 5

NULL 값 입력 SQL> INSERT INTO dept 01(deptid, dname) VALUES (90, '총무과'); 컬럼명을 기술하지

NULL 값 입력 SQL> INSERT INTO dept 01(deptid, dname) VALUES (90, '총무과'); 컬럼명을 기술하지 않으면 null 값으로 됨 SQL> INSERT INTO dept 01 (deptid, dname, loc) VALUES (80, '서무과', NULL); null 예약어 사용 SQL> INSERT INTO dept 01 (deptid, dname, loc) VALUES (95, '도로관리부', ''); ‘’ 로 입력 7

치환변수 –cont’d q 테이블명과 컬럼명을 입력받아 출력 SQL>SELECT 2 FROM &columnn &tablen; Enter value

치환변수 –cont’d q 테이블명과 컬럼명을 입력받아 출력 SQL>SELECT 2 FROM &columnn &tablen; Enter value for columnn: deptid, dname Enter value for tablen: dept q 조건을 입력받아 출력 SQL>SELECT * 2 FROM emp 3 WHERE &stmt; Enter value for stmt: ename=‘이수미’ 9

치환변수 –cont’d q 급여가 입력받은 액수보다 많이 받는 사원의 정보 출력 SQL>SELECT * 2

치환변수 –cont’d q 급여가 입력받은 액수보다 많이 받는 사원의 정보 출력 SQL>SELECT * 2 FROM emp 3 WHERE sal > &sal_value; Enter value for sal_value: 1500 SQL> / Enter value for sal_value: 3000 10

서브 쿼리로 로우 입력하기 q dept테이블에서 구조만 복사하여 dept 02 테이블 생성 SQL> DROP

서브 쿼리로 로우 입력하기 q dept테이블에서 구조만 복사하여 dept 02 테이블 생성 SQL> DROP TABLE dept 02; SQL> CREATE TABLE dept 02 AS SELECT * FROM dept WHERE 1=2 ; q dept테이블의 모든 행을 dept 02 테이블에 복사 SQL> INSERT INTO dept 02 SELECT * FROM dept; SQL> SELECT * FROM dept 02; 12

다중 테이블에 다중 로우 입력하기 INSERT ALL 로 서브쿼리의 결과를 조건없이 여러 테이블에 동시에

다중 테이블에 다중 로우 입력하기 INSERT ALL 로 서브쿼리의 결과를 조건없이 여러 테이블에 동시에 입력 q 사원테이블에서 사원번호, 이름, 입사일자로 구성된 emp_hir 생성 SQL> CREATE TABLE emp_hir AS SELECT empid, empname, hire_date FROM emp WHERE 1=0 ; SQL> SELECT * FROM emp_hir; q 사원테이블에서 사원번호, 이름, 상사로 구성된 emp_mgr 생성 SQL> CREATE TABLE emp_mgr AS SELECT empid, empname, mgr FROM emp WHERE 1=0 ; SQL> SELECT * FROM emp_mgr; 13

다중 테이블에 다중 로우 입력하기 q 부서번호가 20보다 큰 사원들의 사원번호, 이름, 입사일자는 emp_hir

다중 테이블에 다중 로우 입력하기 q 부서번호가 20보다 큰 사원들의 사원번호, 이름, 입사일자는 emp_hir 로, 사원번호, 이름, 상사는 emp_mgr로 입력 SQL> INSERT ALL INTO emp_hir values( empid, empname, hire_date) INTO emp_mgr values( empid, empname, mgr) SELECT empid, empname, hire_date , mgr FROM emp WHERE deptid > 20; SQL> SELECT * FROM emp_hir; SQL> SELECT * FROM emp_mgr; 서브쿼리의 컬럼명과 입력되는 테이블의 컬럼명이 동일해야 함 14

조건(WHEN)에의해 다중테이블에 다중로우 입력하기 INSERT ALL로 서브쿼리의 결과를 WHEN조건에 따라 해당테이블에 입력 q사원번호, 이름,

조건(WHEN)에의해 다중테이블에 다중로우 입력하기 INSERT ALL로 서브쿼리의 결과를 WHEN조건에 따라 해당테이블에 입력 q사원번호, 이름, 입사일자로 구성된 빈 테이블인 emp_hir 02 생성 SQL> CREATE TABLE emp_hir 02 AS SELECT empid, empname, hire_date FROM emp WHERE 1=0 ; q사원번호, 이름, 급여로 구성된 빈 테이블인 emp_sal 생성 SQL> CREATE TABLE emp_sal AS SELECT empid, empname, sal FROM emp WHERE 1=0 ; 15

조건(when)에의해 다중테이블에 다중로우 입력하기 –cont’d q 1982년 이후 입사한 사원들의 사원번호, 이름, 입사일자는 emp_hir

조건(when)에의해 다중테이블에 다중로우 입력하기 –cont’d q 1982년 이후 입사한 사원들의 사원번호, 이름, 입사일자는 emp_hir 02로, 급여가 2000보다 많은 사원번호, 이름, 급여는 emp_sal로 입력 SQL> INSERT ALL WHEN hire_date > ‘ 1982/01/01’ THEN INTO emp_hir 02 values( empid, empname, hire_date) WHEN sal > 2000 THEN INTO emp_sal values(empid, empname, sal) SELECT empid, empname, hire_date , sal FROM emp; SQL> SELECT * FROM emp_hir 02; SQL> SELECT * FROM emp_sal; 16

PIVOTING에의해 다중테이블에 다중로우 입력하기 q 일일 판매 실적을 기록하는 테이블 생성 SQL> CREATE TABLE

PIVOTING에의해 다중테이블에 다중로우 입력하기 q 일일 판매 실적을 기록하는 테이블 생성 SQL> CREATE TABLE sales( sales_id NUMBER(4), Week_id NUMBER(4), mon_sales NUMBER(8, 2), tue_sales NUMBER(8, 2), wed_sales NUMBER(8, 2), thu_sales NUMBER(8, 2), fri_sales NUMBER(8, 2)); SQL> DESC sales; SQL> CREATE TABLE sales_data( sales_id NUMBER(4), Week_id NUMBER(4), daily_id NUMBER(4), sales NUMBER(8, 2)); 17

PIVOTING에의해 다중테이블에 다중로우 입력하기 q sales 테이블에 주간 판매 실적 추가 SQL> INSERT INTO

PIVOTING에의해 다중테이블에 다중로우 입력하기 q sales 테이블에 주간 판매 실적 추가 SQL> INSERT INTO sales Values(1001, 1, 200, 100, 300, 400, 500); SQL> INSERT INTO sales Values(1002, 2, 100, 300, 200, 500, 350); SQL> SELECT * FROM sales; q 요일 구분 컬럼을 추가 SQL> INSERT ALL INTO sales_data VALUES(sales_id, week_id, 1, mon_sales) INTO sales_data VALUES(sales_id, week_id, 2, tue_sales) INTO sales_data VALUES(sales_id, week_id, 3, wed_sales) INTO sales_data VALUES(sales_id, week_id, 4, thu_sales) INTO sales_data VALUES(sales_id, week_id, 5, fri_sales) SELECT sales_id, Week_id, mon_sales, tue_sales, wed_sales, thu_sales, fri_sales FROM sales ; SQL>SELECT * FROM sales_data; 18

UPDATE 문의 기본 형식 UPDATE 테이블명 SET 컬럼명=변경할 값 [WHERE 조건]; UPDATE 문의 예

UPDATE 문의 기본 형식 UPDATE 테이블명 SET 컬럼명=변경할 값 [WHERE 조건]; UPDATE 문의 예 SQL> CREATE TABLE dept 02 AS SELECT * FROM dept; SQL> SELECT * FROM dept 02; q 11번 부서의 위치를 대전으로 변경 SQL> UPDATE dept 02 SET loc=‘대전’ WHERE deptid=11; 19

UPDATE 문 전체 행에 대한 데이터 변경하기 qemp 테이블에서 사원번호, 이름, 급여를 추출하여 em

UPDATE 문 전체 행에 대한 데이터 변경하기 qemp 테이블에서 사원번호, 이름, 급여를 추출하여 em 06 생성 SQL> DROP TABLE em 06; SQL> CREATE TABLE em 06 AS SELECT empid, empname, sal FROM emp; q 모든 사원의 급여를 10% 인상하라 SQL> UPDATE em 06 SET sal=sal*1. 1; 20

서브 쿼리를 이용한 데이터 수정하기 q dept 테이블에서 dept 03 생성 SQL> CREATE TABLE

서브 쿼리를 이용한 데이터 수정하기 q dept 테이블에서 dept 03 생성 SQL> CREATE TABLE dept 03 AS SELECT SQL> SELECT * FROM dept; dept 03; q 21번 부서의 이름과 위치를 41번 부서의 이름과 위치로 변경 SQL> UPDATE dept 03 SET (dname, loc) = (SELECT dname, loc FROM dept WHERE deptid=41) WHERE deptid=21; 21

DELETE 문의 기본 형식 DELETE (FROM) 테이블명 WHERE 조건절; DELETE 문의 예 q 31

DELETE 문의 기본 형식 DELETE (FROM) 테이블명 WHERE 조건절; DELETE 문의 예 q 31 번 부서 삭제 SQL> DELETE dept 03 WHERE deptid=31; 22

서브 쿼리를 이용한 데이터 삭제하기 SQL> CREATE TABLE em 07 AS SELECT * FROM

서브 쿼리를 이용한 데이터 삭제하기 SQL> CREATE TABLE em 07 AS SELECT * FROM emp; q 영업 부서의 사원들을 모두 삭제하라 SQL> DELETE FROM em 07 WHERE deptid = (SELECT deptid FROM dept WHERE dname=‘영업'); 23

MERGE (-cont’d) qem 09 테이블에 새로운 행 추가 SQL> INSERT INTO em 09 VALUES(18000,

MERGE (-cont’d) qem 09 테이블에 새로운 행 추가 SQL> INSERT INTO em 09 VALUES(18000, ’SYJ’, ‘TOP’, 1200, 16778, ‘ 2005/01/02’, 21) q em 08테이블에 em 09테이블 합병 SQL> MERGE INTO em 08 e USING em 09 s ON(e. empid=s. empid) WHEN MATCHED THEN UPDATE SET >Select * from em 08 사번이 같은 게 있으면 em 09 테이블 내용으로 수정(update) e. empname = s. empname, e. duty=s. duty, e. mgr=s. mgr, e. hire_date=s. hire_date, e. sal=s. sal, e. bonus=s. bonus, e. deptid=s. deptid WHEN NOT MATCHED THEN INSERT VALUES(s. empid, s. empname, s. duty, s. sal, s. bonus, s. mgr, s. hire_date, s. deptid); 사번이 같은 게 없으면 em 09 테이블 내 용을 삽입(Insert) 25

MERGE (–cont’d) qem 09 테이블 조회 SQL> SELECT * FROM em 09; qem 08

MERGE (–cont’d) qem 09 테이블 조회 SQL> SELECT * FROM em 09; qem 08 테이블 조회 SQL> SELECT * FROM em 08; MERGE 에 의해 기존의 행이 갱신되고 추가된 것 확인 26