DML (Data Manipulate Language)
데이터 조작 언어. 테이블에 값을 삽입하거나(INSERT), 수정하거나(UPDATE), 삭제(DELETE)하는 구문
INSERT
테이블에 새로운 행을 추가하는 구문
(1) INSERT INTO 테이블명 VALUES(데이터, 데이터, ...)
-- 테이블에 모든 컬럼에 대한 값을 INSERT할 때 사용
-- INSERT하고자 하는 컬럼이 모든 컬럼인 경우 컬럼명 생략 가능. 단, 컬럼의 순서를 지켜서 VALUES에 값을 기입해야 함
INSERT INTO EMPLOYEE2
VALUES(900, '장채현', '901123-2345678', 'jang_ch@ab.or.kr', '01012341234',
'D1', 'J7', 'S3', 4300000, 0.2, 200, SYSDATE, NULL, 'N');
(2) INSERT INTO 테이블명(컬럼명, 컬럼명, 컬럼명,...)
VALUES (데이터1, 데이터2, 데이터3, ...);
-- 테이블에 내가 선택한 컬럼에 대한 값만 INSERT할 때 사용
-- 선택안된 컬럼은 값이 NULL이 들어감
INSERT INTO EMPLOYEE2(EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE,
DEPT_CODE, JOB_CODE, SAL_LEVEL, SALARY)
VALUES(900, '장채현', '901123-2345678', 'jang_ch@ab.or.kr', '01012341234',
'D1', 'J7', 'S3', 4300000);
- INSERT문 대신 서브쿼리(SQL 내부에 포함된 SELECT문)을 이용할 수 있다 (VALUE)생략.
INSERT INTO EMP_01 (SELECT EMP_ID, EMP_NAME, DEPT_TITLE
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID) );
SELECT문의 순서
-- 5 : SELECT 컬럼명 AS 별칭, 계산식, 함수식
-- 1 : FROM 참조할 테이블명
-- + JOIN
-- 2 : WHERE 컬럼명 | 함수식 비교연산자 비교값
-- 3 : GROUP BY 그룹을 묶을 컬럼명
-- 4 : HAVING 그룹함수식 비교연산자 비교값
-- 6 : ORDER BY 컬럼명 | 별칭 | 컬럼순번 정렬방식 [NULLS FIRST | LAST];
UPDATE
테이블에 기록된 컬럼의 값을 '수정'하는 구문
UPDATE 테이블명 SET 컬럼명 = 바꿀값 [WHERE 컬럼명 비교연산자 비교값];
-- DEPARTMENT2 테이블에서 DEPT_ID가 'D9'인 행의 DEPT_TITLE을 '전략기획팀' 으로 수정
UPDATE DEPARTMENT2
SET DEPT_TITLE = '전략기획팀'
WHERE DEPT_ID = 'D9';
-- EMP_SALARY 테이블에서 BONUS를 받지 않는 사원의
-- BONUS를 0.1로 변경
UPDATE EMPLOYEE2
SET BONUS = 0.1
WHERE BONUS IS NULL;
WHERE절을 사용하지 않은 경우
-- 기술지원부 -> 기술연구팀 변경
UPDATE DEPARTMET2
SET DEPT_TITLE = '기술연구팀';
--> 9개 행이 업데이트 되었습니다
--> 조건을 설정하지 않아 모든 행의 컬럼 값이 수정되는 문제가 발생한다
--> WHERE절을 잘 작성하자
여러 칼럼 한번에 수정
-- * 여러 컬럼을 한번에 수정할 시 콤마(,)로 컬럼을 구분하면됨.
-- D9 / 전략기획팀 -> D0 / 전략기획2팀으로 수정
UPDATE DEPARTMENT2
SET
DEPT_ID = 'D0',
DEPT_TITLE = '전략기획2팀'
WHERE DEPT_ID = 'D9'
AND DEPT_TITLE = '전략기획팀';
UPDATE문에서도 서브쿼리 사용이 가능하다
UPDATE EMPLOYEE2
SET
SALARY = (SELECT SALARY FROM EMPLOYEE WHERE EMP_NAME = '유재식'),
BONUS = (SELECT BONUS FROM EMPLOYEE WHERE EMP_NAME = '유재식')
WHERE EMP_NAME = '방명수';
-- 유재식의 SALARY와 BONUS를 방명수에게 대입한다
UPDATE EMPLOYEE2
SET (SALARY, BONUS) = (SELECT SALARY, BONUS
FROM EMPLOYEE2
WHERE EMP_NAME = '유재식');
WHERE EMP_NAME IN ('노옹철', '전형돈', '정중하', '하동운');
JOIN과 함께 사용
-- 1) 아시아 지역에 근무하는 직원
-- EMPLOYEE2 , DEPARTMENT, LOCATION
SELECT EMP_NAME, DEPT_TITLE, LOCAL_NAME, BONUS
FROM EMPLOYEE2
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
WHERE LOCAL_NAME LIKE 'ASIA%';
JOIN을 포함한 쿼리문
UPDATE EMPLOYEE2
SET BONUS = 0.3
WHERE EMP_ID IN(SELECT EMP_ID
FROM EMPLOYEE2
JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
WHERE LOCAL_NAME LIKE 'ASIA%');
-- == WHERE EMP_ID IN(214,216,217,900,219,220,221,206,207,208,
-- 209,210,215,203,204,205,200,201,202)
DELETE
테이블의 행을 삭제하는 구문
작성법
- DELTE FROM 테이블명 WHERE 조건설정
- 만약 WHERE 조건을 설정하지 않으면 모든 행이 다 삭제됨
-- EMPLOYEE2 테이블에서 이름이 '장채현'인 사원 정보 삭제
DELETE FROM EMPLOYEE2
WHERE EMP_NAME = '장채현';
TRUNCATE
테이블의 전체 행을 삭제하는 DDL (DML 아님)
DELETE보다 수행속도가 더 빠르고 ROLLBACK을 통해 복구할 수 없다.
-- TRUNCATE로 삭제
TRUNCATE TABLE EMPLOYEE3;
'Programming language > SQL' 카테고리의 다른 글
SQL - 08 TCL (0) | 2022.04.09 |
---|---|
SQL - 07 JDBC (0) | 2022.04.09 |
SQL - 05 JOIN (0) | 2022.04.09 |
SQL - 04 GROUP BY & SET OPERATION (0) | 2022.04.09 |
SQL - 03 함수 (0) | 2022.04.09 |