[SQL] IN 연산자와 LIKE

두리두두·2023년 6월 14일
0

TIL

목록 보기
5/10

🐹 문제

https://school.programmers.co.kr/learn/courses/30/lessons/151137
프로그래머스 - 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기


🐰 풀이

1. 처음 시도 : IN 구문

SELECT CAR_TYPE, COUNT(CAR_TYPE) AS CARS
FROM CAR_RENTAL_COMPANY_CAR 
WHERE OPTIONS IN ('통풍시트', '열선시트', '가죽시트') 
GROUP BY CAR_TYPE 
ORDER BY CAR_TYPE DESC;
  • 통풍시트, 열선시트, 가죽시트가 하나씩 존재할 수도 있지만, 다른 옵션과도 함께 존재할 수 있기 때문에 IN을 쓰지 못한다.
  • 프로그래머스 질문하기에 같은 질문 올리신 분이 있었다. 나만 헷갈린게 아녔나보다 ㅋ 다행

2. 답 : LIKE

SELECT CAR_TYPE, COUNT(CAR_ID) AS CARS FROM CAR_RENTAL_COMPANY_CAR
WHERE OPTIONS LIKE '%열선시트%' 
    OR OPTIONS LIKE '%통풍시트%' 
    OR OPTIONS LIKE '%가죽시트%' 
GROUP BY CAR_TYPE
ORDER BY CAR_TYPE;
  • OPTIONS 테이블에 ['열선시트', '가죽시트',,,] 요따구로 들어가있으므로 따옴표까지 문자열 처리해서 LIKE %어쩌구%를 써야한다.

🙈 메모

IN 연산자

  • IN 연산자는 WHERE 절에서 특정값 여러개를 선택하고 싶을 때 사용
    ex) 옷 색상이 RED, BLUE, GREEN 있을 때 빨간 옷과 파란 옷만 골라내고 싶을 때

    SELECT * FROM CLOTHES
     WHERE COLOR IN ('RED', 'BLUE');
  • COLOR라는 컬럼에 값 하나씩!! IN ()에 해당하는 값을 가진 여러개의 컬럼을 뽑고자 사용

  • OR을 줄여서 쓰게 해줌. IN을 안썼다면 위 쿼리는

    SELECT * FROM CLOTHES
     WHERE COLOR LIKE "RED" OR COLOR LIKE "BLUE";
  • 그러나 지금 문제는 OPTIONS이라는 컬럼에 값이 배열로 여러개 들어가있기 때문에 IN을 사용하지 못한다. 만약에 OPTIONS에 "가죽시트" 등이 하나씩만 들어가있었다면 사용 가능.

  • HAVING절을 사용해야하나 헷갈렸는데 HAVING은 WHERE에서 사용하지 못했던 집계함수를 쓰는 곳!! IN이나 LIKE 등은 WHERE에서 처리하자

profile
야금야금

0개의 댓글