SQL(4) DML (Data Manipulation Language)

hyeeun·2025년 8월 17일

bootcamp

목록 보기
21/22
post-thumbnail

1. DML

(1) DML이란?

  • DML은 데이터 조작 언어로, 데이터베이스 테이블에 저장된 데이터 자체를 조회·추가·수정·삭제하는 명령어 집합이다.
  • 즉, 데이터의 내용을 변경하는 데 사용된다.

(2) DML의 주요 특징

  1. 데이터 조작: 구조(스키마)는 바꾸지 않고, 테이블 안의 데이터만 변경.

  2. 트랜잭션 적용 가능

    • COMMIT / ROLLBACK으로 작업을 확정하거나 취소 가능.
  3. 주요 용도:

    • 데이터 입력 (INSERT)
    • 데이터 수정 (UPDATE)
    • 데이터 삭제 (DELETE)
    • 데이터 조회 (SELECT → 읽기 전용이지만 DML로 분류되기도 함)
  4. DDL과의 차이:

    • DDL은 데이터의 틀(테이블 구조) 변경
    • DML은 그 틀 안의 데이터 변경

2. INSERT

  • 테이블 레코드 삽입
    - INSERT INTO 절: 다음에 테이블이름, 괄호안에 필드목록 작성
    • VALUES 키워드: 괄호안에 해당 필드에 삽입할 값 목록 작성
INSERT INTO table_name (c1, c2, ..) 
VALUES (v1, v2, ...);
  • date/time 형식의 데이터는 NOW()함수 이용하여 현재 시간 추가 가능

1. 직원정보 테이블에 다음과 같은 데이터 추가

INSERT INTO employee (name, group_id) 
VALUES ('choi', 1);   

2. 여러개의 데이터 추가

INSERT INTO employee (name, group_id) 
VALUES ('gildong', 1), 
	   ('nolbu', 0), 
       ('lucky', 1);

3. 매장관리 테이블에 다음과 같은 데이터 추가

INSERT INTO store (store_name, store_time) 
VALUES ('star', '2025-01-16 08:00:00');

4. NOW()를 이용한 데이터 추가

INSERT INTO store (store_name, store_time) 
VALUES ('maximum', NOW());

3. UPDATE

  • 테이블 레코드 수정
    - SET절: 수정할 필드와 새값 지정
    • WHERE절: 수정할 레코드를 지정하는 조건
    • WHERE를 작성하지 않으면 모든 레코드를 수정
UPDATE table_name 
SET col_name = expression 
[WHERE  condition];

1. 직원관리 테이블에서 'hyeeun'의 그룹ID를 '0'으로 변경

UPDATE employee 
SET  group_id = 0 
WHERE  name = 'hyeeun'; 

2. 직원정보 테이블에서 4번 레코드의 이름과 임금을 동시에 변경

UPDATE employee 
SET  name = 'devil',
     pay = 10 
WHERE  id = 4;

3. 직원정보 테이블에서 모든 레코드의 pay를 0으로 변경

UPDATE employee 
SET  pay = 0; #check 옵션으로 인해 변경 불가

4. DELETE

  • 테이블 레코드 삭제
    - DELETE FROM절: 테이블 이름
    • WHERE절: 삭제할 레코드를 지정하는 조건 작성
    • WHERE절을 작성하지 않으면 모든 레코드를 삭제
DELETE FROM table_name 
[WHERE condition];

1. 고객정보에서 devil 레코드 삭제

DELETE FROM employee 
WHERE name='devil';

5. SELECT

  • 테이블에서 데이터를 조회
  • 조회 기능이 많아 DQL이라고도 함
    - SELECT 키워드: 데이터를 선택하려는 필드를 하나 이상 지정(모든 필드는 *)
    • FROM 키워드: 데이터를 선택하려는 테이블 지정
SELECT select_list 
FROM table_name;

1. 고객정보 테이블에서 name 조회

SELECT customer_name 
FROM customer;

2. 고객정보 테이블에서 모든 이름과 이메일주소 조회

