SQL - DML
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 꼭 해야함.