STUDY/MySQL

MySQL/ 기본 문법 #2

sh.ds 2023. 10. 17. 21:44
이 포스트는 도서 "SQL로 맛보는 데이터 전처리 분석"을 베이스로 학습한 내용을 정리한 포스트이다.
https://www.yes24.com/Product/Goods/86544423
 

SQL로 맛보는 데이터 전처리 분석 - 예스24

SQL을 이용하여 현업에서 자주 사용되는 KPI 지표를 직접 추출해본다데이터 분석을 하기 위해서는 데이터베이스에 존재하는 데이터를 직접 추출할 수 있어야 한다. SQL은 우리가 데이터베이스에

www.yes24.com

 

이어서 다음은 WHERE 구문이다.

 

WHERE 그리고 조건문 연산자

💡 WHERE 구문은 조건문에 사용된다.

      특정 값을 가지거나 대소관계를 조건으로 적용할 수 있다.

SELECT *
FROM orderdetails 
WHERE priceeach < 30; #priceeach 컬럼의 값이 30 미만인 조건문

 

 

BETWEEN은 A에서 B까지의 데이터만 출력할 수 있는 연산자다.

 

SELECT *
FROM orderdetails 
WHERE priceeach BETWEEN 30 AND 50; #priceeach 값이 30에서 50 사이인 값들만 출력한다.

 

 

IN은 OR 같이 컬럼 값이 A 또는 B의 데이터를 출력하는 연산자다.

 

#OR 연산자 사용
SELECT 
	customernumber
    , country 
FROM customers
WHERE country = 'USA' OR country = 'Canada' OR country = 'France'
;

#IN 연산자 사용
SELECT 
	customernumber
    , country 
FROM customers
WHERE country IN ('USA', 'Canada', 'France')
;

 

결과는 같지만 코드는 전혀 다른 형태로 작성된다. 상황에 맞게 필요한 연산자를 사용하자.

 

 

➕ NOT IN은 선택한 값을 제외한 데이터를 출력한다.

 

SELECT 
	customernumber
    , country 
FROM customers
WHERE country NOT IN ('USA', 'Canada', 'France')
;

country의 값이 USA, Canada, France가 아닌 모든 데이터가 출력되는 걸 확인할 수 있다.

 

 

➕ IS NULL은 결측치가 있는 데이터를 찾아낸다. NOT을 응용해 결측치가 없는 데이터를 찾을 수도 있다.

 

#employees 테이블에서 reportsto 값이 결측치인 employeenumber를 출력
SELECT employeenumber
FROM employees
WHERE reportsto IS NULL
;

#employees 테이블에서 reportsto 값이 결측치가 아닌 employeenumber를 출력
SELECT employeenumber
FROM employees
WHERE reportsto IS NOT NULL
;

 

 

➕ LIKE는 '%TEXT%'의 TEXT를 포함한 데이터를 조회한다.

 

SELECT 
	addressline1
FROM customers
WHERE addressline1 LIKE '%ST%';

ST가 포함된 데이터가 모두 조회됐다.

 

 

 

GROUP BY

💡 GROUP BY는 컬럼 값을 그룹으로 묶는 구문이다. 

#customernumber 데이터의 수를 country와 city 별로 그룹핑
SELECT 
	country -- 문자 칼럼
    , city -- 문자 칼럼
    , COUNT(customernumber) AS n_customers
FROM customers
GROUP BY country, city
;

국가와 도시 별로 customernumber의 수로 책정한 고객 수를 n_customers 컬럼을 만들어 출력했다.

 

SELECT 
	customernumber
    , checknumber
    , SUM(amount)
FROM 
	payments
GROUP BY customernumber, checknumber
;

 

 

➕ CASE WHEN 연산자는 IF 조건문과 같은 역할을 한다.

 

# country 값이 USA인 데이터의 수를 N_USA로 출력

SELECT 
	SUM(CASE WHEN country = 'USA' THEN 1 ELSE 0 END) N_USA
FROM 
	customers;

USA인 값이 1로 여겨지고 그렇지 않은 값이 0으로 여겨지기 때문에 36개의 값이 있었다는 걸 알 수 있다.

 

# 위 코드에서 N_USA 값을 전체 데이터 수로 나눠 UA_PORTION으로 USA의 비율을 출력

SELECT 
	SUM(CASE WHEN country = 'USA' THEN 1 ELSE 0 END) N_USA
    , COUNT(*)
    , SUM(CASE WHEN country = 'USA' THEN 1 ELSE 0 END) / COUNT(*) AS USA_PORTION
FROM 
	customers;


WHERE와 조건문 연산자, GROUP BY에 대한 포스팅은 여기까지

다음엔 JOIN과 CASE WHEN에 대한 포스팅이 이어질 것 같다. ✋🤚

 

'STUDY > MySQL' 카테고리의 다른 글

MySQL/ 기본 문법 #3  (0) 2023.10.19
MySQL/ 기본 문법  (0) 2023.10.16