You& Data_Science & Life

SQL_13_DML(Data Manipulataion Language)

1. 데이터 조작 DML

: DML(Data Manipulataion Language)

1) 데이터 삽입 (INSERT)

(1) 완전한 행 삽입 (열이름 미지정)

INSERT INTO table_nm
VALUES (val_1, val_2, val_3);

(2) 완전한 행 삽입 (열이름 지정)

: 열 이름을 지정한 후 값을 삽입하기에, 오류를 줄일 수 있음.

INSERT INTO table_nm(col_1, col_2, col_3)
VALUES (val_1, val_2, val_3);

(3) 부분 행 삽입

: 열 이름을 지정하고, 해당 열 이름에 매칭되는 값을 VALUES 키워드 뒤에 순서대로 작성

INSERT INTO table_nm(col_1, col_3)
VALUES (val_1, val_3);

(4) SQL 문장 결과를 삽입

: SQL문장 전체를 삽입하는 경우, VALUES키워드 대신, SELCT 열이름 FROM 테이블명 WHERE 조건절;을 넣어주면 됨.

INSERT INTO table_1(col_1, col_2, col_3)
SELECT col_1, col_2, col_3 FROM table_2 WHERE conditional;

예제

Q1. CUST_PARTY 테이블에 아래의 값들을 삽입해 보자.

- SSN : 5508151111222
- PARTY_NM : MJ YOO
- CUST_ID : 8828
- TEL_NO : 02-312-0111
- MOBILE_NO : 010-1122-1111
INSERT INTO CUST_PARTY(SSN, PARTY_NM, CUST_ID, TEL_NO, MOBILE_NO)
VALUES ('5508151111222', 'MJ YOO', '8828', '02-312-0111', '010-1122-1111');

Q2. CUST_PARTY 테이블에 아래의 값들을 삽입해 보자. 단, MOBILE_NO 열은 NULL을 허용하는 열이다.(부분행 삽입)

- SSN : 5508151111223
- PARTY_NM : MJ YOO
- CUST_ID : 8828
- TEL_NO : 02-312-0111
-- 1) (필요시) NULL값 허용 허용
-- 테이블의 특정 컬럼이 NULL값을 허용하게 하는 방법
alter table CUST_PARTY MODIFY COLUMN MOBILE_NO varchar(45);
-- 테이블의 특정 컬럼이 NULL값을 허용하지 않게 하는 방법
alter table CUST_PARTY modify column [칼럼 이름] [칼럼 타입] not null;

-- 2) 부분 행 삽입 
INSERT INTO CUST_PARTY(SSN, PARTY_NM, CUST_ID, TEL_NO)
VALUES ('5508151111223', 'MJ YOO', '8828', '02-312-0111');

TIP

  • 열 이름을 지정하면, 삽입하는 열의 순서가 바뀌어도, 열 이름과 값이 대응하면 결과에 영향이 없다.





2) 데이터 삭제 (DELETE)

(1) 테이블의 모든 행 삭제

DELETE FROM table_nm:
-- WHERE절을 사용하지 않으면 모든 행이 삭제되기에 조심해야한다.

(2) 테이블의 부분 행 삭제

DELETE FROM table_nm
WHERE conditional

예제

Q1. 앞서 삽입한 아래 정보를 삭제해보자

- SSN : 5508151111222
- PARTY_NM : MJ YOO
- CUST_ID : 8828
- TEL_NO : 02-312-0111
- MOBILE_NO : 010-1122-1111
DELETE FROM CUST_PARTY 
WHERE SSN IN ('5508151111222');

TIP

  • SQL 에서느 실행한 내용을 되돌릴 수 있는 기능이 없다. 때문에 DELETE문을 사용할 땐 항상 주의를 기울여야 한다!





3) 데이터 수정 (UPDATE)

(1) 모든 행의 데이터 수정

UPDATE table_nm
SET col_A = 'change_to_value';
-- col_A의 모든값을 'change_to_value'로 변경시키기에, WHERE절이 없는 UPDATE문은 주의가 필요하다.

(2) 특정한 행의 데이터 수정

UPDATE table_nm
SET col_nm = change_to_value
WHERE 조건절;

예제

Q1. CUST_PARTY테이블에서, SSN이 9011034444111인 고객의 전화번호를 010-9988-5555로 수정해보자.

- SSN : 9011034444111
- MOBILE_NO : 010-1122-1111
UPDATE CUST_PARTY
SET MOBILE_NO = '010-9988-5555'
WHERE SSN IN ('9011034444111');
-- +---------------+----------+---------+---------------+---------------+
-- | SSN           | PARTY_NM | CUST_ID | TEL_NO        | MOBILE_NO     |
-- +---------------+----------+---------+---------------+---------------+
-- | 9011034444111 | SH LEE   | 5570    | 033-333-3333  | 010-9988-9999  |
-- +---------------+----------+---------+---------------+---------------+

-- +---------------+----------+---------+---------------+---------------+
-- | SSN           | PARTY_NM | CUST_ID | TEL_NO        | MOBILE_NO     |
-- +---------------+----------+---------+---------------+---------------+
-- | 9011034444111 | SH LEE   | 5570    | 033-333-3333  | 010-9988-5555  |
-- +---------------+----------+---------+---------------+---------------+


+ 연습문제

예제

-- 1) EX_1
-- EMPLOYEE 테이블에서 KE LEE와 JM CHA직원의 데이터를 삭제하라
DELETE FROM EMPLOYEE
WHERE EMP_ID IN ('5466', '1270');
-- WHERE NM IN ('KE LEE', 'JM CHA'); -- 이렇게 이름으로 삭제할 경우, 동명이인의 이름도 함께 삭제될 수 있음.

-- 2) EX_2
-- EMP_ID가 15501인 직원의 내선번호를 5800으로 변경하시오.
UPDATE EMPLOYEE
SET TEL_NO = 5800
WHERE EMP_ID IN ('15501');
-- WHERE NM IN ('KE LEE', 'JM CHA'); -- 이렇게 이름으로 삭제할 경우, 동명이인의 이름도 함께 삭제될 수 있음.
-- BEFROE
-- +--------+-------+----------+--------+
-- | EMP_ID | GRADE | NM       | TEL_NO |
-- +--------+-------+----------+--------+
-- | 15501  | 8     | YK MO    | 5740   |

-- AFTER
-- +--------+-------+----------+--------+
-- | EMP_ID | GRADE | NM       | TEL_NO |
-- +--------+-------+----------+--------+
-- | 15501  | 8     | YK MO    | 5800   |

Reference

  • 칼퇴족 김대리는 알고 나만 모르는 SQL - 책밥