안녕하세요! 데코입니다!
오늘은 프로그래머스 코딩테스트 연습에 있는 "강원도에 위치한 생산공장 목록 출력하기" 문제를 포스팅하려고 합니다!
바로 포스팅 시작할게요! :)
(출처 : https://school.programmers.co.kr/learn/courses/30/lessons/131112)
1. 문제 : 강원도에 위치한 생산공장 목록 출력하기(Lv. 1)
2. 문제 설명
다음은 식품공장의 정보를 담은 FOOD_FACTORY 테이블입니다.
FOOD_FACTORY 테이블은 다음과 같으며
FACTORY_ID, FACTORY_NAME, ADDRESS, TLNO는 각각 공장 ID, 공장 이름, 주소, 전화번호를 의미합니다.
[ 테이블 구조 ]
Column name | Type | Nullable |
FACTORY_ID | VARCHAR(10) | FALSE |
FACTORY_NAME | VARCHAR(50) | FALSE |
ADDRESS | VARCHAR(100) | FALSE |
TLNO | VARCHAR(20) | TRUE |
FOOD_FACTORY 테이블에서
강원도에 위치한 식품공장의 공장 ID, 공장 이름, 주소를 조회하는 SQL문을 작성해주세요.
이때 결과는 공장 ID를 기준으로 오름차순 정렬해주세요.
[ 예시 ]
예를 들어 FOOD_FACTORY 테이블이 다음과 같을 때
FACTORY_ID | FACTORY_NAME | ADDRESS | TLNO |
FT19980003 | (주)맛있는라면 | 강원도 정선군 남면 칠현로 679 | 033-431-3122 |
FT19980004 | (주)맛있는기름 | 경기도 평택시 포승읍 포승공다눈환로 245 | 031-651-2410 |
FT20010001 | (주)맛있는소스 | 경상북도 구미시 1공단로7길 58-11 | 054-231-2121 |
FT20010002 | (주)맛있는통조림 | 전라남도 영암군 미암면 곤미현로 1336 | 061-341-5210 |
FT20100001 | (주)맛있는차 | 전라남도 장성군 서삼면 장산리 233-1번지 | 061-661-1420 |
FT20100002 | (주)맛있는김치 | 충청남도 아산시 탕정면 탕정면로 485 | 041-241-5421 |
FT20100003 | (주)맛있는음료 | 강원도 원주시 문막읍 문막공단길 154 | 033-232-7630 |
FT20100004 | (주)맛있는국 | 강원도 평창군 봉평면 진조길 227-35 | 033-323-6640 |
FT20110001 | (주)맛있는밥 | 경기도 화성시 팔탄면 가재리 34번지 | 031-661-1532 |
FT20110002 | (주)맛있는과자 | 광주광역시 북구 하서로 222 | 062-211-7759 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
[ 출력 결과 ]
FACTORY_ID | FACTORY_NAME | ADDRESS |
FT19980003 | (주)맛있는라면 | 강원도 정선군 남면 칠현로 679 |
FT20100003 | (주)맛있는음료 | 강원도 원주시 문막읍 문막공단길 154 |
3. 문제 풀이
# 1안
SELECT FACTORY_ID, FACTORY_NAME, ADDRESS
FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%'
ORDER BY FACTORY_ID ASC
이번 문제는 1안 한 가지로 작성했습니다!
# 1안 풀이 설명
## [ 문제 접근 설명 ]
이번 문제의 요구사항은 엄청 간단하네요!
FOOD_FACTORY 테이블에서 주소를 나타내는 'ADDRESS' 컬럼에 '강원도'가 포함되어 있는 공장을 조회하고 이후 'FACTORY_ID' 컬럼을 기준으로 오름차순 정렬을 통해 조회해주면 됩니다!
## [ 1안 쿼리 작성 설명 ]
FOOD_FACTORY의 테이블에 존재하는 컬럼들이 [출력 결과]에 나와 있는 컬럼들과 동일하게
" SELECT "를 통해 'FACTORY_ID', 'FACTORY_NAME', 'ADDRESS' 컬럼만을 선택
" WHRER (컬럼) LIKE (조건)"을 통해 'ADDRESS' 컬럼에서 '강원도'로 시작하는 데이터 추출
" ORDER BY (컬럼) ASC "을 통해 FACTORY_ID 컬럼을 기준으로 오름차순으로 나타나게 쿼리를 작성했습니다!
4. 데코의 문제 풀이 후기
이번 문제는 특정 단어가 포함된 데이터를 조회하는 문제예요!
1안에서 나온 LIKE 구문은 제 블로그에서 처음 다뤄보네요!
LIKE 구문은 이번 문제처럼 WHERE 절에 주로 사용해요!
% 및 _ 연산자와 함께 사용되어서 위치에 따라 특정 단어가 포함하는지 검색하는 데 사용됩니다.
% 및 _ 연산자 위치에 따라 어떻게 검색되는지 이번 문제와 연계해서 예시를 적어볼게요!
- WHERE ADDRESS LIKE '강원도%' : ADDRESS 컬럼에 '강원도~~' 와 같은 패턴이 있는 데이터 조회
ex) 강원도 정선군 남면 칠현로 679 - WHERE ADDRESS LIKE '%강원도' : ADDRESS 컬럼에 '~~강원도' 와 같은 패턴이 있는 데이터 조회
ex) 대한민국 강원도 - WHERE ADDRESS LIKE '%강원도%' : ADDRESS 컬럼에 '~~강원도~~'를 포함한 패턴이 있는 데이터 조회
ex) 강원도 정선군 남면 칠현로 679 / 대한민국 강원도 / 대한민국 강원도 정선군 - WHERE ADDRESS LIKE '강원도_원%' : ADDRESS 컬럼에 '강원도_원~~' 와 같은 패턴이 있는 데이터 조회
ex) 강원도 원주시 문막읍 문막공단길 154 ('_'은 공백뿐만 아니라 문자가 "하나" 존재하는 것을 의미) - WHERE ADDRESS LIKE '강원도___군%' : ADDRESS 컬럼에 '강원도___군~~' 와 같은 패턴이 있는 데이터 조회
ex) 강원도 평창군 봉평면 진조길 227-35 ('_'은 공백뿐만 아니라 문자가 "하나" 존재하는 것을 의미)
NOT LIKE를 이용하면 패턴이 있는 데이터를 제외하고 조회합니다!
- WHERE ADDRESS NOT LIKE '%강원도%' : ADDRESS 컬럼에 '~~강원도~~'를 포함한 패턴을 제외하고 데이터 조회
ex) 강원도 평창군 봉평면 진조길 227-35 (강원도 포함하지 않는 값만 조회)
LIKE 구문에 사용된 '%'과 '_' 연산자에 대해 이해가 되셨나요?
저는 22년 P사 프로젝트에서 LIKE 구문과 '%' 연산자를 많이 이용했었어요!
주로 데이터를 탐색하고 특징을 파악하고 이해하는 단계에서 이용해서 '_' 연산자는 거의 안 쓴 것 같아요!
python에서도 str.contains() 함수 많이 이용하는 것과 마찬가지로
정말 많이 이용되는 구문이니까 익혀두시면 SQL 쿼리 작성하실 때 활용하실 것이라고 생각돼요!
이번 문제는 특정 단어가 포함된 데이터를 조회하는 문제를 풀어봤습니다!
설명이 어려운 부분 혹은 잘 이해가 안 가는 부분은 그리고 더 궁금한 내용이 있다면
언제든지 댓글로 남겨주세요!
빠르게 궁금증을 해결해 드릴게요!
공감과 댓글은 큰 힘이 됩니다!
읽어주셔서 감사해요!
또 다른 SQL 문제로 찾아뵐게요! :)
'Skill Sets > SQL' 카테고리의 다른 글
[SQL] 중복 제거하기(프로그래머스/MySQL/Level 2) (16) | 2023.01.04 |
---|---|
[SQL] 고양이와 개는 몇 마리 있을까(프로그래머스/MySQL/Level 1) (16) | 2023.01.02 |
[SQL] 최댓값 구하기(프로그래머스/MySQL/Level 1) (12) | 2022.12.31 |
[SQL] 상위 n개 레코드(프로그래머스/MySQL) (8) | 2022.12.28 |
[SQL] 여러 기준으로 정렬하기(프로그래머스/MySQL) (13) | 2022.12.27 |