1. 문제의 출처 - 프로그래머스
오늘은 프로그래머스 SQL 고득점키트 중 "join"에 대해서 풀어볼 것이다.
Join문제에는 4개가 있는데 그중에서 "보호소에서 중성화한 동물" 문제에 대한 해설을 해보고자 한다.
여기서 문제의 핵심은 Join을 활용하여 상태값이 어떻게 다른지 비교할 수 있는 것이 핵심이다.
코딩테스트 연습 - 보호소에서 중성화한 동물
ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디
programmers.co.kr
2. 문제의 설명 및 핵심 요약
문제의 요구사항은 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 "ID", "Type", 그리고 "Name"을 제시하는 것이다.
이때 성별 Data의 제시사항을 잘 파악하는 것이 매우 중요한 문제이다.
- 중성화를 거치지 않은 동물 - "inact" 키워드 포함
- 중성화를 거친 동물 - Spayed 또는 Neutered 키워드 포함
Table은 2개이며, 그 둘의 관계 및 문제의 숨은 조건을 정리해봤다.

그림에서 보는 바와 같이, Join 문제에서는 항상 중요한 사항이 3가지 있다.
- 첫 번째. 어떤 Column을 기준으로 Join을 할 것인가
- 두 번째. Join 중에서도 어떤 방식을 채택할 것인가 - 여기서는 Inner Join
- 세 번째. 결과를 솎아 내기 위한 기준은 무엇인가 - Where문의 활용
3. 정답 코드 및 해설
1
2
3
4
5
6
7
8
9
|
## 기초 문제 풀이
SELECT ao.animal_id
, ao.animal_type
, ao.name
FROM animal_outs AS ao
INNER JOiN animal_ins AS ai on ai.animal_id = ao.animal_id
WHERE 1 = 1
and ai.sex_upon_intake LIKE 'Intact%'
and ao.sex_upon_outcome NOT LIKE 'Intact%'
|
cs |
(1) Inner Join의 개념 및 해설
- Inner Join은 수학으로 치면 교집합의 개념이다.
- 여기서는 두 테이블 모두 존재해야 하기 때문에 Inner Join의 L7ogic이 가장 적절하다
- Inner Join의 작성 문법
- Inner Join [원하는 테이블 이름] AS [테이블 별칭] ON [원하는 조건]
- 참고로 as는 생략이 가능하다.
- 두 테이블의 Join Key 값은 그림에 나와있듯, [animal_id]가 되야 한다.
- Inner Join [원하는 테이블 이름] AS [테이블 별칭] ON [원하는 조건]
위의 논리만 차근차근 따라가다보면 Join문을 이해하는데는 큰 어려움이 없을 것이다.
(2) 조건문의 활용 - LIKE를 통한 상태값 조회
- LIKE의 기본 개념 및 활용 방법
- LIKE는 String 중에서 특정 문자를 포함하는가 아닌가를 판단하는 조건
- "%"는 순서에 따라 굉장히 유용한 방법
- "% 원하는 문자": 원하는 문자로 끝나는 String 검색
예시) "%찌개" → 김치찌개, 된장찌개 - "원하는 문자 %" : 원하는 문자로 시작하는 String 검색
예시) "김치%" → 김치라면, 김치덮밥, 김치주세요 - "% 원하는 문자 %": 원하는 문자를 포함하는 String 검색
예시) "%와우%" → 와우할사람, 나는 호드때문에 와우 한다, 하하호호 와우 호호
- "% 원하는 문자": 원하는 문자로 끝나는 String 검색
- 정답의 해설
- ai.sex_upon_intake LIKE 'Intact%'
: 들어올 때는 중성화가 안 되어있어야 하기 때문에 - ao.sex_upon_outcome NOT LIKE 'Intact%'
: 나갈 때는 중성화가 되어있어야 했기 때문에
- ai.sex_upon_intake LIKE 'Intact%'
물론 뒤에 LIKE 문을 다르게 처리할 수도 있지만, 가장 논리적이고 정확한 방법을 사용하려고 했다.
'SQL - Mysql & Oracle > SQL 실전 코딩 테스트' 카테고리의 다른 글
SQL 코딩 테스트 오답노트 작성 요령(합격률 올리는 꿀팁!) (0) | 2023.09.23 |
---|---|
데이터 분석가의 코딩테스트 대비 A to Z(feat. 예제, 사이트, 계획) (0) | 2023.09.02 |
[Oracle] 리트코드 176번 Second Highest Salary SQL코드 해설 (0) | 2022.09.07 |
[Orcale] 리트코드(Leet Code) - Rank Scores 정답 해설(feat. Rank 함수) (0) | 2022.09.02 |
[Oracle] 입양 시각 구하기(1) - Group by 사용법 마스터하기 (0) | 2022.08.31 |