SQL 문제 풀이 - (5) JOIN

zio도미닉·2021년 8월 15일
0

SQL 문제풀이

목록 보기
1/7

Programmers SQL

5. JOIN

JOIN

  • 없어진 기록 찾기
	SELECT ao.ANIMAL_ID, ao.NAME
	FROM ANIMAL_OUTS ao
	LEFT JOIN ANIMAL_INS ai ON ai.ANIMAL_ID=ao.ANIMAL_ID
	WHERE ai.ANIMAL_ID IS NULL;

추가 설명 : ai.ANIMAL_ID가 NULL 일 경우에만 출력 해야 함.

  • 있었는데요 없었습니다
	SELECT ai.ANIMAL_ID, ai.NAME
	FROM ANIMAL_INS ai
	LEFT JOIN ANIMAL_OUTS ao
	ON ai.ANIMAL_ID=ao.ANIMAL_ID
	WHERE ai.DATETIME>ao.DATETIME
	ORDER BY ai.DATETIME
  • 오랜 기간 보호한 동물(1)
	SELECT ai.NAME, ai.DATETIME
	FROM ANIMAL_INS ai
	LEFT JOIN ANIMAL_OUTS ao
	ON ai.ANIMAL_ID=ao.ANIMAL_ID
	WHERE ao.DATETIME IS NULL
	ORDER BY ai.DATETIME
	LIMIT 3
  • 보호소에서 중성화한 동물

-- 코드를 입력하세요
-- 보호소에 들어올 당시는 중성화 되지 않음 IN -> Intact
-- 보호소에 나갈 당시에는 중성화 됨 OUTS-> Spayed 또는 Neutered
SELECT ai.ANIMAL_ID,ai.ANIMAL_TYPE,ai.NAME
FROM ANIMAL_INS ai
LEFT JOIN ANIMAL_OUTS ao
ON ai.ANIMAL_ID=ao.ANIMAL_ID
WHERE ai.SEX_UPON_INTAKE LIKE 'Intact %'
# 3. IN은 와일드카드를 사용할 없기 때문에 SELECT 절을 이용해 찾기
# 방법 1. AND ao.SEX_UPON_OUTCOME NOT LIKE 'Intact %'
# 방법 2. IN 안에 서브쿼리를 넣어서 실행
# AND ao.SEX_UPON_OUTCOME IN (SELECT SEX_UPON_OUTCOME FROM ANIMAL_OUTS WHERE SEX_UPON_OUTCOME LIKE 'Spayed%' OR SEX_UPON_OUTCOME LIKE 'Neutered%')
# 방법 3. IN 안에 값을 다 넣어서 비교
# AND AO.SEX_UPON_OUTCOME IN ('Spayed Female','Spayed Male','Neutered Male','Neutered Female')
# 방법 4. OR을 사용하기 
AND (AO.SEX_UPON_OUTCOME LIKE 'Spayed%' OR AO.SEX_UPON_OUTCOME LIKE 'Neutered%')
ORDER BY ai.ANIMAL_ID
  • WHERE 절에 IN을 이용하면 -> Subquery를 검색해서 비교값을 찾을 수 있음.
  • 단점은 IN은 와일드 카드 %를 사용하지 못함
  • LIKE는 %사용 가능
  • 정리하면
    - 단건의 조건을 비교할때는 LIKE를 사용
    - 다건 조회시 칼럼 LIKE OR을 사용, 반드시 ( )를 사용해서 묶어주기!! '비교값1%' OR 칼럼 LIKE '비교값2%'를 사용
    - 다건 조회 시 IN의 값을 다 넣어주거나 IN 안에 서브 쿼리를 이용
profile
BackEnd Developer

0개의 댓글