코딩테스트연습/[프로그래머스] Oracle

[프로그래머스] Oracle Lv.1 - 경기도에 위치한 식품창고 목록 출력하기

_꼬마돌 2023. 8. 23. 19:39
반응형

[프로그래머스] Oracle Lv.1 - 경기도에 위치한 식품창고 목록 출력하기

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/131114?language=oracle 

 

프로그래머스

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

programmers.co.kr

 

문제

다음은 식품창고의 정보를 담은 FOOD_WAREHOUSE 테이블입니다. FOOD_WAREHOUSE 테이블은 다음과 같으며  WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, TLNO, FREEZER_YN는 창고 ID, 창고 이름, 창고 주소, 전화번호, 냉동시설 여부를 의미합니다.

FOOD_WAREHOUSE 테이블에서 경기도에 위치한 창고의 ID, 이름, 주소, 냉동시설 여부를 조회하는 SQL문을 작성해주세요. 이때 냉동시설 여부가 NULL인 경우, 'N'으로 출력시켜 주시고 결과는 창고 ID를 기준으로 오름차순 정렬해주세요.

 

풀이

냉동시설의 여부가 NULL인 경우 N으로 출력하기 위해 NVL함수를 사용했다. 
NVL은 Null Value의 약자로, NULL 값을 다른 값으로 대체하는 함수다. 
NVL(expression, replacement_value)
위와 같은 형식으로 사용할 수 있다. 
expression : 평가하고자 하는 값이나 표현식
replacement-value : expression이 NULL인 경우 대체할 값이나 표현식.
문제에서는 FREEZER_YN 열(컬럼)의 값이 NULL일 때 N으로 출력해야 하므로
NVL(FREEZER_YN, 'N') 형식으로 사용했다.

경기도에 위치한 창고에 대한 정보들만 조회하기 위해 WHERE절에서 LIKE 연산자를 사용했다. 
LIKE 연산자는 문자열 패턴을 기반으로 데이터를 검색하거나 필터링하는 데 사용된다.
주로 SELECT문의 WHERE 절에서 사용되며, 지정한 패턴과 일치하는 값을 찾아내는 데 도움을 준다. 
column_name LIKE pattern
위와 같은 형식으로 사용할 수 있다. 
column_name : 검색하려는 열(컬럼)의 이름
pattern : 검색할 패턴을 나타내는 문자열. 이 패턴은 일반적으로 와일드카드 문자인 '%'와 '_'를 포함할 수 있다.
-- 와일드카드 문자를 사용하지 않은 LIKE 연산자
SELECT * FROM noodle
WHERE noodle LIKE '비빔면';
-- 와일드카드 문자를 사용하지 않으면 문자 그대로 '비빔면'인 행만 출력된다.

SELECT * FROM noodle
WHERE noodle = '비빔면';
-- '=' 연산자는 와일드카드 문자를 사용하지 않은 LIKE 연산자와 같은 결과를 도출한다.
-- 다만, 문자 그대로인 행을 출력하고자할 땐 직관적이고 명확한 매칭을 위해서 '=' 연산자를 사용하는 게 좋다.
% : 모든 문자열에 일치
_ : 하나의 문자에 일치

%는 주로 LIKE 연산자와 함께 사용되어 원하는 패턴에 일치하는 문자열을 검색하거나 필터링하는 데 사용되며, 0개 이상의 임의의 문자열을 나타내는 역할을 한다. 
아래는 %의 사용방법이다.
-- 이름이 '김'으로 시작하는 모든 레코드를 검색
SELECT * FROM customers
WHERE name LIKE '김%';
-- '김'뒤에 어떤 글자가 오든 상관없이 '김'으로 시작하는 행을 출력한다.

-- 이메일 주소가 'gmail.com'으로 끝나는 레코드를 검색
SELECT * FROM users
WHERE email LIKE '%gmail.com';
-- gmail.com 앞에 어떤 글자가 오든 상관없이 gmail.com으로 끝나는 행을 출력한다. 

-- 어떠한 위치에도 '삼성'이 포함된 모든 레코드를 검색
SELECT * FROM products
WHERE description LIKE '%삼성%';
-- '삼성' 앞뒤에 어떤 글자가 오든 상관없이 '삼성'이 포함된 행을 출력한다.

-- '최'로 시작하고 '우'으로 끝나는 레코드를 검색
SELECT * FROM employees
WHERE name LIKE '최%우';
-- '최'와 '우' 사이에 어떤 글자가 오든 상관없이 시작과 끝이 '최'와 '우'인 모든 행을 출력한다.

-- % 위치에 어떤 문자열이 와도 일치하게 되며, 이를 통해 다양한 패턴에 부합하는 문자열을 찾을 수 있다. 
-- %를 여러번 사용하여 더 복잡한 패턴을 생성하는 것도 가능하다.
_는 %와 함께 사용되며 주로 LIKE연산자와 함께 사용하여 원하는 문자열 패턴에 일치하는 문자열을 필터링하는 데 사용된다. 아래는 _의 사용방법이다. 
-- 두 번째 문자가 '면'인 이름을 검색
SELECT * FROM noodle
WHERE noodle LIKE '_면%';
-- '면' 뒤로 어떤 글자가 오든 상관 없이 맨 앞 한 글자 다음이 '면'인 행을 출력한다.
-- 예를 들면 소면잔치국수

-- 세 번째 문자가 '면'인 이름을 검색
SELECT * FROM noodle
WHERE noodle LIKE '__면%';
-- '면' 뒤로 어떤 글자가 오든 상관 없이 맨 앞 두 글자 다음이 '면'인 행을 출력한다.
-- 예를 들면 짜장면곱빼기

-- '면'의 앞에는 하나의 문자가, 뒤에는 두 개의 문자가 있는 경우
SELECT * FROM noodle
WHERE noodle LIKE '_면__';
-- '면' 앞에는 문자가 하나이고, 뒤에는 두 개의 문자가 있는 행을 출력한다.
-- 예를 들면 냉면중짜

-- _a_b__c% 와 같이 문자와 문자 사이에 넣어서 사용할 수도 있다.
-- 필요에 따라 두 개 이상을 넣어서 사용할 수도 있다.
문제의 예시를 보면 주소의 시작이 도단위부터 시작하기 때문에 경기도로 시작하는 데이터를 가진 행을 출력하기 위해 WHERE ADDRESS LIKE '경기도%' 의 형태로 사용했다. 

 

소스코드

SELECT WAREHOUSE_ID, WAREHOUSE_NAME, ADDRESS, NVL(FREEZER_YN, 'N') AS FREEZER_YN
FROM FOOD_WAREHOUSE
WHERE ADDRESS LIKE '경기도%'
ORDER BY WAREHOUSE_ID;
반응형