brunch

You can make anything
by writing

C.S.Lewis

by 플래터 Sep 15. 2022

엑셀로 SQL 이해하기 - WHERE과 ORDER BY

비개발자를 위한 엑셀로 이해하는 SQL ③

Prveiously On 비개발자를 위한 엑셀로 이해하는 SQL ②


앞선 글에서는 일반 사무직으로서 우리가 친숙한 엑셀Excel에서의 데이터 조회의 사례를 빗대어, SQL에서의 기초 문법인 FROM과 SELECT를 살펴보았다. 이어지는 이번 글에서는 데이터를 조회 및 추출하는 차원에서 사용하는 SQL의 주요 문법인 WHERE과 ORDER BY를 살펴보고자 한다.




특정 조건에 알맞은 데이터만 골라주는 WHERE


이제 우리가 앞서 배운 내용을 통해, FROM 명령어를 통해 필요한 정보가 담긴 시트/표를 지정해주었고, SELECT 구문을 통해 이 중에서도 필요한 정보가 담긴 열column을 모두 골라냈다고 가정해보자. 


그런데 우리가 엑셀에서 데이터를 조회할 때와 마찬가지로,  각각의 열column 안에 담긴 모든 정보, 즉 모든 행row이 필요한 경우도 있지만, 대부분은 ‘필터’를 통해 우리의 조건과 기준에 부합하는 정보들만 골라서 조회하는 경우가 많을 것이다.


이처럼 원하는 특정 조건에 맞는 행row만 골라내어 값을 조회하기 위한 방안으로 SQL에서는 WHERE 구문을 사용한다. 그리고 WHERE에서 사용하는 조건은 엑셀에서와 마찬가지로 크게 5가지 유형으로 나뉜다



1. 논리 연산자 : 같다(=), 같지 않다(!=)


예컨대 특정 열column의 값이 내가 찾고자 하는 특정 값과 일치하는지, 혹은 일치하지 않는지 비교하기 위해 사용한다. 일치하는 값을 찾고자 할 때는 등호(=)를, 일치하지 않는 값을 찾고자 할 때는 등호의 반대(!=) 를 사용한다. (!는 NOT을 의미한다)

상품목록 테이블(FROM 상품목록)에서 category가 '간편식'인(or이 아닌 ) 데이터rows를 골라서 모든 열을 조회(SELECT *)



2. 숫자의 크기나 날짜의 전후 비교 비교 : 크다(>), 작다(<), 이상(≥), 이하(≤) 


숫자 또는 날짜 형태의 값 중에서 내가 찾고자 하는 값이 특정 수, 또는 날짜를 기준으로 크거나 작은, 이르거나 늦은 경우 - ~보다 큰 값, ~보다 작은 값, ~보다 빠른 날짜, ~보다 늦은 날짜 등 - 를 찾기 위해 사용한다.

상품목록 테이블(FROM 상품목록)에서 original_price이 2500 이상인 데이터rows를 골라서 모든 열을 조회(SELECT *)



3. 범위 또는 목록의 포함 여부 : ~사이(BETWEEN ~ AND ~), ~중에 해당함 (IN~)


숫자나 날짜의 경우 크다, 작다와 같이 한쪽 방향의 조건이 아니라 ~사이, 와 같이 범위를 기준으로 사용하기도 한다. 이때에는 BETWEEN a AND b 의 조건을 사용한다. 반대로 ~사이가 아니라는 것을 조건으로 걸고 싶다면 앞에 NOT을 붙여 NOT BETWEEN a AND b 로 사용하면 된다.


또는 연속되는 범위가 아니라, 특정 몇 개의 항목 중에서 해당하는 것을 골라내는 경우도 있는데, 이때에는 IN (a, b, c,...)를 사용할 수 있다. 마찬가지로 해당 항목 중에 있는 게 아니라는 것을 조건으로 걸고 싶다면 앞에 NOT을 붙여 NOT IN (a, b, c,...)를 사용할 수 있다.


상품목록 테이블에서(FROM 상품목록) original_price가 2000~2500 사이거나, 2000~2500이 아닌 걸 모두 골라서 전체 열을 조회(SELECT *)


상품목록 테이블에서(FROM 상품목록) category가 '빵' 또는 '음료'이거나 '간편식' 또는 '음료'가 아닌 걸 골라 모든 열을 조회(SELECT *)



4. 특정 문자열 포함 여부 판단: 포함(LIKE), 포함 안 함(NOT LIKE)


반면 문자 형태의 데이터에서 특정 글자나 단어로 시작하거나, 특정 글자나 단어로 끝나거나, 혹은 중간에 특정 글자나 단어를 포함하는 것들을 골라내고 싶은 경우에는 LIKE를 사용한다. BETWEEN, IN과 마찬가지로 반대로 제외하고 싶다면 앞에 NOT을 붙여 NOT LIKE를 이용할 수 있다.


LIKE '문자열%' : 특정 문자열로 시작하는 것들을 모두 골라낸다

LIKE '%문자열' : 특정 문자열로 끝나는 것들을 모두 골라낸다

