조건에 맞는 데이터 가져오기 (WHERE)
WHERE
- 가져올 데이터의 조건을 지정해주는 키워드
- WHERE[조건식] 형식으로 사용합니다
- 조건식이 True(참)이 되는 로우만 선택합니다
SELCT[컬럼 이름]
FROM[테이블 이름]
WHERE 조건식;
조건식
- 조건식을 작성하는 데에는 다양한 방식이 있다.
- 보통 '연산자'를 사용하여 조건식을 작성
- 원하는 데이터의 조건이 True(참)이 되게끔 조건식을 만듦
- MySQL에서는 True(참) 값을 1로 표현, False(거짓)값은 0으로 표현
비교 연산자 (=,>,<)
- A=B : A와 B가 같다
- A!=B : A와 B가 같지 않다
- A>B : A가 B보다 크다
- A>=B : A가 B보다 크거나 같다
- A<B : A가 B보다 작다
- A<=B : A가 B보다 작거나 같다
논리 연산자 (NOT, AND, OR)
- A AND B : A와 B 모두 True이면 True
- A OR B : A와 B 둘 중 하나만 True이면 True
- NOT A : A가 아니면 True
기타 주요 연산자 (BETWEEN, IN)
BETWEEN
- 특정 범위 내의 데이터를 선택할 때 사용하는 연산자
- [컬럼 이름]BETWEEN A AND B 형식으로 사용
- 해당 컬럼 값이 A와 B사이에 포함되는 값을 가진 로우만 선택
- [컬럼 이름]BETWEEN A AND B 쿼리는 A<=[컬럼 이름]AND[컬럼 이름]<=B와 동일
SELECT[컬럼 이름]
FROM[테이블 이름]
WHERE[컬럼 이름]BETWEEN[조건1]AND[조건2];
IN
- 목록 내 포함되는 데이터를 선택할 때 사용하는 연산자
- [컬럼 이름]IN(A,B,...,C)형식으로 사용
- 해당 컬럼의 값이 '()'내의 값에 포함되는 값을 가진 로우만 선택
- [컬럼 이름]IN(A,B) 쿼리는 [컬럼 이름]=A OR [컬럼 이름]=B와 동일
- 목록에 넣을 값이 여러개 일때, OR 연산자보다 표현 및 이해가 쉽다
SELECT[컬럼 이름]
FROM[테이블 이름]
WHERE[컬럼 이름]IN([조건1],[조건2],..);
문자 데이터 다루기 (LIKE)
LIKE
- 특정 문자열이 포함된 데이터를 선택하는 연산자
- [컬럼 이름] LIKE [검색할 문자열] 형식으로 사용
- 해당 컬럼 값이 [검색할 문자열]을 포함하고 있는 로우만 선택
- [검색할 문자열]내에 와일드카드를 사용하여 검색 조건을 구체적으로 표현
SELECT[컬럼 이름]
FROM[테이블 이름]
WHERE[컬럼 이름]LIKE[검색할 문자열];
와일드카드
- % : 0개 이상의 문자
- _ : 1개
- __ : 2개
- _% : 1개 이상의 문자
NULL 데이터 다루기 (IS NULL)
NULL
- 데이터 값이 존재하지 않는다는 표현
- 0이나 공백이 아닌 알 수 없는 값을 의미
IS NULL
- 데이터가 NULL인지 아닌지를 확인하는 연산자
- [컬럼 이름]IS NULL 형식으로 사용
- 해당 컬럼이 NULL이 있는 로우만 선택
- NULL이 아닌 데이터를 검색하고 싶다면 IS NOT NULL을 사용
- [컬럼 이름]=NULL 또는 [컬럼 이름]!=NULL과 같은 표현은 사용안함
실습
DROP DATABASE IF EXISTS pokemon;
CREATE DATABASE pokemon;
USE pokemon;
CREATE TABLE mypokemon(
number int,
name varchar(20),
type varchar(20),
height float,
weight float,
attack float,
defense float,
speed float
);
INSERT INTO mypokemon(number, name, type, height, weight, attack, defense, speed)
VALUES (10,'caterpie', 'bug',0.3,2.9,.30,35,45),
(25,'picachu','electric',0.4,6,55,40,90),
(27,'raichu','electric',0.8,30,90,55,110),
(133,'eevee','normal',0.3,6.5,55,50,55),
(152,'chikoirita','grass',0.9,6.4,49,65,45);
- 이브이의 타입을 가져와 주세요
SELECT type
FROM mypokemon
WHERE name = 'eevee';
- 캐터의 공격력과 방어력을 가져와 주세요
SELECT attack, defense
FROM mypokemon
WHERE name = 'caterpie';
- 몸무게가 6KG보다 큰 포켓몬들의 모든 데이터를 가져와 주세요
SELECT *
FROM mypokemon
WHERE weight >6;
- 키가 0.5M보다 크고, 몸무게가 6KG보다 크거나 같은 포켓몬들의 이름을 가져와 주세요
SELECT name
FROM mypokemon
WHERE height > 0.5 AND weight >= 6;
- 포켓몬 테이블에서 공격력이 50 미만이거나, 방어력이 50 미만인 포켓몬들의 이름을 'weak_pokemon'이라는 별명으로 가져와 주세요
SELECT name AS 'weak_pokemon'
FROM mypokemon
WHERE attack < 50 OR defense < 50;
- 노말 타입이 아닌 포켓몬들의 데이터를 전부 가져와 주세요
SELECT *
FROM mypokemon
WHERE type != 'normal';
- 타입이 (normal, fire, water, grass)중에 하나인 포켓몬들의 이름과 타입을 가져와 주세요
SELECT name, type
FROM mypokemon
WHERE type IN ('normal', 'fire', 'water', 'grass');
- 공격력이 40과 60사이인 포켓몬들의 이름과 공격력을 가져와주세요
SELECT name, attack
FROM mypokemon
WHERE attack BETWEEN 40 AND 60;
- 이름에 'e'가 포함되는 포켓몬들의 이름을 가져와 주세요
SELECT name
FROM mypokemon
WHERE name LIKE '%e%';
- 이름에 'i'가 포함되고, 속도가 50이하인 포켓몬 데이터를 전부 가져와 주세요
SELECT *
FROM mypokemon
WHERE name LIKE '%i%' AND speed <= 50;
- 이름이 'chu'로 끝나는 포켓몬들의 이름, 키, 몸무게를 가져와 주세요
SELECT name, height, weight
FROM mypokemon
WHERE name LIKE '%chu'
- 이름이 'e'로 끝나고, 방어력이 50 미만인 포켓몬들의 이름, 방어력을 가져와 주세요
SELECT name, defense
FROM mypokemon
WHERE name LIKE '%e' AND defense < 50;
- 공격력과 방어력의 차이가 10이상인 포켓몬들의 이름, 공격력, 방어력을 가져와 주세요
SELECT name, attack, defense
FROM mypokemon
WHERE attack - defense >= 10 OR defense - attack >= 10
- 능력치의 합이 150이상인 포켓몬들의 이름과 능력치의 합을 가져와 주세요 이 때, 능력치의 합은 'total'이라는 별명으로 가져와 주세요.
조건1. 능력치의 합은 공격력, 방어력, 속도의 합을 의미
SELECT name, attack + defense + speed AS total
FROM mypokemon
WHERE attack + defense + speed >= 150;