안녕하세요.
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; -- 롤백하고 전체조회 해봐도 데이터가 비어있다.