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'));

 

① 단일 행 삽입 : 한 번에 하나의 행을 테이블에 삽입하는 방법

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

 

② 다중 행 삽입 : 한 번에 여러 행을 테이블에 삽입하는 방법, (대량의 데이터를 삽입할 때 효율적)

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

 

③ 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');

employees 테이블에서 hire_date가 2023-01-01 이후인 모든 직원의 데이터를 선택하여 new_employees 테이블에 삽입된다.

 

※ INSERT문을 사용한 데이터 삽입 시 주의할 점

- NOT NULL 제약조건이 있는 열에는 NULL 값을 삽입할 수 없고, 반드시 값을 제공해야 한다.

- 기본키 또는 고유키 제약조건이 있는 열에 중복 값을 삽입하려고 하면 오류가 발생한다.

- 외래키 제약조건이 있는 열에 존재하지 않는 참조값을 삽입하려고 하면 오류가 발생한다.

 

 

2. UPDATE문

→ 데이터베이스의 기존 데이터를 수정하는 데 사용, 테이블의 행의 값 변경 가능, where절을 사용하여 특정 행을 선택할 수 있으며 원하는 열의 값 수정 가능

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;

employees 테이블에서 employee_id가 1인 행의 email과 hire_date 값이 수정된다.

UPDATE employees
SET salary = salary + 1000, last_name = CONCAT(last_name, ' (Updated)')
WHERE employee_id = 1;

UPDATE문을 사용할 때 위와 같이 다양한 연산자와 함수를 사용하여 값을 계산하거나 조작하는 것도 가능하다.

employees 테이블에서 employee_id가 1인 행의 salary 값을 1000만큼 증가시키고, CONCAT() 함수를 사용하여 last_name에 (Updated)라는 문자열을 추가했다.

 

※ UPDATE문을 사용한 데이터 수정 시 주의할 점

- WHERE절을 사용하여 특정 행을 선택하지 않으면 테이블의 모든 행이 업데이트된다.

- NOT NULL 제약조건이 있는 열에 NULL 값을 설정하려고 하면 오류가 발생한다.

- 기본키 또는 고유키 제약조건이 있는 열에 중복 값을 설정하려고 하면 오류가 발생한다.

- 외래키 제약조건이 있는 열에 존재하지 않는 참조값을 설정하려고 하면 오류가 발생한다.

 

 

3. DELETE문

→ 데이터베이스의 데이터를 삭제하는 데 사용, 특정 테이블에서 행을 선택하여 삭제할 수 있음

DELETE FROM table_name
WHERE condition;
DELETE FROM employees
WHERE employee_id = 1;

employees 테이블에서 employee_id가 1인 행이 삭제된다.

 

※ DELETE문을 사용한 데이터 삭제 시 주의할 점

- WHERE절을 사용하여 특정 행을 선택하지 않으면 테이블의 모든 행이 삭제된다. → TRUNCATE문을 사용하는 것이 더 효율적일 수 있다.

- 삭제된 데이터는 복구할 수 없으므로 DELETE문을 사용하기 전에 데이터를 백업하거나 복구할 수 있는 방법을 고려해야 한다.

- 외래키 제약조건으로 인해 참조 무결성이 깨질 경우 해당 행을 삭제할 수 없다. → 참조하는 행을 먼저 삭제하거나 외래키 제약조건을 수정해야 한다.

 

★ DELETE FROM과 TRUNCATE TABLE의 차이

① 작동방식

- DELETE : WHER절을 사용하지 않으면 테이블의 모든 행을 하나씩 삭제 각 행의 삭제에 대한 로그가 기록되고, 트리거가 발생할 수 있음

- TRUNCATE : 테이블의 모든 데이터를 한 번에 삭제, 로그를 남기지 않고 테이블을 초기 상태로 재설정 → 트리거 발생 X

② 성능

- DELETE : 각 행을 개별적으로 삭제하므로 테이블이 큰 경우 실행 속도가 느릴 수 있음

- TRUNCATE : 모든 데이터를 한 번에 삭제하므로 실행 속도가 빠르고 효율적

③ 사용사례

- DELETE : 특정 조건을 만족하는 행을 삭제할 때 사용, WHERE절을 사용하지 않으면 모든 행을 삭제할 수 있지만, 이 경우 TRUNCATE를 사용하는 것이 효율적

- TRUNCATE : 테이블의 모든 데이터를 빠르게 삭제하고자 할 때 사용됨

 

☆ 실무적 측면에서의 예시

- DELETE : 개발 중인 웹 애플리케이션에서 특정 날짜 이전의 테스트 데이터를 삭제하려면 WHERE절을 포함하여 특정 조건을 충족하는 행을 삭제할 수 있다.

DELETE FROM test_data
WHERE created_at < '2022-01-01';

 

- TRUNCATE : 하루에 한 번씩 임시 데이터를 삭제해야 하는 경우 TRUNCATE를 사용하여 모든 데이터를 빠르게 삭제할 수 있다.

TRUNCATE TABLE temporary_data;

 

 

4. SELECT문

→ 데이터베이스 테이블에서 원하는 데이터를 조회하는 데 사용

SELECT column_name1, column_name2, ... FROM table_name;
SELECT first_name, last_name FROM employees;

employees 테이블에서 first_name과 last_name 열을 조회한다.

SELECT DISTINCT column_name FROM table_name;
SELECT DISTINCT job_id FROM employees;

DISTINCT 키워드는 중복된 값을 제거하고 고유한 값만 조회하려는 경우 사용된다.

employees 테이블에서 고유한 job_id만 조회된다.

SELECT column_name AS alias_name FROM table_name;
SELECT first_name AS 이름 FROM employees;

alias(별칭)을 사용하여 열 이름이나 표현식에 다른 이름을 지정할 수 있다. 

별칭을 사용하면 결과의 가독성을 높이고 쿼리를 더 간결하게 작성할 수 있다.

employees 테이블에서 first_name 열을 이름이라는 별칭으로 조회한다.

'네트워크캠퍼스 > DATABASE' 카테고리의 다른 글

TCL  (0) 2024.02.16
WHERE절  (0) 2024.02.16
DDL  (0) 2024.02.15
관계형 데이터베이스  (0) 2024.02.14
데이터 모델링의 중요 개념  (0) 2024.02.13

+ Recent posts