본문 바로가기
Database/MySQL

WHERE로 데이터 필터링하기

by 컴돈AI 2024. 2. 27.

목차

    원하는 행만 출력하기(필터링, WHERE)

    • 행에 필터링 주고 싶을 때는 WHERE 문법을 사용합니다.
    • 테이블 모든 데이터 출력
    • 원하는 행만 필터링
      • SELECT * FROM 테이블명 WHERE 조건식

        • 조건식 예시 : 컬럼명 = "값"
      • 예시
        • product 테이블에서 카테고리가 가구인 행만 출력
          • SELECT * FROM product WHERE 카테고리="가구"
        • product 테이블에서 가격이 5000인 행만 출력
          • SELECT * FROM product WHERE 가격=5000
        • 참고 
          • 문자 타입 자료 표현할 땐 " " 나 ' ' 로 묶어주기 (문자 타입 데이터만 " ", ' ' 로 표시!)
          • 숫자 타입 자료 표현은 그냥 숫자만 표시
          • 테이블명이나 데이터베이스명도 그냥 이름만 표시
    • 조건식 여러 개 사용하여 필터링하기 (AND / OR 써서 조건식 붙이기)
      • SELECT * FROM 테이블명 WHERE 조건식1 AND 조건식2 AND (조건식3 OR 조건식4) AND 조건식5 .....
        • 어떤 것을 먼저 연산할지는 ( ) 를 통해 지정해 줄 수 있습니다.
        • , (쉼표)를 사용하지 않고 AND/OR을 사용합니다.
      • 예시
        • 가격이 5000이면서 카테고리가 "가구"인 행 출력하기
          • SELECT * FROM product WHERE 가격=5000 AND 카테고리="가구"
        • 가격이 5000이거나 카테고리가 "가구"인 행 출력하기
          • SELECT * FROM product WHERE 가격=5000 OR 카테고리="가구"

    WHERE 조건식

    = , !=, >, <, >=, <=  (비교연산자)

    • = , !=, >, <, >=, <=  (비교연산자)
      • 참고 : 문자에도 부등호 사용 가능합니다. ('가' < '나'  ,  '나' < '다' , 'a' < 'b' )
        • 상품명이 ㅅ보다 큰 값 출력해보기
          • SELECT * FROM product WHERE 상품명>"ㅅ"

    BETWEEN AND

    • BETWEEN ~ AND ~ 연산자
      • BETWEEN ~ AND ~ 는 양쪽 두 값을 포함합니다. (즉, 이상 이하)
      • 가격이 5000부터 8000원 사이인 행 출력하기 
        • SELECT * FROM product WHERE 가격 BETWEEN 5000 AND 8000

    NOT

    • NOT 
      • 조건식 앞에 붙일 수 있는 NOT 연산자
      • 해당 조건식을 제외해 주는 것
      • 가격이 5000원이 아닌 행 출력하기
        • SELECT * FROM product WHERE NOT 가격=5000;
        • WHERE 가격!=5000 으로 해줘도 상관없습니다.

    IN

    • IN
      • IN 을 사용하지 않을 경우 (OR 로 일일히 처리) 
        • 카테고리가 신발, 가전, 식품인 데이터 출력하기 (OR로 처리)
          • SELECT * FROM product WHERE 카테고리="신발" OR 카테고리="가전" OR 카테고리="식품"
      • IN으로 표현하기
        • SELECT * FROM 테이블명 WHERE 컬럼명 IN (값, 값, 값)
        • 카테고리가 신발, 가전, 식품인 데이터 출력하기
          • SELECT * FROM product WHERE 카테고리 IN ("신발","가전","식품")
      • 여러 개의 IN을 AND로 묶어주기
        • 카테고리가 신발, 가전, 식품 중에 있고, 가격이 3000,4000,8000 중에 있는 데이터 출력하기
          • SELECT * FROM product WHERE 카테고리 IN ("신발","가전","식품") AND 가격 IN (3000,4000,5000)

    LIKE

    •  LIKE
      • %
        • SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '%특정단어%'
          • 아무문자 + 특정단어 + 아무문자 를 찾아주는 것
          • (LIKE + '% %' 기억하기)
          • %는 아무 문자(와일드카드)라는 뜻임
            • 0자~무한
        • %가 좋다고 막 쓰면 성능저하가 발생할 수 있습니다. %를 앞에 붙이면 검색할 때 index활용을 하지 못하게 됩니다. 
        • LIKE, %는 VARCHAR()컬럼에 주로 사용합니다.
          • CHAR() 컬럼에 사용할 때는 주의가 필요합니다. CHAR()의 경우 무조건 공백으로 나머지 자리를 채우게 됩니다. 따라서 아래와 같이 가죽소파라고 저장된 데이터가 있다고 하면은 가죽소파_ _ 로 저장되기 때문에 단순히 "%소파"로 검색하면 검색결과가 나오지 않게 됩니다.
            • 공백도 문자이기 때문
      • _ (밑줄)
        • SELECT * FROM 테이블명 WHERE 컬럼명 LIKE '_특정단어_'
          • 아무문자(1글자) + 특정단어 + 아무문자(1글자) 를 찾아주는 것
          • (LIKE + "_ _ " 기억하기)
          • _는 아무 문자(와일드카드)라는 뜻임
            • %는 0자부터 무한을 의미하지만 _ 는 단순히 1글자의 아무 문자를 의미합니다.
    • 예시
      • 소파로 끝나는 단어 찾기
        • SELECT * FROM product WHERE 상품명 LIKE "%소파"
      • 레드로 시작하는 단어 찾기
        • SELECT * FROM product WHERE 상품명 LIKE "레드%"
      • 소파앞 한글자 있는 단어 찾기 _소파("_"가 1개)
        • SELECT * FROM product WHERE 상품명 LIKE "_소파"
      • 소파앞 두글자 있는 단어 찾기 __소파("_"가 2개)
        • SELECT * FROM product WHERE 상품명 LIKE "__소파"
      • 복잡한 검색도 가능
        • SELECT * FROM product WHERE 상품명 LIKE "%퍼%니%"

    IS NULL / IS NOT NULL

    • IS NULL / IS NOT NULL
      • NULL을 비교할 때는 = 를 이용하면 안됩니다.
      • IS NULL 이나 IS NOT NULL을 이용해야 합니다.
      • 고객 테이블에서 나이가 이미 입력된 고객의 고객이름을 검색해보기
        • SELECT 고객이름 FROM 고객 WHERE 나이 IS NOT NULL

    예제

    • 재고가 20이하인 상품들을 상품명 가나다 순으로 출력하기
      • SELECT * FROM product WHERE 재고<=20 ORDER BY 상품명 asc
      • (ORDER BY는 가장 마지막에 사용. 필터링하고 정렬하는 것이 올바른 순서)
    • 가격이 3000원 미만이거나 6000원 초과인 상품들 출력하기
      • SELECT * FROM product WHERE 가격<3000 OR 가격>6000
    • 카테고리가 옷이 아닌 것들 중 가격이 5천원인 상품들만 출력하기
      • SELECT * FROM product WHERE NOT 카테고리="옷" AND 가격=5000
      • SELECT * FROM product WHERE 카테고리!="옷" AND 가격=5000
    • 상품명이 셔츠, 반팔티, 운동화가 아닌 상품들만 출력하기
      • SELECT * FROM product WHERE NOT 상품명 IN ("셔츠","반팔티","운동화")
    • "Green"으로 시작해서 "chair"로 끝나는 상품명 검색하기
      • SELECT * FROM product WHERE 상품명 LIKE "Green%chair"
    • 상품명에 '소파'가 들어있거나 'chair'가 들어있는 모든 상품 검색하기
      • SELECT * FROM product WHERE 상품명 LIKE "%소파%" OR 상품명 LIKE "%chair%"
    • 상품명에 '소파'가 들어있는데 '나무'는 들어있지 않은 모든 상품을 검색해보기
      • SELECT * FROM product WHERE 상품명 LIKE "%소파%" AND NOT 상품명 LIKE "%나무%"

    출처