요즘IT
위시켓
최근 검색어
전체 삭제
최근 검색어가 없습니다.

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

회원가입을 하면 원하는 문장을
저장할 수 있어요!

다음

회원가입을 하면
성장에 도움이 되는 콘텐츠를
스크랩할 수 있어요!

확인

기획

비개발자를 위한 엑셀로 이해하는 SQL: ③ WHERE와 ORDER BY

년차,
어떤 스킬
,
어떤 직무
독자들이 봤을까요?
어떤 독자들이 봤는지 궁금하다면?
로그인

 

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

 

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

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

 

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

 

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

 

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

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

 

카테고리 상품목록
상품목록 테이블(FROM 상품목록)에서 category가 '간편식'인(or이 아닌)
데이터를 골라서 모든 열을 조회(SELECT *)한 결과 <출처: 본인>

 

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

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

 

카테고리 숫자 크기
상품목록 테이블(FROM 상품목록)에서 original_price이 2500 이상인 데이터를
골라서 모든 열을 조회(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가 하나라도 포함되어 있는 문자형 데이터를 모두 포함한다.

 

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

 

name like
상품목록 테이블에서(FROM 상품목록) name에 '라'라는 글자가
포함된 걸 모두 골라서 전체 열을 조회(SELECT *)한 결과 <출처: 본인>

 

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

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

 

category id 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라고 따로 명시하지 않아도 오름차순이 기본값

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

 

item no asc
상품목록 테이블(FROM 상품목록)의 모든 열(SELECT *)의 모든 데이터를
조회하되(WHERE 조건 없음) item_no를 기준으로 오름차순 결과 <출처: 본인>

 

ORDER BY 칼럼1 DESC

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

 

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

 

category id desc
상품목록 테이블(FROM 상품목록)의 모든 열(SELECT *)의 모든 데이터를
조회하되(WHERE 조건 없음) category_id를 기준으로 내림차순 결과 <출처: 본인>

 

ORDER BY 칼럼1 DEC, 칼럼2 ASC

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

 

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

 

original price asc
category_id를 기준으로 내림차순 후 다시 그 안에서 origincal_price를
 기준으로 오름차순으로 정렬한 결과 <출처: 본인>

 

 

필터와 정렬로 정보 찾기

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

  1. FROM 특정 테이블(엑셀의 시트)에서
  2. SELECT 원하는 열을 골라서 조회하는데
  3. WHERE 그중에서도 원하는 조건에 맞는 데이터/행만 골라서 조회하고
  4. ORDER BY 특정 열을 기준으로 오름차순/내림차순으로 정렬

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

 

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

좋아요

댓글

공유

공유

댓글 0
그로스PM
86
명 알림 받는 중

작가 홈

그로스PM
86
명 알림 받는 중
사수 없이 고군분투하며 깨닫고 배운 것들을 기록하여 공유합니다. 저의 어제의 발버둥이 누군가의 오늘에 도움이 되길 바랍니다.

좋아요

댓글

스크랩

공유

공유

요즘IT가 PICK한 뉴스레터를 매주 목요일에 만나보세요

요즘IT가 PICK한 뉴스레터를
매주 목요일에 만나보세요

뉴스레터를 구독하려면 동의가 필요합니다.
https://auth.wishket.com/login