https://school.programmers.co.kr/learn/courses/30/lessons/59046

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드설명

IN 을 활용합니다.

 

IN을 활용해서 검색하려는 부분들을 손쉽게 묶어서 검색할 수 있습니다.

IN 연산자를 사용하는 주된 이유는 쿼리의 가독성과 효율성을 향상시키기 위함입니다. 특히, 여러 개의 조건을 검사할 때 유용하게 사용됩니다. 

 

만약 OR 조건을 사용한다면 어떻게 될까요?

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME = 'LUCY' OR NAME = 'ELLA' OR NAME = 'PICKLE'

위와 같이 하나로 묶이지 않아 조건문에서 실수가 일어날 수 있습니다.

코드

-- 코드를 입력하세요
SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS
WHERE NAME IN ('LUCY', 'ELLA', 'PICKLE', 'ROGAN', 'SABRINA', 'MITTY')
ORDER BY ANIMAL_ID ASC;

 

SELECT ANIMAL_ID, NAME, SEX_UPON_INTAKE
FROM ANIMAL_INS AS AI
WHERE AI.NAME IN ('LUCY', 'ELLA', 'PICKLE', 'ROGAN', 'SABRINA', 'MITTY')
ORDER BY ANIMAL_ID ASC

 

ORACLE

정답코드입니다.

SELECT AI.ANIMAL_ID, AI.NAME, AI.SEX_UPON_INTAKE
FROM ANIMAL_INS AI
WHERE REGEXP_LIKE(AI.NAME, '^(LUCY|ELLA|PICKLE|ROGAN|SABRINA|MITTY)$', 'i')
ORDER BY AI.ANIMAL_ID ASC

 

처음에는, 아래와 같이 REGEXP_LIKE를 사용했었습니다.

하지만, 아래와 같이 사용할경우 만약 ELLA가 ELLASTONE 이라는 이름이 존재한다면 검색이 됩니다.

물론, IN을 사용할경우에는 특정 단어로만 이루어진 단어를 찾으므로 IN이나 LIKE 와일드 패턴을 사용해도 됩니다만 이번 경우에는 REGEXP_LIKE를 활용하였습니다.

정규표현식으로 앞에 ^를 붙임으로써 반드시 맨 앞에 위치하게하고, $ 를 붙임으로써 문자열의 끝이 나타나야 한다고 처리합니다.

SELECT AI.ANIMAL_ID, AI.NAME, AI.SEX_UPON_INTAKE
FROM ANIMAL_INS AI
WHERE REGEXP_LIKE(AI.NAME, '(LUCY|ELLA|PICKLE|ROGAN|SABRINA|MITTY)', 'i')
ORDER BY AI.ANIMAL_ID ASC

 

+ Recent posts