프로그래머스의 JOIN에 관한 모든 문제를 모았습니다.
문제 1. 없어진 기록 찾기 - 천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.
SELECT OUTS.ANIMAL_ID,OUTS.NAME
FROM ANIMAL_OUTS OUTS
LEFT OUTER JOIN ANIMAL_INS INS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.ANIMAL_ID IS NULL
ORDER BY INS.ANIMAL_ID
LEFT OUTER JOIN을 사용하면 FROM에서 사용한 테이블 오른쪽으로 붙여 사용할 수 있다.
ON 을 통해 두 테이블을 붙일 때 기준이 되는 조건을 사용한다.
이 문제에서는 OUTS에만 있는 데이터를 찾으므로 IS NULL을 사용하여 답을 찾았다.
문제 2. 있었는데요 없었습니다. - 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.
SELECT INS.ANIMAL_ID, INS.NAME
FROM ANIMAL_INS INS
LEFT OUTER JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.DATETIME - OUTS.DATETIME > 0
ORDER BY INS.DATETIME
문제 1번과 동일한 방식으로 풀면 된다.
이때 WHERE조건에 DATETIME을 사용해서 시작일과 입양일을 비교하면 된다.
문제 3. 오랜 기간 보호한 동물(1) - 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.
SELECT INS.NAME, INS.DATETIME
FROM ANIMAL_INS INS
LEFT OUTER JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE OUTS.ANIMAL_ID IS NULL
ORDER BY INS.DATETIME
LIMIT 3
입양을 못간 동물이므로 OUTS.ANIMAL_ID 가 NULL 인 경우를 찾는다. 또한, 3마리이므로 LIMIT를 3을 작성해준다.
문제 4. 보호소에서 중성화한 동물 - 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화1되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.
SELECT OUTS.ANIMAL_ID,OUTS.ANIMAL_TYPE,OUTS.NAME
FROM ANIMAL_INS INS
LEFT OUTER JOIN ANIMAL_OUTS OUTS
ON INS.ANIMAL_ID = OUTS.ANIMAL_ID
WHERE INS.SEX_UPON_INTAKE NOT LIKE "%Spayed%" AND INS.SEX_UPON_INTAKE NOT LIKE "%Neutered%"
AND (OUTS.SEX_UPON_OUTCOME LIKE "%Spayed%" OR OUTS.SEX_UPON_OUTCOME LIKE "%Neutered%")
조건을 여러개 걸때, 괄호를 통해 원하는 것 먼저 처리가 가능하다.
LIKE를 반대로 사용하고 싶으면 NOT LIKE를 사용하면 된다.
이 외에도 ID가 같을때 중성화 여부가 다를 경우를 조건으로 작성해여도 된다.
WHERE INS.ANIMAL_ID = OUTS.ANIMAL_ID AND INS.SEX_UPON_INTAKE != OUTS.SEX_UPON_OUTCOME
참조 블로그
'SQL' 카테고리의 다른 글
[프로그래머스] SQL- String, Date 관련 모든 문제 (0) | 2021.10.22 |
---|---|
[프로그래머스] SQL- IS NULL 관련 모든 문제 (0) | 2021.10.20 |
[프로그래머스] SQL-GROUP BY 관련 모든 문제 (0) | 2021.10.19 |
[프로그래머스] SQL-SUM,MAX,MIN 관련 모든 문제 (0) | 2021.10.18 |
[프로그래머스] SQL-SELECT 관련 모든 문제 (0) | 2021.10.18 |