SELECT에서는 결과의 정렬, 결과의 개수 제한, 중복 제거 등 추출하는 데이터에 대한 조건에서 추가적인 처리가 가능하다.
또한 GROUP BY 등 지정한 열의 데이터들을 같은 데이터끼리는 묶어 결과를 추출하는 방식도 가능하다.
주로 그룹으로 묶는 경우는 합계, 평균, 개수 등을 처리할 때 사용하고 GROUP BY 절에서도 HAVING 절을 통해 조건식을 추가할 수 있다.
SELECT 열-이름
FROM 테이블-이름
WHERE 조건
GROUP BY 열-이름
HAVING 조건
ORDER BY 열-이름
LIMIT 숫자
ORDER BY의 경우 결과의 값이나 개수에 대해서 영향을 미치지 않고 결과 출력 순서를 조절한다.
기본 값은 ASC로 오름차순으로 정렬이 되며 열 이름 뒤에 DESC를 추가하면 내림차순으로 정렬한다.
ORDER BY의 경우 WHERE 이후에 나와야하며, 여러 개의 열을 지정할 수 있다.
SELECT ID, NAME, DATE, NUM
FROM MEMBER
WHERE NUM >= 160
ORDER BY NUM DESC, DATE ASC;
LIMIT은 출력하는 개수를 제한한다.
SELECT
FROM MEMBER
LIMIT 3;
위 경우 MEMBER에서 전체 중 3건만 조회가 된다.
LIMIT 형식은 LIMIT 시작, 개수이며, 하나의 숫자만 넣는 경우 기본적으로 0, N의 형태를 가진다.
또한 아무런 조건 없이 제한되는 갯수의 데이터를 뽑지 않으며 아래와 같이 ORDER BY와 함께 사용한다.
SELECT NAME, DATE
FROM MEMBER
ORDER BY DATE
LIMIT 3;
필요의 따라서는 아래와 같이 중간부터 출력할 수 있다.
SELECT NAME, NUM
FROM MEMBER
ORDER BY NUM DESC
LIMIT 3, 2;
LIMIT 시작, 개수 는 LIMIT 개수 OFFSET 시작 이라고도 쓸 수 있다.
DISTINCT는 조회된 결과에서 중복되는 데이터를 1개만 남긴다.
ORDER BY를 사용해도 같은 종류의 데이터가 몰려있지만 갯수가 너무 많으면 종류를 세기 어렵다.
위와 같은 상황에서 아래처럼 활용한다.
SELECT DISTINCT ADDR FROM MEMBER
SELECT 열-이름
FROM 테이블-이름
WHERE 조건식
GROUP BY 열-이름
HAVING 조건식
ORDER BY 열-이름
LIMIT 숫자
GROUP BY는 말 그대로 GROUP으로 묶어주는 역할을 한다.
여러 건의 데이터가 여러 개수가 있는 경우 각각의 행이 별도로 출력되는데 이를 집계하기 위한 집계 함수와 함께 데이터를 GROUPING 하는 기능을 한다.
| 함수명 | 설명 |
|---|---|
| SUM | 합계 |
| AVG | 평균 |
| MIN | 최소 |
| MAX | 최대 |
| COUNT | 행의 개수 |
| COUNT(DISTINCT) | 행의 개수(중복은 하나만 인정) |
SELECT ID, SUM(AMOUNT)
FROM BUY
GROUP BY ID;
위의 경우에는 각 회원별로 구매한 개수를 합쳐서 출력한 것이다.
BUY에서 SUM 함수로 구매한 개수를 합쳤다.
금액의 총합은 아래와 같이 나타낼 수 있다.
SELECT ID, SUM(PRICE * AMOUNT)
FROM BUY
GROUP BY ID;
구매한 물품 개수의 평균은 아래와 같이 나타낼 수 있다.
SELECT AVG(AMOUNT) FROM BUY;
COUNT 함수를 사용하는 경우에 COUNT(*)을 실행하면 NULL이 있는 경우에도 집계된다.
이를 해결하기 위해서는 NULL이 없는 열 이름을 정확하게 지정해야한다.
집계함수에 WHERE을 사용해서 조건을 추가하는 경우, 사용할 수 없는 함수라는 에러가 발생한다.
HAVING의 경우 집계함수에 대해 조건을 제한하도록 하는 방식이며 GROUP BY 다음에 나온다.
SELECT ID, SUM(PRICE * AMOUNT)
FROM BUY
GROUP BY ID
HAVING SUM(PRICE * AMOUNT) > 1000;
ORDER BY SUM(PRICE * AMOUNT) DESC;
위 경우에는 SUM(PRICE * AMOUNT)가 1000보다 큰 경우를 ID 기준으로 GROUPING 하는 것을 의미한다.