본 글은 다음 강의를 보고 작성한 글입니다.
https://www.youtube.com/playlist?list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe
데이터베이스
백엔드에 필요한 DB 지식들을 정리했어요~ :) 내용은 컴공과 수준입니다
www.youtube.com
ORDER BY
- 조회 결과를 특정 attribute(s) 기준으로 정렬하여 가져오고 싶을 때 사용한다.
- default 정렬 방식은 오름차순이다.
- 오름차순 정렬은 ASC 로 표기한다.
- 내림차순 정렬은 DESC 로 표기한다.
-- 임직원들의 정보를 연봉 순서대로 정렬해서 조회
SELECT * FROM employee ORDER BY salary;
SELECT * FROM employee ORDER BY salary DESC;
-- 임직원들의 정보를 같은 부서 안에서 연봉 순서대로 정렬해서 조회
SELECT * FROM employee ORDER BY dept_id ASC, salary DESC;
// 같은 ORDER BY 내에서 여러개의 컬럼을 불러올 수 있다.
// 우선순위는 앞에 있는 컬럼부터 실행된다.
aggregate function
- 여러 tuple 들의 정보를 요약해서 하나의 값으로 추출하는 함수
- 대표적으로 COUNT, SUM, MAX, MIN, AVG 함수가 있다.
- (주로) 관심있는 attribute 에 사용된다. e.g.) AVG(salary), MAX(birth_date)
- NULL 값들은 제외하고 요약 값을 추출한다.
-- 임직원 수를 조회
SELECT COUNT(*) FROM employee;
// * : 튜플의 수 : 튜플의 전체를 세라는 의미
-- 프로젝트 2002 에 참여한 임직원 수와 최대 연봉과 최소 연봉과 평균 연봉을 조회
SELECT COUNT(*), MAX(salary), MIN(salary), AVG(salary)
FROM works_on W JOIN employee E ON W.empl_id = E.id
WHERE W.proj_id = 2002;
GROUP BY
- 관심있는 attribute(s) 기준으로 그룹을 나눠서 그룹별로 aggregate funtion 을 적용하고 싶을 때 사용
- grouping attribute(s) : 그룹을 나누는 기준이 되는 attribute(s)
- grouping attribute(s) 에 NULL 값이 있을 때는 NULL 값을 가지는 tuple 끼리 묶인다.
-- 각 프로젝트에 참여한 임직원 수와 최대 연봉과 최소 연봉과 평균 연봉을 조회
SELECT COUNT(*), MAX(salary), MIN(salary), AVG(salary)
FROM works_on W JOIN employee E ON W.empl_id = E.id
GROUP BY W.proj_id;
HAVING
- GROUP BY 와 함께 사용한다.
- aggregate funtion 의 결과 값을 바탕으로 그룹을 필터링하고 싶을 때 사용한다.
- HAVING 절에 명시된 조건을 만족하는 그룹만 결과에 포함된다.
-- 프로젝트 참여 인원이 7명 이상인 프로젝트들에 대해서
-- 각 프로젝트에 참여한 임직원 수와 최대 연봉과 최소 연봉과 평균 연봉을 조회
SELECT COUNT(*), MAX(salary), MIN(salary), AVG(salary)
FROM works_on W JOIN employee E ON W.empl_id = E.id
GROUP BY W.proj_id
HAVING COUNT(*) >= 7;
복잡 예제
-- 프로젝트 참여 인원이 7명 이상인 프로젝트에 한정해서
-- 각 프로젝트별로 프로젝트에 참여한 90년대생들의 수와 이들의 평균연봉 조회
SELECT proj_id, COUNT(*), ROUND(AVG(salary), 0)
FROM works_on W JOIN employee E ON w.empl_id = E.id
WHERE E.birth_date BETWEEN '1990-01-01' AND '1999-12-31'
AND W.proj_id IN(SELECT proj_id FROM works_on
GROUP BY proj_id HAVING COUNT(*)>= 7)
GROUP BY W.proj_id
ORDER BY W.proj_id;
⇒ WHERE 절에 조건을 걸을 것인지 HAVING 절에 걸어야 하는지 잘 구분해야 한다.
SELECT 실행 순서
6. SELECT attribute(s) or aggregate function(s)
1. FROM table(s)
2. [WHERE condition(s)]
3. [GROUP BY group attribute(s)]
4. [HAVING group condition(s)]
5. [ORDER BY attribute(s)];
- select 쿼리에서 각 절(phrase) 의 실행 순서는 개념적인 순서이다.
- select 쿼리의 실제 실행 순서는 각 RDBMS 에서 어떻게 구현했는지에 따라 다르다.
'데이터베이스' 카테고리의 다른 글
[데이터베이스] JOIN 과 UNION 비교 (0) | 2023.09.25 |
---|---|
[Database] 8. JOIN (0) | 2023.09.12 |