본문 바로가기
데이터 분석 및 업무 자동화

MySQL 기초 - 조건에 맞는 데이터 가져오기 (WHERE, LIKE, IS NULL)

by 공부머리 2022. 1. 3.
반응형

오늘은 조건에 맞는 데이터를 가져오는 방법을 배우겠습니다. 우리가 하게 될 대부분의 데이터 요청은 "10번 이상 구매한 VIP 고객 리스트 뽑아주세요" 또는 "매출 5000만 원 이상의 상품 리스트를 뽑아주세요"와 같은 조건이 붙습니다. 따라서 조건에 맞는 데이터를 가져오는 방법은 매우 중요합니다.

 

오늘 배울 내용의 항목은 아래와 같습니다.

  • 조건에 맞는 데이터 가져오기 (WHERE)
  • 비교 연산자 (=)
  • 논리 연산자 (NOT, AND, OR)
  • 기타 주요 연산자 (BETWEEN, IN)
  • 문자 데이터 다루기 (LIKE)
  • NULL 데이터 다루기 (IS NULL)

조건에 맞는 데이터 가져오기 (WHERE)

가져올 데이터의 조건을 지정해주는 키워드는 WHERE 입니다.

 

WHERE의 특징

  • WHERE [조건식] 형식으로 사용합니다.
  • 조건식이 True(참)이 되는 로우만 선택합니다.

WHERE 쿼리 문법

SELECT [컬럼 이름]

FROM [테이블 이름]

WHERE 조건식;

 

조건식을 작성하는 데에는 다양한 방식이 있습니다. 보통 '연산자'를 사용하여 조건식을 작성합니다. 원하는 데이터의 조건이 True(참)이 되게끔 조건식을 만듭니다. 그러면 예시를 통해서 좀 더 구체적으로 알아보겠습니다.

True(참) False(거짓)
1 = 1: 1=2:
100 > 10; 100 < 10;
"A" IN ("A", "B", "C") "D" IN ("A", "B", "C")

 

MySQL에서는 True(참) 값을 1로 표현합니다. False(거짓) 값은 0으로 표현합니다. 이것은 엑셀과 동일합니다.

예를 들어 SELECT 1=1:의 결괏값은 1이 반환되고, SELECT 0=1;의 결과값은 0이 반영됩니다.

 

연산자의 종류는 다양한데 대표적인 연산자는 아래와 같습니다.

  • 비교 연산자 : =, >, <
  • 논리 연산자 : NOT, AND< OR 등
  • 기타 주요 연산자 : BETWEEN, IN 등

비교 연산자 (=)

연산자 활용 의미 예시
= A=B A와 B가 같다 1=1
!= A!=B A와 B가 같지 않다 1!=2
> A>B A가 B보다 크다 10>1
<= A>=B A가 B보다 크거나 작다 10>=10
< A<B A가 B보다 작다 10<100
<= A<=B A가 B보다 작거나 같다 10<=10

 

예를 들어서 "피카츄의 number를 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT number

FROM pokemon.mypokemon

WHERE name = 'pikachu';

 

다른 예를 들어보죠. "속도가 50보다 큰 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE speed>50;

 

다른 예입니다. "전기 타입이 아닌 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE type!='electric';


조건에 맞는 데이터 가져오기 (NOT, AND, OR)

논리 연산자란 조건식에 논리 조건을 적용하는 기호를 의미합니다.

연산자 활용 의미
AND A AND B A와 B 모두 True이면 True
OR A OR B A와 B 둘 중 하나만 True이면 True
NOT NOT A A가 아니면 True

 

예를 들어서 "속도가 100 이하인 전기 타입 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE speed <= 100 AND type='electric';

 

다른 예를 들어서 "벌레 타입이거나 노말 타입인 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE type <= 'bug' OR type='normal';

 

다른 예를 들어서 "속도가 100 이하이고 벌레 타입이 아닌 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE speed <= 100 AND NOT(type='bug');


조건에 맞는 데이터 가져오기 (BETWEEN, IN)

BETWEEN 연산자는 특정 범위 내의 데이터를 선택할 때 사용하는 연산자입니다.

 

BETWEEN의 특징

  • [컬럼 이름] BETWEEN A AND B 형식으로 사용합니다.
  • 해당 컬럼 값이 A와 B 사이에 포함되는 값을 가진 로우만 선택합니다. (A <= 컬럼 값 <= B)
  • [컬럼 이름] BETWEEN A AND B 쿼리는 A <= [컬럼 이름] AND [컬럼 이름] <= B와 동일합니다.

 

쿼리 문법은 다음과 같습니다.

SELECT [컬럼 이름]

FROM [테이블 이름]

WHERE [컬럼 이름] BETWEEN [조건 1] AND [조건 2]

 

예를 들어서 "속도가 50과 100 사이인 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE speed BETWEEN 50 AND 100;

 

