실무 SQL에서 가장 많이 사용되는 'SELECT문'에 대해 알아보자.
SELECT는 데이터 분석에 있어 가장 많이 사용되는 명령어 중 하나이다.
같이 많이 사용되는 명령어로는
FROM, WHERE, GROUP BY, HAVING, ORDER BY가 있으며, 어떨 때 쓰이는지 차근차근 알아보도록 하자.
✔Table of Contents
1. FROM : 테이블 선택
이번 포스팅에서 사용할 테이블은 [MEMBER] 이며, 따로 제공된 데이터셋을 활용한다.
먼저 FROM절에 테이블명을 입력하여 테이블을 선택할 수 있다.
SELECT * FROM MEMBER
이렇게 1,206개의 행을 가진 테이블 [MEMBER] 를 불러왔다.
2. WHERE : 테이블 필터링
WHERE절을 활용하면 원하는 데이터만 따로 불러올 수 있다.
예시로, 위의 [MEMBER] 테이블로부터 성별이 남자인 것만 필터링하려면 다음을 입력한다.
SELECT *
FROM MEMBER
WHERE gender = 'man'
성별이 남성(gender가 'man'인 것)인 데이터 684개만 출력되었다.
3. GROUP BY : 테이블 그룹화
정말 많이 쓰이는 기능이다. GROUP BY는 특히 집계함수(COUNT, SUM 등) 와 자주 쓰이게 된다. (집계함수에 대해선 추후 포스팅)
[GROUP BY + 특정 컬럼]으로 특정 컬럼을 기준으로 데이터를 그룹화할 수 있으며, 예제로 바로 알아보자.
| Q. addr(주소지)로 그룹바이하고, 남성만 필터링하여 회원수를 집계하라.
SELECT addr, COUNT(mem_no) AS mem_cnt
FROM MEMBER
WHERE gender= 'man'
GROUP BY addr
| Q. 주소지(addr), 성별(gender)로 그룹바이하여 회원수를 집계하라.
SELECT addr, gender, count(mem_no) AS mem_cnt
FROM MEMBER
GROUP BY addr, gender
4. HAVING: GROUP BY 이후 필터링
HAVING은 반드시 GROUP BY 명령어와 같이 사용되어야만 한다.
먼저 GROUP BY로 테이블을 그룹화한 후, 이렇게 그룹화가 된 테이블에 특정 조건으로 필터링을 한다고 보면 된다.
예시로 알아보자.
| Q. 주소지(addr)별로 회원수를 집계하되, 남자만 뽑고, 회원수가 50 이상만 나오도록 하여라.
SELECT addr, count(mem_no) AS mem_cnt
FROM MEMBER
WHERE gender = 'man'
GROUP BY addr
HAVING count(mem_no) >= 50
위와 같이, 주소지(addr 컬럼)로 GROUP BY를 먼저 해준 다음,
HAVING으로 집계한 회원수인 COUNT(mem_no)가 50 이상으로 필터링을 해준다.
※ 순서 주의
그냥 HAVING mem_cnt >= 50으로 하면 안되나요? 앞에서 'mem_cnt'로 정의했는데! → 안된다.
그 이유는 SQL은 HAVING 다음에 SELECT가 실행되기 때문이다.
즉, HAVING mem_cnt 라고 쓴다면 아직 SELECT가 실행되기 이전이므로 mem_cnt가 뭔지 SQL은 모르기 때문에 에러가 난다. 주의하기!
5. ORDER BY: 테이블 정렬
ORDER BY는 그 이름에서도 알 수 있듯이, 테이블을 가지런히 정렬하는 명령어이다. 다시 말해서 sorting을 한다.
가장 마지막에 실행되는 명령어이다.
내림차순 또는 오름차순으로 정렬할 수 있는데,
내림차순이란 데이터가 큰 것부터 → 작은 순서대로 정렬하며 (가장 대표적으로 사용됨 ex. 성적순)
오름차순이란 데이터가 작은 것부터 → 큰 순서대로 정렬하는 것을 말한다. (ex. 순위)
내림차순으로 정렬하는 경우 DESC를 써주고,
오름차순으로 정렬하는 경우 ASC를 써준다. 오름차순이 디폴트이므로 ASC는 생략해도 된다!
| Q. 주소지(addr)별로 회원수를 집계하되, 남자만 뽑고, 회원수가 50 이상만 나오도록 하고, 회원수가 큰 것부터 정렬하여라.
SELECT addr, count(mem_no) AS mem_cnt
FROM MEMBER
WHERE gender = 'man'
GROUP BY addr
HAVING count(mem_no) >= 50
ORDER BY count(mem_no) DESC
이렇게 회원수가 큰 순서대로 정렬한다면 내림차순 정렬이므로 DESC로 정렬해준다.
5-1) ORDER BY는 가장 마지막에 실행되는 명령어이므로, 이렇게 써도 성립한다.
ORDER BY mem_cnt DESC
SELECT 다음으로 ORDER BY가 실행되기 때문에, 꼭 COUNT(mem_no)가 아니라 mem_cnt를 써줘도 된다.
5-2) 또한 더 간단하게 숫자로 정렬을 할 수도 있다. 바로 '열 번호'를 이용해 정렬하는 것이다.
ORDER BY 2 DESC
위와 같이 실행하게 되면 두번째 열, 즉 mem_cnt가 내림차순으로 정렬된다.
길게 컬럼명을 다 칠 필요가 없어서, 나는 이 방법을 애용한다 :)
[참고] SQL 문법 vs. SQL 실행 순서
- SQL 문법 순서
- SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY
- SQL 실행 순서
- FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
이렇게 이번 포스팅에선 SQL에서 가장 많이 쓰이는 SELECT문과 명령어들을 살펴보았다.
다음엔 두번째로 SQL에서 많이 쓰이는 JOIN 명령어를 살펴본다.
'Skillset > SQL' 카테고리의 다른 글
SQL 서브쿼리(Sub Query) 예제 - select절, from절, where절 (4) | 2022.05.28 |
---|---|
SQL JOIN 예제 - INNER, LEFT, RIGHT, FULL, CROSS, SELF JOIN (0) | 2022.05.27 |
SQL 데이터 추출 / 삽입 / 수정 / 삭제하기 (SQL select, insert, update, delete) (0) | 2022.05.25 |
SQL 테이블 생성 / 변경 / 삭제하기 (SQL create, alter, truncate, drop table) (0) | 2022.05.24 |
SQL 설치 및 기본 명령어 알아보기 (0) | 2022.05.24 |