[DB] DML

Na young·2024년 2월 15일
0

DB

목록 보기
13/17

github
https://github.com/nayeo2/mySQL

DML (Data Manipulation Language)

데이터베이스 내의 데이터조작하는 데 사용되는 SQL구문의 하나이다.

DML 주요 구문

  1. SELECT : 데이터 조회
SELECT first_name, last_name, salary FROM employees;
  1. INSERT : 데이터 추가
INSERT INTO employees (employee_id, first_name, last_name, email, hire_date)
VALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-05-01', 'YYYY-MM-DD'));
  1. UPDATE : 데이터 수정
UPDATE employees
SET salary = salary * 1.1
WHERE employee_id = 1;
  1. DELETE : 데이터 삭제
DELETE FROM employees
WHERE employee_id = 1;

INSERT문

  1. 단일 행 삽입: 한 번에 하나의 행을 삽입
    INSERT INTO table_name (column1, column2, column3, ...)
    VALUES (value1, value2, value3, ...);

    INSERT INTO employees (employee_id, first_name, last_name, email, hire_date)`
    `VALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-05-01', 'YYYY-MM-DD'));
  2. 다중 행 삽입 : 한 번에 여러 행을 삽입

    INSERT INTO table_name (column1, column2, column3, ...)
    VALUES (value1, value2, value3, ...), (value4, value5, value6, ...), (value7, value8, value9, ...), ...;

    
    INSERT INTO employees (employee_id, first_name, last_name, email, hire_date)
    VALUES (1, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2023-05-01', 'YYYY-MM-DD')),
          (2, 'Jane', 'Doe', 'jane.doe@example.com', TO_DATE('2023-05-02', 'YYYY-MM-DD')),
          (3, 'Jim', 'Smith', 'jim.smith@example.com', TO_DATE('2023-05-03', 'YYYY-MM-DD'));
    
  3. INSERT INTO SELECT : 다른 테이블에서 선택한 데이터를 기반으로 행을 삽입
    INSERT INTO table_name1 (column1, column2, column3, ...)
    SELECT column1, column2, column3, ...
    FROM table_name2
    WHERE condition;

    INSERT INTO new_employees (employee_id, first_name, last_name, email, hire_date)
    SELECT employee_id, first_name, last_name, email, hire_date
    FROM employees
    WHERE hire_date >= TO_DATE('2023-01-01', 'YYYY-MM-DD');
    
  • hire_date가 '2023-01-01' 이후인 모든 직원의 데이터가 new_employees 테이블에 삽입

INSERT문 사용 시 유의할 점

  • NOT NULL 제약 조건이 있는 열에는 NULL 값을 삽입할 수 없다
  • 기본 키 or 고유 키 제약 조건이 있는 열에 중복 값을 삽입할 수 없다
  • 외래 키 제약 조건이 있는 열에 존재하지 않는 참조 값을 삽입할 수 없다

UPDATE문

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

UPDATE employees
SET email = 'johndoe@example.com', hire_date = TO_DATE('2023-05-01', 'YYYY-MM-DD')
WHERE employee_id = 1;
  • employee_id가 1인 행의 emailhire_date 값 수정

UPDATE문 사용 시 유의할 점

  • WHERE절을 사용하여 특정 행을 선택하지 않으면 테이블의 모든 행이 업데이트된다
  • NOT NULL 제약 조건이 있는 열에는 NULL 값을 설정할 수 없다
  • 기본 키 or 고유 키 제약 조건이 있는 열에 중복 값을 설정할 수 없다
  • 외래 키 제약 조건이 있는 열에 존재하지 않는 참조 값을 설정할 수 없다

UPDATE문으로 값 계산하기

UPDATE employees
SET salary = salary + 1000, last_name = CONCAT(last_name, ' (Updated)')
WHERE employee_id = 1;
  • employee_id가 1인 행의 salary 값 1000만큼 증가, last_name에 '(Updated)' 문자열 추가

DELETE문

DELETE FROM table_name
WHERE condition;

DELETE문 사용 시 유의할 점

  • WHERE 절을 사용하여 특정 행을 선택하지 않으면 테이블의 모든 행이 삭제된다. (TRUNCATE문을 사용하는 것이 더 효율적)
  • 삭제된 데이터는 복구할 수 없다
  • 외래 키 제약 조건으로 인해 참조 무결성이 깨질 경우, 해당 행을 삭제할 수 없다. (참조하는 행을 먼저 삭제하거나 외래 키 제약 조건을 수정해야 한다)

DELETE FROM vs TRUNCATE TABLE

DELETE FROMTRUNCATE TABLE
작동방식모든 행 하나씩 삭제
로그 기록, 트리거 발생
한 번에 삭제
초기 상태로 재설정
성능느림빠름
사용 사례특정 조건을 만족하는 행을 삭제할 때테스트 데이터 삭제, 임시 테이블 데이터 초기화

SELECT문

SELECT column_name1, column_name2, ... FROM table_name;

  1. DISTINCT : 중복된 값 제거, 고유 값만 조회
    SELECT DISTINCT column_name FROM table_name;
  2. 별칭 (Alias) 지정 : 열 이름이나 표현식에 다른 이름 지정.
    SELECT column_name AS alias_name FROM table_name;

profile
개발어린이

0개의 댓글

관련 채용 정보