- 01 Group by
- 02 Having
- 03 Order by
- 04 Join
01 Group by
1. GROUP BY 절
GROUP BY 절이란?
- 데이터를 그룹별로 묶을 수 있도록 해주는 절
- GROUP BY 뒤에는 그룹핑의 기준이 되는 컬럼이 오게 됨
- 컬럼은 하나가 될 수도 있고 그 이상이 될 수도 있음
2. 집계함수
집계함수란?
- 데이터를 그룹별로 나누면 그룹별로 집계 데이터를 도출하는 것이 가능해짐
e.g. 유튜브 이용자 수를 국가별로 그룹핑한다고 했을 때 나라별로 얼마만큼의 이용자가 있는지 COUNT 해볼 수 있음

02 Having
HAVING 절이란?
- GROUP BY 절을 사용할 때 WHERE 절처럼 사용하는 조건절
- 주로 데이터를 그룹핑한 후 특정 그룹을 골라낼 때 사용

GROUP BY 절 이후에 수행됨 → 그룹핑 후에 가능한 집계 함수로 조건을 부여할 수 있음
SELECT 절 이전에 수행됨 → SELECT 절에 명시되지 않은 집계 함수로도 조건을 부여할 수 있음

※주의 : WHERE 절을 사용해도 되는 조건까지 HAVING 절로 써버리면 성능 상 불리할 수 있다.
03 Order by
ORDER BY 절이란?
- SELECT 문에서 논리적으로 맨 마지막에 수행
- SELECT 한 데이터를 정렬할 수 있으며, 따로 명시하지 않으면 데이터는 임의의 순서대로 출력됨
- ORDER BY 절 뒤에는 정렬의 기준이 되는 컬럼이 옴 (하나 또는 그 이상)
- 컬럼에는 옵션이 붙을 수 있음
ASC(Ascending) : 오름차순
DSEC(Descending) : 내림차순





* 정렬의 기준이 되는 컬럼에 NULL 데이터가 포함되어 있을 경우 데이터베이스 종류에 따라 정렬의 위치가 달라지는 데 Oracled 경우에는 NULL을 최댓값으로 취급하기 때문에 오름차순을 했을 경우 맨 마지막에 위치하게 된다(SQL Server는 반대). 만약 순서를 변경하고 싶다면 ORDER BY 절에 NULLS HRST, NULLS SST 옵션을 써서 NULL의 정렬상 순서를 변경할 수 있다.
04 Join

JOIN이란?
- 각기 다른 테이블을 한 번에 보여줄 때 쓰는 쿼리
-종류
1) EQUI JOIN2) Non EQUI JOIN3) 3개 이상 TABLE JOIN4) OUTER JOIN
1) EQUI JOIN
- Equal(=) 조건으로 JOIN하는 것으로 가장 흔히 볼 수 있는 Join의 방식
e.g. 한 쇼핑몰에서 sqlchild라는 아이디를 가진 사람이 온라인으로 마우스를 구매하고 리뷰를 작성했다. 마우스는 상품 테이블의 데이터일 것이고 리뷰는 리뷰 테이블에 저장될 것이다.



무소음 무선 마우스의 리뷰만 출력하고 싶으면 다음과 같이 WHERE 조건을 추가해주면 된다.

2) Non EQUI JOIN
- Equal(=) 조건이 아닌 다른 조건(Between, >, >=, <, <=)으로 Join하는 방식
e.g. 이벤트 기간 동안 리뷰를 작성한 고객에게 사은품을 주는 행사를 하고 있다고 가정해보자. 이 경우 리뷰 테이블과 이벤트 테이블이 JOIN되어야 할 것이다.



3) 3개 이상 TABLE JOIN
- 3개 이상의 테이블을 Join하는 방식
e.g. 위에서 예시로 본 JOIN 쿼리를 확장해서 상품 테이블, 리뷰 테이블, 이벤트 테이블을 모두 JOIN한다.

4) OUTER JOIN
- Join 조건에 만족하지 않는 행들도 출력되는 형태

LEFT OUTER JOIN의 경우 LEFT TABLE과 RIGHT TABLE의 데이터 중 JOIN에 성공한 데이터와 JOIN에 성공하지 못한 나머지 LEFT TABLE의 데이터가 함께 출력된다. Oracle에서는 모든 행이 출 력되는 테이블의 반대편 테이블의 옆에 (+) 기호를 붙여 작성해주면 된다.



리뷰가 작성되지 않은 상품의 정보도 함께 출력된다.