DQL(QUERY 데이터) : SELECT
DML(MANIPULATION 데이터 조작어) : INSERT, UPDATE, DELETE
DDL(DEFINITION 데이터 정의어) : CREATE, ALTER, DROP
DCL(CONNTROL 데이터 제어어) : GRANT, REVOKE
TCL(TRANSACTION 트랜잭션 제어어) : COMMIT, ROLLBACK
<DML>
데이터 조작어
테이블 값을 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문
1. INSERT
테이블에 새로운 행을 추가하는 구문
[표현법]
1) INSERT INTO 테이블명 VALUES(값1, 값2, 값3 ...)
테이블의 모든 컬럼에 대한 값을 순서대로 제시해서 한 행을 INSERT하고자 할 때 사용
컬럼의 수와 순번을 지켜서 VALUES값을 나열해야 한다.
SELECT * FROM EMPLOYEE;
INSERT INTO EMPLOYEE
VALUES(900, '김수민', '880914-1234567', 'SD123@NAVER.COM', 01012345678, 'D7', 'J5', 4000000, 0.2, 200, SYSDATE, NULL, 'N');
[표현법]
2) INSERT INTO 테이블명(컬럼, 컬럼, 컬럼...) VALUES(값1, 값2, 값3...)
테이블에 내가 선택한 컬럼에 대한 값만 INSERT할 수 있다.
컬럼 값을 제시하지 않은 값은 기본적으로 NULL이 들어가며, DEFAULT가 설정되어 있다면, DEFAULT값으로 설정.
-> DEFAULT 값이 없고 NOT NULL 제약조건이 걸려있는 컬럼은 반드시 직접 값을 넣어야한다.
INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO, JOB_CODE, HIRE_DATE)
VALUES(901, '최수민', '440701-2345678', 'J7', SYSDATE);
3) INSERT INTO 테이블명 (서브쿼리);
VALUES에 직접 값을 명시한느 것이 아니라, 대신 서브커리로 조화된 값을 모두 INSERT가능
DROP TABLE EMP_01;
--테이블 삭제
CREATE TABLE EMP_01(
EMP_ID NUMBER,
EMP_NAME VARCHAR2(20),
DEPT_TITLE VARCHAR2(20)
);
--테이블 생성
SELECT * FROM EMP_01;
--생성 확인
INSERT INTO EMP_01 (SELECT EMP_ID, EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID));
-- 서브쿼리와 LEFT JOIN으로 ROW값 삽입
2. INSERT ALL(다중 테이블 삽입)
두개 이상의 테이블에 각각 INSERT 할때 사용되는 서브쿼리가 동일한 경우
CREATE TABLE EMP_DEPT
AS (SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE
FROM EMPLOYEE
WHERE 1 = 0);
CREATE TABLE EMP_MANAGER
AS (SELECT EMP_ID, EMP_NAME, MANAGER_ID
FROM EMPLOYEE
WHERE 1 = 0);
먼저 INSERT ALL을 사용하기 위한 두 테이블을 생성
[표현법]
INSERT ALL
INTO 테이블명1 VALUES(컬럼, 컬럼 ...)
INTO 테이블명2 VALUES(컬럼, 컬럼 ...)
서브쿼리;
INSERT ALL
INTO EMP_DEPT VALUES(EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE)
INTO EMP_MANAGER VALUES(EMP_ID, EMP_NAME, MANAGER_ID)
(SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE, MANAGER_ID
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1');
각 테이블의 컬럼들을 VELUES로 작성하고 서브쿼리를 사용한다.
3. UPDATE
테이블에 기록되어 있는 기존의 데이터를 수정하는 구문
[표현법]
UPDATE 테이블명
SET 컬럼1 = 값1,
컬럼2 = 값2 ...
[WHERE 조건];
WHERE 절이 없으면 전체 행을 수정함.
UPDATE시에도 제약조건을 잘 확인해야함.
CREATE TABLE DEPT_TABLE
AS (SELECT * FROM DEPARTMENT);
새로운 테이블에 DEPARTMENT 테이블을 복제한다.
D9부서의 부서명을 '전략기획팀'으로 변경
UPDATE DEPT_TABLE
SET DEPT_TITLE = '전략기획팀'
WHERE DEPT_ID = 'D9';
UPDATE에서 서브쿼리 사용
UPDATE 테이블명
SET 컬럼명 = (서브쿼리)
WHERE 조건
CREATE TABLE EMP_SALARY
AS (SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY, BONUS
FROM EMPLOYEE);
새로운 테이블에 EMPLOYEE 테이블을 복제하며, EMP_ID, EMP_NAME, DEPT_CODE, SALARY, BONUS을 컬럼으로 지정.
방명수 사원의 급여와 보너스 값을 유재식 사원의 급여와 보너스 값으로 변경
UPDATE EMP_SALARY
SET (SALARY, BONUS) = (SELECT SALARY, BONUS
FROM EMP_SALARY
WHERE EMP_NAME = '유재석')
WHERE EMP_NAME = '방명수';
튜플 방식을 사용하는 다중열 서브쿼리를 이용.
아시아 지역에서 근무하는 사원들의 보너스값을 0.3으로 변경
UPDATE EMP_SALARY
SET BONUS = 0.3
WHERE EMP_ID IN (SELECT EMP_ID FROM EMP_SALARY
JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID
JOIN LOCATION ON LOCATION_ID = LOCAL_CODE
WHERE LOCAL_NAME LIKE 'ASIA%');
다중 조인, LIKE 연산자를 사용하여 ASIA에 있는 사원들을 찾는다.
4. DELETE
테이블에 기록된 데이터를 삭제하는 구문(한 행 단위로 삭제가 됨.)
[표현법]
DELETE FROM 테이블명
[WHERE 조건]
WHERE 조건을 입력하지 않으면 전체행이 삭제됨.
DELETE FROM EMPLOYEE
WHERE EMP_ID = 901;
조건문을 사용하여 EMP_ID가 901인 사원을 삭제한다.
'SQL' 카테고리의 다른 글
| SQL 7일차(1) (3) | 2025.08.01 |
|---|---|
| SQL 6일차(3) (2) | 2025.07.31 |
| SQL 6일차(1) (1) | 2025.07.31 |
| SQL 5일차(연습문제) (4) | 2025.07.30 |
| SQL 5일차 (1) | 2025.07.30 |