데일리/2023
[SQL] 중첩집계함수, SQL 실행순서, 이너조인, 아우터조인
세모이
2023. 11. 9. 22:10
반응형
중첩 집계 함수
중첩된 집계 함수 - 하나 이상의 집계 함수가 서로 중첩되어 사용되는 경우를 의미
SELECT 메뉴ID, 사용유형코드, AVG(COUNT(*)) AS AVGCNT
FROM 시스템사용이력
GROUP BY 메뉴ID, 사용유형코드;
- AVG(COUNT(*))와 같은 구문에서는 COUNT 함수가 먼저 실행되어 각 그룹에서 레코드 수를 계산하고, 이후 AVG 함수가 이 레코드 수의 평균을 계산하려고 시도하는데 이는 각 그룹에 대한 평균을 계산하기 위해 이미 계산된 값들에 대해 또 다른 집계 함수를 적용하려고 하기 때문에 문제가 발생
- 중첩된 집계 함수를 사용하려는 경우에는 서브쿼리를 활용하여 중첩된 집계 함수를 방지할 수 있음
SQL 실행순서
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT/OFFSET
TOP()
SELECT TOP(3) WITH TIES 팀명, 승리건수
FROM 팀별성적
ORDER BY 승리건수 DESC;
- SQL Server의 TOP N 질의문에서 N에 해당하는 값이 동일한 경우 함께 출력되도록 하는 WITH TIES 옵션을 ORDER BY 절과 함께 사용해야 함
INNER JOIN, OUTER JOIN
INNER JOIN
- INNER JOIN은 두 테이블 간에 공통된 값을 기준으로 조인을 수행
- 이는 두 테이블에서 일치하는 값을 가지는 행만 반환하며, 일치하는 값이 없는 경우 해당 행은 결과에서 제외. 즉, INNER JOIN은 교집합에 해당하는 결과를 반환
OUTER JOIN
- OUTER JOIN은 왼쪽, 오른쪽, 또는 양쪽 테이블에서 일치하는 값이 없는 경우에도 모든 행을 반환
- LEFT JOIN과 RIGHT JOIN은 각각 왼쪽 또는 오른쪽 테이블의 모든 행을 유지하면서, 다른 테이블과 일치하는 값이 있는 경우 해당 행을 반환
- FULL JOIN은 두 테이블 모두에서 모든 행을 유지
- LEFT, RIGHT 일때 기준 테이블은 항상 표시
employees table
emp_id | emp_name | dept_id |
---|---|---|
1 | John | 101 |
2 | Mike | 102 |
3 | Sarah | 101 |
4 | Emma | 103 |
departments table
dept_id | dept_name |
---|---|
101 | IT |
102 | HR |
- 이너 조인
SELECT employees.emp_name, departments.dept_name
FROM employees
INNER JOIN departments
ON employees.dept_id = departments.dept_id;
emp_name | dept_name |
---|---|
John | IT |
Mike | HR |
Sarah | IT |
- 레프트 조인
SELECT employees.emp_name, departments.dept_name
FROM employees
LEFT JOIN departments
ON employees.dept_id = departments.dept_id;
emp_name | dept_name |
---|---|
John | IT |
Mike | HR |
Sarah | IT |
Emma | (null) |
반응형