반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

Yeonee's Story

Oracle SQL 요약정리 - UPDATE(UPDATE SET WHERE,서브쿼리), DELETE, TRUNCATE, ROLLBACK, TRUNCATE DELETE차이 비교 본문

Oracle SQL/Oracle SQL 요약정리

Oracle SQL 요약정리 - UPDATE(UPDATE SET WHERE,서브쿼리), DELETE, TRUNCATE, ROLLBACK, TRUNCATE DELETE차이 비교

yeonee 여니 2023. 6. 9. 21:48
728x90
반응형
SMALL

안녕하세요.
https://blog.naver.com/sysysy0302 여니입니다 :)

 

2.  UPDATE
    
    테이블에 기록된 기존의 데이터를 수정하는 구문
    
    [표현법]
    UPDATE 테이블명
    SET 컬럼명 = 바꿀값,
        컬럼명 = 바꿀값,
        ... -- 여러개의 칼럼값을 동시변경 가능 이때 AND 가 아니라 , 로 나열한다
    WHERE 조건; -- WHERE절은 생략 가능한데, 생략시 모든테이블의 모든행이 바뀌게 된다.

ex)
-- DEPT_COPY 테이블에서 D9부서의 부서명을 전략기획팀으로 수정
UPDATE DEPT_COPY
SET DEPT_TITLE = '전략기획팀'; -- 9개 행이 수정
-- 전체 행의 모든 DEPT_TITLE값들이 모두 전략기획팀으로 수정됨. 이렇게 하면 안되구!

UPDATE DEPT_COPY
SET DEPT_TITLE = '전략기획팀' 
WHERE DEPT_ID = 'D9'; -- 1행이 수정

SELECT * FROM DEPT_COPY; -- 잘 변경되었는지 체크하기


-- 참고) 변경사항에 대해서 되돌리는 명령어 : ROLLBACK;
ROLLBACK; -- 되돌리다 (UPDATE전으로)


UPDATE시 서브쿼리 사용
    서브쿼리를 수행한 결과값으로 기존의 값으로부터 변경하겠다.
    
    - CREATE시에 서브쿼리 사용시 : 서브쿼리 수행한 결과로 테이블을 만들겠다.
    - INSERT시에 서브쿼리 사용시 : 서브쿼리 수행한 결과를 해당 테이블 새롭게 삽입하겠다.

    [표현법]
    UPDATE 테이블명
    SET 칼럼명 = (서브쿼리)
    WHERE 조건;

-- 주의사항 : UPDATE 시에도 변경할 값에 대해서 해당 칼럼의 제약조건에 위배되면 안됨.

ex) -- 한가지 내용만 변경시
UPDATE EMP_SALARY
SET DEPT_CODE = (
                    SELECT DEPT_CODE
                    FROM EMPLOYEE
                    WHERE EMP_NAME = '선동일'
                )
WHERE EMP_NAME = '김소연';

ex) -- 두가지 내용 변경시
UPDATE EMP_SALARY
SET (SALARY, BONUS) = (SELECT SALARY, BONUS FROM EMP_SALARY WHERE EMP_NAME = '유재식')
WHERE EMP_NAME = '방명수';

ex) -- UPDATE 제약조건 위배(1)
UPDATE EMPLOYEE
SET EMP_ID = 200
WHERE EMP_NAME = '송종기';
-- unique constraint (KH.EMPLOYEE_PK) violated : PRIMARY KEY 제약조건 위배.

ex) -- UPDATE 제약조건 위배(2)
UPDATE EMPLOYEE
SET EMP_ID = NULL
WHERE EMP_ID = 200;
-- ORA-01407: cannot update ("KH"."EMPLOYEE"."EMP_ID") to NULL 
-- NOT NULL 제약조건 위배.


4. DELETE
    
    테이블에 기록된 데이터를 "행"단위로 삭제하는 구문
    
    [표현법]
    DELETE FROM 테이블명
    WHERE 조건; -- WHERE절 생략 가능. 단, 생략시 해당 테이블의 모든 행이 삭제.

ROLLBACK; -- 롤백시 마지막 커밋시점으로 돌아간다.

ex)-- EMPLOYEE 테이블로부터 김소연, 김소연2 사원의 정보를 지우기
DELETE FROM EMPLOYEE
WHERE EMP_NAME IN ('김소연','김소연2');

ex)-- DEPARTMENT테이블로부터 DEPT_ID가 D1인부서를 삭제
DELETE FROM DEPARTMENT
WHERE DEPT_ID = 'D1';
-- 만약에 EMPLOYEE 테이블의 DEPT_CODE 컬럼에서 외래키 제약조건이 추가되었을 경우, 삭제가 되지 않았을것!

DELETE FROM DEPARTMENT
WHERE DEPT_ID = 'D3'; -- 외래키 제약조건이 자식테이블에서 걸려있었더라도, 사용하지 않았으므로 삭제가 잘 됐을것!


* TRUNCATE : 테이블의 전체 행을 다 삭제할때 사용하는 구문 
                         DELETE 구문보다 수행속도가 훨씬 빠름 
                         별도의 조건을 제시 불가
                         ROLLBACK이 불가능함.(신중하게 삭제해야한다)
                    
    [표현법]
    TRUNCATE TABLE 테이블명;
    


 * DELETE 구문과 비교
    
        TRUNCATE TABLE 테이블명;           |           DELETE FROM 테이블명;
    ----------------------------------------------------------------------------
        별도의 조건제시 불가(WHERE X)      |          특정조건 제시 가능(WHERE O)
        수행속도가 빠름                                  |          수행속도가 느림
        ROLLBACK 불가능                             |           ROLLBACK 가능

ex)
SELECT * FROM EMP_SALARY;

DELETE FROM EMP_SALARY;

ROLLBACK; --DELETE문은 롤백 가능.

TRUNCATE TABLE EMP_SALARY; -- 롤백하고 전체조회 해봐도 데이터가 비어있다.

728x90
반응형
LIST