반응형
https://programmers.co.kr/learn/courses/30/lessons/59045#fn1
[ 문제풀이 ]
두 테이블이 주어졌을 때 JOIN을 활용하여 원하는 데이터를 추출할 수 있는지 묻는 문제이다.
굉장히 많은 방법이 존재하지만 나는 정답이 가능한 테이블을 서브 쿼리를 통해 미리 추출한 후 JOIN을 하였다.
내 계산 방법이 정확한 건지는 모르겠지만 만약 두 테이블의 튜플이 각각 1만 개라고 할 경우 두 테이블을 JOIN 한 후 WHERE 절을 통해 조건을 비교하는 것보다 테이블을 정답 가능성 높은 것들로만 추출하여 튜플 수를 줄인 후 JOIN을 하는 것이 더 효율성이 높다고 생각하였다.
ANIMAL_INS, ANIMAL_OUTS 두 테이블 각각 튜플 1만개라고 가정
-- JOIN 후 WHERE 절을 통해 비교 --
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS AS I
JOIN ANIMAL_OUTS AS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.SEX_UPON_INTAKE LIKE 'Intact%' AND O.SEX_UPON_OUTCOME NOT LIKE 'Intact%'
ORDER BY I.ANIMAL_ID ASC;
이 방법은 결국 JOIN 과정에서 1만 X 1만개의 튜플을 비교해야하기 때문에 효율이 별로
-- SubQuery로 두 테이블을 축소한 후 JOIN --
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM (SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
FROM ANIMAL_INS
WHERE SEX_UPON_INTAKE LIKE 'Intact%') AS I
JOIN (SELECT ANIMAL_ID, ANIMAL_TYPE, NAME
FROM ANIMAL_OUTS
WHERE SEX_UPON_OUTCOME NOT LIKE 'Intact%') AS O
ON I.ANIMAL_ID = O.ANIMAL_ID
ORDER BY I.ANIMAL_ID ASC;
이 방법은 JOIN 과정에서 각 테이블의 비교할 튜플의 수가 1만보다 작기 때문에 효율적임
반응형
'Problem Solving > 프로그래머스 SQL' 카테고리의 다른 글
[프로그래머스 SQL] 이름에 el이 들어가는 동물 찾기 (0) | 2021.08.11 |
---|---|
[프로그래머스 SQL] 루시와 엘라 찾기 (0) | 2021.08.11 |
[프로그래머스 SQL] 오랜 기간 보호한 동물(1) (0) | 2021.08.10 |
[프로그래머스 SQL] 있었는데요 없었습니다 (0) | 2021.08.10 |
[프로그래머스 SQL] 없어진 기록 찾기 (0) | 2021.08.10 |
댓글