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

오상윤·2023년 1월 26일
0

SQL

목록 보기
3/10

조건에 맞는 데이터 가져오기 (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);
  1. 이브이의 타입을 가져와 주세요
SELECT type
FROM mypokemon
WHERE name = 'eevee';
  1. 캐터의 공격력과 방어력을 가져와 주세요
SELECT attack, defense
FROM mypokemon
WHERE name = 'caterpie';
  1. 몸무게가 6KG보다 큰 포켓몬들의 모든 데이터를 가져와 주세요
SELECT *
FROM mypokemon
WHERE weight >6;
  1. 키가 0.5M보다 크고, 몸무게가 6KG보다 크거나 같은 포켓몬들의 이름을 가져와 주세요
SELECT name
FROM mypokemon
WHERE height > 0.5 AND weight >= 6;
  1. 포켓몬 테이블에서 공격력이 50 미만이거나, 방어력이 50 미만인 포켓몬들의 이름을 'weak_pokemon'이라는 별명으로 가져와 주세요
SELECT name AS 'weak_pokemon'
FROM mypokemon
WHERE attack < 50 OR defense < 50;
  1. 노말 타입이 아닌 포켓몬들의 데이터를 전부 가져와 주세요
SELECT *
FROM mypokemon
WHERE type != 'normal';
  1. 타입이 (normal, fire, water, grass)중에 하나인 포켓몬들의 이름과 타입을 가져와 주세요
SELECT name, type
FROM mypokemon
WHERE type IN ('normal', 'fire', 'water', 'grass');
  1. 공격력이 40과 60사이인 포켓몬들의 이름과 공격력을 가져와주세요
SELECT name, attack
FROM mypokemon
WHERE attack BETWEEN 40 AND 60;
  1. 이름에 'e'가 포함되는 포켓몬들의 이름을 가져와 주세요
SELECT name
FROM mypokemon
WHERE name LIKE '%e%';
  1. 이름에 'i'가 포함되고, 속도가 50이하인 포켓몬 데이터를 전부 가져와 주세요
SELECT *
FROM mypokemon
WHERE name LIKE '%i%' AND speed <= 50;
  1. 이름이 'chu'로 끝나는 포켓몬들의 이름, 키, 몸무게를 가져와 주세요
SELECT name, height, weight
FROM mypokemon
WHERE name LIKE '%chu'
  1. 이름이 'e'로 끝나고, 방어력이 50 미만인 포켓몬들의 이름, 방어력을 가져와 주세요
SELECT name, defense
FROM mypokemon
WHERE name LIKE '%e' AND defense < 50;
  1. 공격력과 방어력의 차이가 10이상인 포켓몬들의 이름, 공격력, 방어력을 가져와 주세요
SELECT name, attack, defense
FROM mypokemon
WHERE attack - defense >= 10 OR defense - attack >= 10
  1. 능력치의 합이 150이상인 포켓몬들의 이름과 능력치의 합을 가져와 주세요 이 때, 능력치의 합은 'total'이라는 별명으로 가져와 주세요.
    조건1. 능력치의 합은 공격력, 방어력, 속도의 합을 의미
SELECT name, attack + defense + speed AS total
FROM mypokemon
WHERE attack + defense + speed >= 150;
profile
가보자가보자~

0개의 댓글