LIKE '%문자열%' : 특정 문자열이 어딘가에라도 포함되어있다면 모두 골라낸다


※ 문자열의 경우 작은따옴표('')를 이용해 감싸주어야만 문자열로 인식한다.

※ %는 '(앞 또는 뒤에) 무슨 글자가 몇 글자가 있든 상관 않는다'는 의미다. 예를 들어 'a%'라고 한다면 apple, app, airplane 등과 같은 문자형 데이터들이 해당되고, '%s'라면 as, bus, toss 같은 문자형 데이터들이 해당된다. 또 '%a%'라고 한다면 문자 내에 어디든 a가 하나라도 포함되어 있는 문자형 데이터를 모두 포함한다., 


상품목록 테이블에서(FROM 상품목록) name에 '밥'으로 끝나가나, '사'로 시작하는 글자가 포함된 걸 모두 골라서 전체 열을 조회(SELECT *)
상품목록 테이블에서(FROM 상품목록) name에 '라'라는 글자가 포함된 걸 모두 골라서 전체 열을 조회(SELECT *)



5. 비어있음 (IS NULL), 비어있지 않음 (IS NOT NULL)


반면 엑셀에서 데이터를 기록하고 관리하다 보면 특정 열column 또는 특정 행row의 값이 비어있는 경우도 있다. 기록이 누락되었든, 기록한 것을 지웠든, 혹은 기록이 없는 게 정상이든 여러 이유로 값이 비어있는 경우, 이를 골라내기 위해서는 '비어있다'는 의미의 IS NULL을 사용하거나 혹은 '비어있지 않다'는 의미의 IS NOT NULL을 사용할 수 있다.


상품목록 테이블에서(FROM 상품목록) category_id가 비어있거나(IS NULL) 비어있지 않은(IS NOT NULL) 걸 골라서 전체 열을 조회(SELECT *)




데이터의 정렬 순서를 정해주는 ORDER BY


엑셀에서도 숫자, 날짜 등의 데이터를 취급하다 보면 편의에 따라 정렬 순서를 바꾼다. 가령 가격이 큰 것부터 작은 것 순으로 내림차순을 하기도 하고, 등급이 높은(1등급) 것부터 낮은(9등급) 것까지 오름차순을 하기도 한다. 


이때에 우리는 엑셀에서 필터가 적용된 테이블을 클릭하여 

1) 어떤 열을 기준으로 정렬할 것인지 

2) 그 열을 기준으로 어떤 방식으로 정렬할 것인지를 선택하는데, 


SQL에서는 이를 ORDER BY라는 명령어를 통해 적용한다


ORDER BY 칼럼1 

ORDER BY 칼럼1 ASC

"칼럼1을 기준으로 오름차순으로 정렬해줘"

※ ASC라고 따로 명시하지 않아도 오름차순이 기본값default

※ ASC는 Ascending(오름차순)의 약자다.

상품목록 테이블(FROM 상품목록)의 모든 열(SELECT *)의 모든 데이터를 조회하되(WHERE 조건 없음) item_no를 기준으로 오름차순

ORDER BY 칼럼1 DESC

"칼럼1을 기준으로  내림차순으로 정렬해줘" 

※ DESC는 Descending(내림차순)의 약자다.

상품목록 테이블(FROM 상품목록)의 모든 열(SELECT *)의 모든 데이터를 조회하되(WHERE 조건 없음) category_id를 기준으로 내림차순

ORDER BY 칼럼1 DEC, 칼럼2 ASC

칼럼1을 기준으로 내림차순으로 정렬한 뒤, 다시 그다음엔 칼럼2를 기준으로 오름차순으로 정렬해줘

※ 엑셀과 달리 여러 개의 칼럼을 차례대로 이용하여 정렬할 수 있다. 이 경우 첫 번째 칼럼을 기준으로 정리하고 그 안에서 다시 다음 칼럼을 기준으로 재정렬한다. 

category_id를 기준으로 내림차순 후 다시 그 안에서 origincal_price를 기준으로 오름차순으로 정렬




이번 글에서는 우리가 엑셀에서 흔히 사용하는 필터와 정렬을 기준으로 SQL의 WHERE과 ORDER BY를 살펴보았다. 


이를 통해 우리는

1. FROM 특정 테이블(엑셀의 시트)에서 

2. SELECT 원하는 열column을 골라서 조회하는데

3. WHERE 그중에서도 원하는 조건에 맞는 데이터/행row만 골라서 조회하고

4. ORDER BY 특정 열column을 기준으로 오름차순/내림차순으로 정렬

하는 것에 대해 살펴보았다.


이어지는 다음 글에서는 이러한 기초 문법에서 조금 더 나아가, 특정 값을 기준으로 분류하여 그룹핑할 때 사용하는 GROUP BY와 그룹핑 후 사용하는 조건인 HAVING, 그리고 그룹핑 후 해당 그룹에 대한 정보를 드러내는 집계 함수에 대해 살펴보고자 한다.



더 많은 지식과 경험, 노하우가 궁금하다면

홈페이지 방문하기

뉴스레터 구독하기

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari