출처 http://www.gurubee.net/lecture/1016

INSERT

INSERT 명령어는 테이블 안에 데이터를 삽입하는 역할을 한다.


INSERT 문법

INSERT INTO table_name(column1, column2, ...)

VALUES (데이터, '데이터',...);


INSERT INTO table_name(column1, column2,...)

SELECT column1, column2,...

FROM table_name

WHERE 조건 ;


- 실제 데이터는 VALUES 괄호()안에 입력하고 문자열은 단일 따옴표(' ')로 둘러싼다.

- 각각의 데이터 구분은 ","로 한다.

- 테이블 이름 옆에 () 생략시에는 자동으로 모든 컬럼을 VALUES() 안에 입력 시킨다. 


INSERT 예제

-- 모든 데이터를 입력할 경우

SQL> INSERT INTO emp

     VALUES(7369, 'SMITH', 'CLERK', 7902, TO_DATE('80/12/17'),  800, NULL,  20, NULL);


-- 원하는 데이터만 입력할 경우

SQL> INSERT INTO dept (deptno, dname)

     VALUES(10, 'ACCOUNTING' );


SQL> INSERT INTO dept (deptno, dname)

  2  VALUES(10, 'ACCOUNTING');


1 개의 행이 만들어졌습니다.


SQL> select * from dept;


    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON


-- SELECT 문장을 이용한 INSERT

SQL> INSERT INTO dept2

     SELECT * FROM dept;



SQL> INSERT INTO dept2

  2  SELECT * FROM dept;

INSERT INTO dept2

*

1행에 오류:

ORA-00001: 무결성 제약 조건(SCOTT.DEPT_PK_DEPTNO)에 위배됩니다 -> dept2 에 기본키가 지정되있는데 dept1에서 deptno의 값이 10, 10 으로 중복되어있었다. ( 위의 INSERT 예제 실행시,)


SQL> select * from dept;


    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON


SQL> DELETE FROM dept

  2  WHERE deptno = 10 AND dname ='ACCOUNTING' AND loc='';


0 행이 삭제되었습니다.


SQL> DELETE FROM dept

  2  WHERE deptno = 10 AND dname ='ACCOUNTING' AND loc=NULL;


0 행이 삭제되었습니다.


SQL> DELETE FROM dept

  2  WHERE deptno = 10 AND dname ='ACCOUNTING' AND TRIM(LOC) IS NULL;


1 행이 삭제되었습니다.


SQL> SELECT * FROM dept;


    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING     NEW YORK

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON


다음과 같이 공백을 조회하고 싶으면 WHERE TRIM(LOC) IS NULL;을 사용하면됨



중복된 ROW 데이터 삭제 방법


-- 중복된 데이터중에서 ROWID가 큰 값(나중에 등록된 데이터) 제거

SQL> DELETE FROM emp a

     WHERE ROWID > (SELECT MIN(ROWID) 

                    FROM emp b

                    WHERE b.empno = a.empno);

  

  

-- 나중에 들어온 데이터를 살릴경우

SQL> DELETE FROM emp a

     WHERE ROWID < (SELECT MAX(ROWID) 

                    FROM emp b

                    WHERE a.empno = b.empno);



SQL> DELETE FROM dept a

  2  WHERE ROWID > (SELECT MIN(ROWID)

  3             FROM dept b

  4             WHERE a.deptno = b.deptno);


1 행이 삭제되었습니다.


SQL> SELECT * FROM dept

  2  ;


    DEPTNO DNAME          LOC

---------- -------------- -------------

        10 ACCOUNTING

        20 RESEARCH       DALLAS

        30 SALES          CHICAGO

        40 OPERATIONS     BOSTON



UPDATE

테이블 안의 데이터를 수정한다.

UPDATE table_name

SET column1 = 값(고칠내용), column2 = 값, ...

WHERE 조건


--사원번호가 7902번인 사원의 부서 번호를 30으로 수정

SQL> UPDATE emp

        SET deptno = 30

        WHERE empno = 7902;


-- 부서번호 20의 사원들 급여가 10% 인상됨

SQL> UPDATE emp

        SET sal = sal * 1.1

        WHERE deptno = 20;


-- 모든 사원의 입사일을 오늘로 수정

SQL> UPDATE emp

        SET hiredate =  SYSDATE


DELETE

사용하지 않는 데이터를 삭제한다.

DELETE FROM table_name WHERE 조건;


-- 사원번호가 7902번인 사원의 데이터를 삭제.      

SQL> DELETE FROM emp

     WHERE empno = 7902 ;


-- 평균급여보다 적게 받는 사원 삭제

SQL> DELETE FROM emp

     WHERE sal < (SELECT AVG(sal) FROM emp);

        

-- 모든 행이 삭제

SQL> DELETE FROM emp; 


블로그 이미지

잉비니

,