SQL_12_DML(Data Manipulataion Language)
30 Aug 2023 SQL2) 데이터 삭제 (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 |
-- +---------------+----------+---------+---------------+---------------+
2. 테이블 조작 DDL
: DDL(Data Definition Language)
- CREATE TABLE 문법은 DBMS에 따라 다르기에 각각의 DBMS설명문 참고가 필요하다.
1) 테이블 생성
(1) 일반적 테이블 생성
: 테이블을 생성하려면, 아래의 정의가 필요하다.
테이블명- 열이름
- 데이터 타입 (형식)
- 데이터 정의
CREATE TABLE table_nm
(
-- 열이름 데이터 형식(크기) 정의
col_nm_1 CHAR (10) PRIMARY KEY
REFERENCES table_1 (table_1_key_col_nm) -- 키 값은 NULL이 들어갈 수 없으며, unique해야 하며, 변경하거나 업데이트 될 수 없다.
col_nm_2 CHAR (10) NOT NULL, -- NULL값이 쓰여지면 오류 발생
col_nm_3 INTEGER (10) NOT NULL DEFAULT 1, -- 값을 지정하지 않으면 자동으로 1이 저장됨.
col_nm_4 VARCHAR (100) NULL
);
에시) ORDERS TABLE
CREATE TABLE ORDERS
(
ORDER_ID CHAR (10) PRIMARY KEY,
CUST_ID CHAR (4) NOT NULL REFERENCES CUSTOMERS (CUST_ID),
EMP_ID CHAR (5) NOT NULL,
ORDER_DT DATETIME NOT NULL
);
-- CUST_ID CHAR (4) NOT NULL REFERENCES CUSTOMERS (CUST_ID)
-- CUST_ID는 CUSTOMERS 테이블의 PRIMARY KEY로 지정되어 있는 값인데,
-- ORDERS 테이블에 CUST_ID를 외래키로 지정하겠다는 의미이고
-- 이는 ORDERS 테이블에서 사용되는 CUST_ID는 반드시 CUSTOMERS테이블에 있는 값이어야 함을 의미한다.
+ 데이터 형식
| 타입 | 데이터 형식 | 설명 |
|---|---|---|
| 문자형 | CHARACTER(n) or CHAR(n) |
고정 길이의 문자 데이터를 4000Byte저장 가능. 고정폭 n-문자열로 필요한 만큼 공백으로 채워진다. |
| NATIONAL VARYING(n) or NCHAR(n) |
CHAR 타입과 기본적으로 같은 공간 관리를 한다. 다양한 언어의 문자값을 저장 및 조회 할 수 있는 기능을 갖고 있음. |
|
| CHARACTER VARYING(n) or VARCHAR(n) |
N문자의 최대 크기를 가진 가변폭 문자열. 입력되는 문자의 길이가 정의된 공간의 길이보다 적더라도, 나머지 공간을 여백으로 채우지 않고, 필요한 공간만 사용한다. |
|
| NVARCHAR(n) | 가변폭 NCHAR문자열이다. | |
| 숫자형 | BIT | 단일 비트값 |
| NUMERIC(p.s) or DECIMAL(p.s) |
p : 전체 자리값 (소수점 왼쪽과 오른쪽이 둘 다 포함) s : 소수점 이하 자릿수 789.123 -> p:6 s:3 |
|
| FLOAT | 실수값 | |
| INTERGER or INT |
4Byte의 정수값 | |
| 날짜 및 시간 | DATE | 날짜값 (ex. 2023-01-01) |
| TIME | 시간값 (ex. 13:22:05) |
|
| TIMESTAMP | DATE와 TIME이 하나의 변수로 결합된 형태 2023-01-01 13:22:05 |
※ CHAR VS VARCHAR
img_src : https://www.scaler.com
(2) 하위 쿼리에 의해 검색된 테이블과 동일한 구조로 테이블 생성
: 하위 쿼리와 동일한 구조의 테이블을 생성하는 방법
CREATE TABLE table_nm AS
SELECT col_nm_1, col_nm_2 FROM subquery_table_nm;
예제
Q1. 아래와 같은 정보의 CUST_PARTY_2 table을 생성해보자.
SSN : CHAR (13), 기본키
PARTY_NM : VARCHAR (20), NULL값 허용 안 됨
CUST_ID : CHAR (4), NULL값 허용 안 됨
TEL_NO : VARCHAR (20), NULL값 허용 됨
MOBILE_NM : VARCHAR (20), NULL값 허용 됨
CREATE TABLE CUST_PARTY_2
(
SSN CHAR (13) PRIMARY KEY,
PARTY_NM VARCHAR (20) NOT NULL,
CUST_ID CHAR (4) NOT NULL,
TEL_NO VARCHAR (20) NULL,
MOBILE_NM VARCHAR (20) NULL
);
2) 테이블 변경 & 삭제
(1) 테이블 열 추가
ALTER TABLE table_nm_to_update
ADD (col_nm_to_add data_type (size));
--ex)
ALTER TABLE CUSTOMERS
ADD (HOBBY CHAR (20));
(2) 테이블 내 데이터 구조 변경
ALTER TABLE table_nm_to_update
MODIFY (col_nm_to_add data_type_to_change (size));
(3) 테이블명 변경
RENAME table_nm_before TO table_nm_after;
(4) 테이블명 삭제
DROP TABLE table_nm_to_delete;
Reference
- 칼퇴족 김대리는 알고 나만 모르는 SQL - 책밥