SELECT customer_name, customer_email 
FROM customer;

3. 고객정보의 모든 데이터 조회

SELECT * 
FROM customer;

(1) SELECT AS

  • 필드의 이름을 임시 이름으로 변경하여 조회
SELECT select_list AS '표시하고자 하는 컬럼명' 
FROM table_name;

1. 고객정보 테이블에서 이메일을 조회하는데, 컬럼명을 '이메일주소'로 출력하여 조회

SELECT customer_email AS '이메일주소' 
FROM customer;

2. 주문(sales_reciepts) 테이블에서 unit_price를 1000과 곱하여 (KRW)단위로 출력

SELECT product_id, unit_price * 1000 AS '가격(KRW)' 
FROM sales_reciepts;

6. Filtering

  • 데이터를 필터링하여 조회

  • Filtering Data 키워드
    - 절 (Clause)
    - DISTINCT
    - WHERE

    • 연산자 (Operator)
      • BETWEEN min_value AND max_value
        • IN
        • LIKE
        • IS
        • 비교연산자 : =, =>, <=, !=
        • 논리연산자 : AND(&&), OR(||), NOT(!)

(1) DISTINCT

  • 조회 결과에서 중복된 레코드를 제거
    - DISTINCT는 SELECT 바로 뒤에 작성
    • SELECT DISTINCT절 : 고유한 값을 선택하려는 하나 이상의 필드 지정
SELECT DISTINCT select_list 
FROM table_name;

1. 매장정보(sales_outlet)에서 city에 대한 고유값 선택

SELECT DISTINCT store_city 
FROM sales_outlet;

(2) WHERE

  • 조회 시 특정 검색 조건 지정
    - FROM절 뒤에 작성
    • search_condition은 비교연산자 및 논리연산자, 연산자를 사용하여 조건을 지정
SELECT select_list 
FROM table_name 
WHERE search_condition;

1. sales_outlet 테이블에서 city가 Jamaica인 outlet_id와 outlet_type 조회

SELECT sales_outlet_id, sales_outlet_type 
FROM sales_outlet 
WHERE store_city = 'Jamaica';

(3) BETWEEN

  • 칼럼의 데이터가 a와 b사이에 있는지 확인
col_name BETWEEN a AND b;

1. sales_outlet 테이블에서 manager가 10명에서 30명사이의 outlet_id와 square_feet 조회

SELECT sales_outlet_id, store_square_feet 
FROM sales_outlet 
WHERE manager BETWEEN 10 AND 30;

(4) IN

  • 값이 특정 목록안에 있는지 확인
col_name IN (목록);

1. product 테이블에서 product_category가 ('Coffe', 'Tea')인 product_type 조회

SELECT product_type
FROM product 
WHERE product_category IN ('Coffee', 'Tea');

(5) LIKE

  • 값이 특정패턴에 일치하는지 확인
  • Wildcard Characters
    - % : 0개 이상의 문자열과 일치하는지 확인
    • _ : 단일문자와 일치하는지 확인

1. product 테이블에서 product_category에 'Tea'가 포함된 product 조회

SELECT product 
FROM product 
WHERE product_category LIKE '%Tea%';

(6) IS

  • NULL 값은 연산자(=)를 이용하여 비교 불가
  • IS연산자를 활용하여 NULL인지 확인
# NULL인 경우
col_name IS NULL 

# NULL이 아닌 경우
col_name IS NOT NULL

1. product 테이블에서 product가 NULL인 경우의 product_category 중복 제외하고 조회

SELECT DISTINCT product_category 
FROM product 
WHERE product IS NULL;

2. product 테이블에서 product가 NULL이 아닌 경우 의 product_category 중복 제외하고 조회

SELECT DISTINCT product_category 
FROM product 
WHERE product IS NOT NULL;

(7) 연산자 우선순위

  • 우선순위를 고려하지 않고 작성하면 의도치 않은 동작 발생
    1. 괄호
    1. NOT 연산자
    2. 비교연산자
    3. AND
    4. OR
profile
hyeeun-techlog

0개의 댓글