1. 데이터 입력하기 - INSERT
테이블에 새로운 데이터를 입력할 때 INSERT문을 사용한다.
INSERT INTO 테이블명 (col1, col2, col3, ...) VALUES (value1, value2, value3, ...)
INSERT INTO 테이블명 (value1, value2, value3, ...)
INSERT문을 사용할때 INSERT INTO 다음 테이블명을 입력하고, 괄호안에 데이터를 컬럼명 순서대로 기술한다. 만약 괄호를 쓰지 않으면 전체 컬럼에 모두 데이터를 입력해야 한다. 이때 숫자는 그대로 기술해도 되지만 문자와 날짜는 작은 따옴표로 감싸줘야한다.
EX ) 사원 번호 2812, 사원 이름 JACK, 월급 3500, 입사일 2019년 6월 5일, 직업 ANALYST인 사원의 정보를 사원 테이블에 입력하시오.
INSERT INTO EMP (EMPNO, ENAME, SAL, HIREDATE, JOB)
VALUES (2812, 'JACK', 3500, TO_DATE('2019/06/05','RRRR/MM/DD'), 'ANALYST')
테이블에 NULL값을 입력하는 방법
1. 암시적으로 입력
테이블명을 입력한 후 컬럼명을 작성할 때, 전체 컬럼이 아닌 일부 컬럼에 대한 정보만을 입력하여 제외된 컬럼에 대해서는 NULL값을 가지게 하는 방법이 있다.
TABLE1이 COL1, COL2, COL3, COL4에 대한 데이터를 가진 테이블이라 할 때
- EX ) INSERT INTO TABLE1 (COL1, COL2, COL3) VALUES (1234, ‘ABC’, '가나다');
2. 명시적으로 입력 - NULL
INSERT문의 VALUES절에 입력하고 싶은 컬럼의 값에 NULL을 직접 기술하는 방법
- EX ) INSERT INTO TABLE1 (COL1, COL2, COL3, COL4) VALUES (1234, 'ABC', NULL, NULL);
3. 명시적으로 입력 - ‘’
INSERT문의 VALUES절에 입력하고 싶은 컬럼의 값에 ‘’을 공백없이 직접 기술하는 방법
- EX ) INSERT INTO TABLE1 (COL1, COL2, COL3, COL4) VALUES (1234, 'ABC', '', '');
2. 데이터 수정하기 - UPDATE
테이블의 데이터를 수정할 때 UPDATE문을 사용한다.
UPDATE 테이블명
SET 수정할컬럼 = 수정할 값
(WHERE 수정 조건)
EX ) SCOTT의 월급을 3200으로 수정하라
UPDATE EMP
SET SAL = 3200
WHERE ENAME = 'SCOTT';
만약 ENAME = ‘SCOTT’이라는 조건이 없었다면 모든 사원의 월급이 3200이 된다.
여러 값을 동시에 수정하기
EX ) SCOTT의 월급과 커미션을 수정하라
UPDATE EMP
SET SAL = 5000, COMM = 200
WHERE ENAME = 'SCOTT';
SET절에서 변경할 컬럼은 콤마로 구분해 작성하여 월급과 커미션을 동시에 수정한다.
서브쿼리 사용
EX ) SCOTT의 월급을 KING의 월급으로 수정하라
UPDATE EMP
SET SAL = (SELECT SAL FROM EMP WHERE ENAME = 'KING')
WHERE ENAME = 'SCOTT';
SET절에 서브쿼리를 사용해 SCOTT의 월급을 KING의 월급과 같게 수정할 수 있다. SET절 뿐만 아니라 UPDATE, WHERE절에서도 서브쿼리를 사용할 수 있다.
3. 데이터 삭제하기 - DELETE, TRUNCATE, DROP
테이블의 데이터를 삭제할 때 DELETE문을 사용한다.
DELETE FROM 테이블명
(WHERE 데이터 삭제 조건)
WHERE절을 작성하지 않으면 모든 행이 삭제된다.
데이터를 삭제하는 명령은 DELETE 외에도 TRUNCATE, DROP이 있다.
TRUCATE와 DROP은 DML문인 DELETE와 다르게 DDL문이다.
TRUNCATE
TRUNCATE는 데이터를 한번에 삭제한다. 데이터 삭제 후 에는 테이블 구조만 남긴다. 데이터 삭제후에는 ROLLBACK이 불가능해 DELETE보다 처리속도가 빠르다.
TRUNCATE TABLE 테이블명;
DROP
DROP또한 테이블 전체를 한번에 삭제한다. 그러나 TRUCATE와 다르게 저장 구조도 삭제되어 삭제 후에 취소(ROLLBACK)은 불가능하지만 플래쉬백(FLASHBACK)으로 테이블 복구가 가능하다.
DROP TABLE 테이블명;
DELETE TRUNCATE DROP
데이터 | 삭제 | 삭제 | 삭제 |
저장 공간 | 남김 | 삭제 | 삭제 |
저장 구조 | 남김 | 남김 | 삭제 |
ROLLBACK 여부 | 가능 | 불가능 | 불가능 |
FALSHBACK 여부 | 가능 | 불가능 | 가능 |
4. 데이터 저장 및 취소하기 - COMMIT, ROLLBACK
COMMIT 명령어는 COMMIT 이전에 수행했던 DML 작업들을 데이터베이스에 영구히 반영한다.
ROLLBACK 명령어는 마지막 COMMIT 명령어를 수행한 이후 DML문을 취소한다.
EX ) COMMIT과 ROLLBACK 예제
-- 새로운 사원 'JACK'의 정보를 INSERT
INSERT INTO EMP(EMPNO, ENAME, SAL, DEPTNO)
VALUES(1122, 'JACK', 3000, 20);
COMMIT;
-- COMMIT이후 SCOTT사원의 월급정보를 수정
UPDATE EMP
SET SAL = 4000
WHERE ENAME = 'SCOTT';
ROLLBACK;
/* ROLLBACK 이후 JACK과 SCOTT의 정보를 조회하면
SCOTT의 월급정보가 취소되었음을 확인할 수 있다. */
SELECT *
FROM EMP
WHERE ENAME IN ('JACK','SCOTT');
5. 데이터 입력, 수정, 삭제 한번에 하기 - MERGE
테이블의 데이터를 입력, 수정, 삭제를 한 번에 수행할때 MERGE문을 사용한다.
MERGE TABLE target_table T
USING source_table S
ON 조건
--MERGE UPDATE절
WHEN MATCHED THEN
UPDATE SET T.COL1 = S.COL2
-- MERGE INSERT절
WHEN NOT MATCHED THEN
INSERT () VALUES ()
MERGE TABLE 다음에 오는 테이블명은 MERGE 대상이 되는 TAGET 테이블명을 작성한다.
USING 다음에는 SOURCE 테이블명을 작성한다. SOURCE 테이블로부터 데이터를 읽어와 TARGET 테이블을 MERGE한다.
WHEN MATCHED THEN은 조인에 성공하면 수행되며, WHEN NOT MATCHED THEN은 조인에 실패시 수행되는 절이다
EX ) 사원테이블(EMP)에 부서위치 컬럼을 추가하고, 부서 테이블(DEPT)을 이용해 해당 사원의 부서 위치로 값이 갱신되도록 하라. (만약 부서테이블에는 존재하는 부서인데 사원 테이블에 없는 부서라면 새롭게 사원테이블에 입력한다.)
-- 예제에 앞서 사원테이블에 LOC 컬럼을 추가한다
ALTER TABLE EMP
ADD LOC VARCHAR2(10);
MERGE INTO EMP E
USING DEPT D
ON (E.DEPTNO = D.DEPTNO)
WHEN MATCHED THEN -- UPDATE
UPDATE SET E.LOC = D.LOC
WHEN NOT MATCHED THEN -- INSERT
INSERT (E.EMPNO, E.DEPNO, E.LOC) VALUES (1111, D.DEPNO, D.LOC);
MERGE UPDATE절만 수행하고 싶을땐 WHEN MATHCED THEN 이후 UPDATE문을 작성한다.
MERGE INTO EMP E
USING DEPT D
ON (E.DEPTNO = D.DEPTNO)
WHEN MATCHED THEN
UPDATE SET E.LOC = D.LOC;
-- MERGE문 없이 수행할 경우
UPDATE EMP E
SET LOC = (SELECT LOC FROM DEPT D WHERE D.DEPTNO = E.DEPTNO);
'Study > SQL' 카테고리의 다른 글
[SQL]계층형 질의문으로 서열을 주고 데이터 출력하기 (0) | 2023.01.13 |
---|---|
[SQL] 서브쿼리를 사용해 데이터 입력, 수정, 삭제하기 (0) | 2023.01.13 |
[SQL] 서브 쿼리 사용하기 3 - HAVING절, FROM절, SELECT 절 (0) | 2023.01.09 |
[SQL] 서브 쿼리 사용하기 2 - NOT IN, EXISTS/NOT EXISTS (0) | 2023.01.09 |
[SQL] 서브 쿼리 사용하기 1 - 단일 행, 다중 행 (0) | 2022.01.10 |