다음으로 IN 연산자는 목록 내 포함되는 데이터를 선택할 때 사용하는 연산자입니다.

 

IN의 특징

  • [컬럼 이름] IN (A, B, ..., C) 형식으로 사용합니다.
  • 해당 컬럼 값이 '()' 내의 값에 포함되는 값을 가진 로우만 선택합니다.
  • [컬럼 이름] IN (A, B) 쿼리는 [컬럼 이름] = A OR [컬럼 이름] = B와 동일합니다.
  • 목록에 넣을 값이 여러 개일 때, OR 연산자보다 표현 및 이해가 쉽습니다.

 

IN의 쿼리 문법은 다음과 같습니다.

SELECT [컬럼 이름]

FROM [테이블 이름]

WHERE [컬럼 이름] IN ([조건 1], [조건 2], ...);

 

예를 들어서 "벌레 타입이거나 노말 타입인 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE type IN ('bug', 'normal');


문자 데이터 다루기 (LIKE)

LIKE는 특정 문자열이 포함된 데이터를 선택하는 연산자입니다.

 

LIKE의 특징

  • [컬럼 이름] LIKE [검색할 문자열] 형식으로 사용합니다.
  • 해당 컬럼 값이 [검색할 문자열]을 포함하고 있는 로우만 선택합니다.
  • [검색할 문자열] 내에 와일드카드를 사용하여 검색 조건을 구체적으로 표현할 수 있습니다.

 

와일드카드

와일드카드 의미
% 0개 이상의 문자
_ 1개의 문자

"%"는 0개 이상의 문자열이지만 몇 개의 문자인지는 알 수 없습니다. "_"는 1개의 문자열입니다. "__"는 2개의 문자열입니다. "_%"는 1개 이상의 문자열이지만 몇 개의 문자인지는 알 수 없습니다.

 

% 의 사용 예제는 다음과 같습니다.

'%e'는 e로 끝나는 문자열을 의미하고, e, ee, eevee, apple, pineapple 등이 해당됩니다.

'e%'는 e로 시작하는 문자열을 의미하고, e, ee, eevee, eric 등이 해당됩니다.

'%e%'는 e를 포함하는 문자열을 의미하고, e, ee, eevee, apple, pineapple, aespa 등이 해당됩니다.

 

_의 사용 예제는 다음과 같습니다.

'_e'는 e로 끝나고 e 앞에 1개의 문자가 있는 문자열을 의미하고, e, ee, ce 등이 해당됩니다.

'%_e'는 e로 끝나고 e 앞에 1개 이상의 문자가 있는 문자열을 의미하고, ee, ee, eevee, apple, pineapple 등이 해당됩니다.

'%_e_%'는 e를 포함하고 e 앞 뒤로 각각 1개 이상의 문자가 있는 문자열을 의미하고, eevee, aespa 등이 해당됩니다.

 

LIKE의 쿼리 문법은 다음과 같습니다.

SELECT [컬럼 이름]

FROM [테이블 이름]

WHERE [컬럼 이름] LIKE [검색할 문자열];

 

예를 들어서 "이름이 'chu'로 끝나는 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE name LIKE '%chu';

 

다른 예를 들어서 "이름에 a가 포함되지만 a로 끝나지 않는 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE name LIKE '%a_%';


NULL 데이터 다루기 (IS NULL)

NULL은 데이터 값이 존재하지 않는다는 것을 표현합니다. 0이나 공백이 아닌 알 수 없는 값을 의미합니다.

 

IS NULL은 데이터가 NULL인지 아닌지를 확인하는 연산자입니다.

 

IS NULL의 특징

  • [컬럼 이름] IS NULL 형식으로 사용합니다.
  • 해당 컬럼 값이 NULL이 있는 로우만 선택합니다.
  • NULL이 아닌 데이터를 검색하고 싶다면 IS NOT NULL을 사용합니다.
  • [컬럼 이름] = NULL 또는 [컬럼 이름] != NULL 과 같은 표현은 사용하지 않습니다.

 

IS NULL의 문법은 다음과 같습니다.

SELECT [컬럼 이름]

FROM [테이블 이름]

WHERE [컬럼 이름] IS NULL;

 

예를 들어서 "number가 null인 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE number IS NULL;

 

다른 예를 들어서 "type이 null이 아닌 포켓몬의 이름을 찾아주세요"라는 쿼리문은 다음과 같이 작성하면 됩니다.

SELECT name

FROM pokemon.mypokemon

WHERE type IS NOT NULL;


이상으로 MySQL 기초 - 조건에 맞는 데이터 가져오기 (WHERE, LIKE, IS NULL)에 대해서 알아보았습니다.

읽어주셔서 감사합니다. 오늘도 성장하는 하루 되세요!

반응형

댓글