SQL

[MySQL] 1-3. 데이터 조회 - SELECT 절 옵션 (CONCAT(), TRIM(), RIGHT()...), 서브쿼리, GROUP BY, HAVING

찰리-누나 2022. 12. 23.

 

 

서브쿼리와 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 = 결과를 정렬할 때 사용한다.

 

댓글