이 글은 EDWITH 강의를 기반으로 정리한 글입니다!
데이터 조회는 데이터 조작어(DML)의 명령어 중 하나로, 데이터 분석에서 가장 많이 사용되는 명령어이다.
여러 절들과 함께 사용할 수 있으며, 분석에 필요한 데이터를 조회해준다.
이러한 절들의 순서는 보통 SELECT ->FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY 으로 적어준다.
간단한 예제들로 각 절들을 사용해보자!
예제에 사용하는 데이터셋은 EDWITH에서 참고하시면 됩니다!
가장 기본적인 SELECT, FROM을 통해 테이블에서 모든 열을 조회해보자.
cf) SQL에서는 실행하고자 하는 명령어마다 세미콜론(";)을 적어줘야 한다.
SELECT [컬럼] FROM [테이블]
CREATE DATABASE PRACTICE; -- PRACTICE 데이터베이스 생성
USE PRACTICE; PRACTICE 데이터베이스 활성화
SELECT * -- * : 모든 열을 보고싶어..!
FROM CUSTOMER; -- CUSTOMER 테이블에서
위 코드는 이렇게 이해할 수 있다. CUSTOMER 테이블에서 모든 열을 조회해줘!
출력창에서 CUSTOMER 테이블의 모든 열을 조회한 것을 확인할 수 있다.
SQL은 코드가 직관적이라 이해하기 쉬운 것 같다.
WHERER은 원하는 조건을 적어 줄 때 사용하는 절이다.
성별이 여성인 회원을 조회해보자.
WHERE [컬럼] = 조건
SELECT *
FROM CUSTOMER
WHERE GENDER = "WOMEN";
출력창에 성별이 여성인 회원들만 조회된 것을 확인할 수 있다.
GROUP BY를 통해 원하는 컬럼을 기준으로 그룹화를 해줄 수 있다.
주의할 점은 SELECT 절에서 GROUP BY에 적은 컬럼이 들어가야 한다는 것이다. 거주지 별로 회원수가 얼마나 되는지 확인해보자.
GROUP BY [컬럼]
SELECT ADDR, COUNT(MEM_NO) AS 회원수
FROM CUSTOMER
WHERE GENDER = "WOMEN"
GROUP
BY ADDR;
거주지별로 회원수가 출력된 것을 확인할 수 있다.
위 코드에서 COUNT는 집계함수로 기준되는 컬럼 내 수를 세줄 때 사용한다. AS는 집계된 열을 다른 이름으로 출력할 때 사용한다.
AS를 사용하지 않으면 COUNT(MEM_NO)이라는 컬럼명으로 출력된다.
아까 위에서 GROUP BY로 그룹화 한 컬럼이 SELECT에 반드시 들어가야 한다고 했다. 그렇다면 SELECT에 넣지 않아주면 어떤 결과가 출력될까?
다른 열의 조회 없이 회원수에 대한 조회만 적어보면 다음과 같이 출력된다.
SELECT COUNT(MEM_NO) AS 회원수
FROM CUSTOMER
WHERE GENDER = "WOMEN"
GROUP
BY ADDR;
이번에는 MEM_NO(회원 번호)와 같이 출력을 해보자.
SELECT MEM_NO, COUNT(MEM_NO) AS 회원수
FROM CUSTOMER
WHERE GENDER = "WOMEN"
GROUP
BY ADDR;
우리는 거주지를 기준으로 회원수를 조회했지만 SELECT 절에 거주지 열을 넣지 않고 다른 열을 넣으니 다음과 같이 출력됐다. 이렇게 그룹화를 한 열을 SELECT 절에 넣지 않으면 어떤 기준으로 그룹화가 됐는지 모르기 때문에 GROUP BY 절에 사용한 컬럼을 SELECT 절에 넣어줘야 한다.
HAVING 절에는 GROUP BY로 그룹화가 된 테이블에서 새로운 조건을 넣어줄 때 사용한다.
거주지별로 회원수를 조회하는데 회원수가 100명 이상인 거주지들만 살펴보자.
HAVING [컬럼] 조건
SELECT ADDR, COUNT(MEM_NO) AS 회원수
FROM CUSTOMER
GROUP
BY ADDR
HAVING 회원수 > 100;
이번에는 성별에 관계없이 출력했기 때문에 아까보다 회원수가 많아졌다.
추가로 회원수가 100명 이하인 지역들은 출력이 안된것을 확인할 수 있다.
여기서 좀 더 보기 편하게 회원수를 오름차순/내림차순 하고 싶다면 ORDER BY 절을 사용하면 된다.
오름차순/내림차순을 하고 싶은 컬럼과 오름차순/내림차순을 적어주면 된다.
위에서 진행했던 코드에 회원수를 기준으로 오름차순으로 정렬 해보자.
ORDER BY [컬럼] ASC/DESC(오름차순/내림차순)
SELECT ADDR, COUNT(MEM_NO) AS 회원수
FROM CUSTOMER
GROUP
BY ADDR
HAVING 회원수 > 100
ORDER
BY 회원수 ASC;
회원수를 기준으로 오름차순으로 정렬된 것을 확인할 수 있다.