You& Data_Science & Life

SQL_12_DML(Data Manipulataion Language)

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  |
-- +---------------+----------+---------+---------------+---------------+





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 - 책밥