오늘은 조건에 맞는 데이터를 가져오는 방법을 배우겠습니다. 우리가 하게 될 대부분의 데이터 요청은 "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)에 대해서 알아보았습니다.
읽어주셔서 감사합니다. 오늘도 성장하는 하루 되세요!
'데이터 분석 및 업무 자동화' 카테고리의 다른 글
슈퍼차지 파워 BI - Power BI DAX 입문자 추천 책 (0) | 2022.01.06 |
---|---|
adsp (데이터분석 준전문가) 나의 합격 수기 (0) | 2022.01.04 |
MySQL 기초 - 데이터 가져오기 (SELECT, FROM, ALIAS, LIMIT, DISTINCT) (0) | 2021.12.31 |
Power BI (파워비아이) 자격증 DA-100 알아보기 (0) | 2021.12.30 |
MySQL에서 데이터베이스는 어떻게 다루면 될까요? (CREATE, ALTER, DROP, TRUNCATE, INSERT, DELETE, UPDATE) (0) | 2021.12.29 |
댓글