서브쿼리와 GROUP BY, HAVING
먼저 SELECT절에는 여러 옵션을 줄 수 있다. 문자열을 이어주는 CONCAT, 공백을 제거해주는 TRIM 이외에도 반올림 등을 해주는 함수들이 있는데 필요할 때 검색하여 찾아 쓰면 되기 때문에 시범삼아 몇가지만 실행해본다.
문자열을 이어주는 concat이다. 컬럼명과 함께 일반 텍스트도 작은 따옴표로 넣어줄 수 있다.
파라미터로 주어진 컬럼에서, 명령한 만큼의 글자수를 오른쪽에서부터 잘라 조회해주는 RIGHT(컬럼명, 숫자)
서브쿼리란 쿼리 안에 쿼리가 들어있는 것으로 소괄호를 이용해 사용한다. SELECT절, FROM절, WHERE절에 넣을 수 있다. 소괄호 안의 쿼리가 가장 먼저 실행된다. 문자나 숫자 등의 데이터가 들어가는 곳에 서브쿼리를 넣을 수 있으며, 최종 산출 결과가 [하나의 데이터] 인 쿼리문만 서브쿼리로 작동할 수 있다. (단, IN을 위한 조건으로 사용할 때에는 예외)
평균 나이보다 많은 나이를 가진 유저만 출력해보자. WHERE절에 서브쿼리를 사용했다.
그런데 만일 ' 2021년에 가입한 사람들의 나이 평균 ' 을 보고싶으면 어떻게 해야할까? 이를 실행해보기 위해 가입 날짜 컬럼인 joinDate를 다음과 같이 수정해 주었다.
[ GROUP BY 컬럼명 ] 은 해당 컬럼의 값을 기준으로 레코드를 묶어주는 문장이다. joinDate로 묶을 경우, 2017년에 가입한 사람, 2019년에 가입한 사람, 2021년에 가입한 사람을 한 레코드에 묶는다.
SELECT joinDate,avg(age),count(email) FROM `user` GROUP BY joinDate |
하지만 아직 '2021년에 가입한 사람들만' 이라는 조건이 충족되지 않았다. GROUP BY로 묶어 출력한 결과들 중, 조건을 주어 조건과 일치하는 결과만 보려면 HAVING 절을 사용해야 한다. 우리는 2021년에 가입한 사람만 볼 것이므로, HAVING에 joinData = 2021 을 주면 된다.
WHERE = SELECT 필드명 FROM 테이블명 에 조건을 줄 때 사용한다.
HAVING = GROUP BY로 도출한 결과에 조건을 줄 때 사용한다.
ORDER BY = 결과를 정렬할 때 사용한다.
'SQL' 카테고리의 다른 글
[MySQL] 2. 테이블 생성 및 수정 - DDL (CREATE, ALTER, DROP, TRUNCATE) (3) | 2022.12.23 |
---|---|
[MySQL] 1-4. 데이터 조회 - CASE문과 IF문 (0) | 2022.12.23 |
[MySQL] 1-2. 데이터 조회 - 집계함수(MAX, MIN, AVG, COUNT, SUM...) (0) | 2022.12.23 |
[MySQL] 1-1. 데이터 조회 - WHERE 필드명 LIKE 필드명 = 와일드카드 조건 (1) | 2022.12.23 |
[MySQL] 1. 데이터 조회 - SELECT 컬럼명 AS 별칭 FROM 테이블명 WHERE 필드명 조건식 ORDER BY 컬럼명 ASC / DESC (0) | 2022.12.23 |