IT/DB

SQL - DML

xego 2025. 3. 11. 11:33

Select - 테이블에서 데이터를 조회하는 명령어, 특정 컬럼만 가져오거나 모든컬럼(*)을 가져올수 있음

> Where 절을 사용해 조건에 맞는 데이터만 필터링 할 수 있음.

> Gruop by로 데이터를 그룹화 하고, Order By로 정렬할 수 있음.

Insert - 테이블에 새로운 데이터 행(row)를 추가하는 명령어, 테이블내 컬럼에 어떤 값을 넣을지 지정함.

> 모든 컬럼에 값을 넣거나, 특정 컬럼만 지정하여 값을 넣을 수 있음

> 다른 테이블의 조회 결과를 삽입할수 있음(insert into)

Update - 테이블의 기존 데이터를 변경하는 명령어

> SET 절에서 변경할 컬럼과 새 값을 지정

> WHERE 절로 변경할 행을 지정함(안하면 모든 행이 변경됨)

Delete - 테이블에서 데이터 행을 삭제하는 명령어

> WHERE 절로 삭제할 행을 지정함(안하면 모든 행이 삭제됨)

> 테이블 구조는 유지되고 데이터만 삭제됨

> 외래키 제약 조건이 있는 경우 무결성에 주의해야함(PK)

 

SELECT e.employee_id, e.first_name, e.last_name, d.department_name, e.salary
FROM employees e
JOIN departments d ON e.department_id = d.department_id
WHERE e.salary > 5000
AND d.location_id = 1700
ORDER BY e.salary DESC;

 

FROM employees e - employees 테이블을 e 로 alias 해줌.

JOIN departments d ON e.department_id = d.department_id - departments 를 d로 alias해주고

employees 테이블의 department_id를 d.department_id로 조인해줌.

■ Where절은 조인된 결과에서 특정행을 거는거고 ON은 테이블을 연결하는 조건이다. 

* INNER JOIN - 양쪽 테이블에서 조건이 일치하는 행만 반환

* LEFT JOIN - 왼쪽 테이블의 모든 행과 오른쪽에서 조건이 일치하는 행만 반환

* RIGHT JOIN - 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 조건이 일치하는 행만 반환

> JOIN 조건에서 Where절을 작성하는건 지양해야함.

 

WHERE e.salary > 5000 AND d.location_id = 1700 - 급여 5000 이상되는사람들과 지역 코드가 1700인 부서

AND는 두 조건을 만족하는 사람들

ORDER BY e.salary DESC; - Order by는 결과 집합을 컬럼기준으로 정렬하고, DESC는 내림차순으로 큰값에서 작은값으로 정렬함. 안넣으면 기본적인 ASC(오름차순)으로 정렬됨.

 

INSERT INTO employees
(employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, department_id)
VALUES
(207, '길동', '홍', 'HONGKD', '010-1234-5678', '2023-03-15', 'IT_PROG', 6000, 60);

INSERT INTO employees - employees 테이블의 컬럼을 수정함

(employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, department_id) - 데이터를 삽입할 컬럼들을 명시함.

■ 테이블의 모든 컬럼이 아닌 특정 컬럼만 지정할 수 있음.

컬럼 순서는 테이블 생성 순서와 달라도 되고, NOT NULL 제약조건이 있는 필수 컬럼(PK,FK는 반드시 포함해야함.)

VALUES (207, '길동', '홍', 'HONGKD', '010-1234-5678', '2023-03-15', 'IT_PROG', 6000, 60);

만약 VALUES에 대해서 값을 넣지않게 된다면 Syntax error 가 발생하는것을 볼수 있다.

 

UPDATE employees
SET salary = salary * 1.1,
    job_id = 'SA_MAN',
    commission_pct = 0.2
WHERE department_id = 80
AND salary < 8000;

UPDATE employees - employees 테이블의 데이터를 수정함.

SET salary = salary * 1.1, job_id = 'SA_MAN', commission_pct = 0.2 - SET은 UPDATE 명령어에서 변경할 컬럼과 새 값을 지정하는 키워드

WHERE department_id = 80 AND salary < 8000;- 코드 80인 부서의 직원과 연봉 8천 이하인 직원들만 변경

 

DELETE FROM job_history
WHERE employee_id = 176
AND start_date < '2010-01-01';

DELETE FROM job_history - job_history 테이블에서 데이터를 삭제하는 명령어

WHERE employee_id = 176 - 직원 ID가 176인 사람의 기록만 대상으로 함

AND start_date < '2010-01-01' - 시작일이 2010년 1월 1일 이전인 기록만 추가로 필터링함

 

COMMIT 꼭 해야함.