[SQL] JOIN

jieun_han·2022년 4월 29일
0

sql

목록 보기
6/6
post-thumbnail
  • 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID이름ID 순으로 조회하는 SQL문
SELECT O.ANIMAL_ID, O.NAME
FROM ANIMAL_OUTS O LEFT OUTER JOIN ANIMAL_INS I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE I.ANIMAL_ID IS NULL;

OUTER JOIN
: JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용
-> USING(두 테이블 간 필드 이름이 동일) 또는 ON(두 테이블 간 필드 이름이 다름) 조건절 필수

LEFT (OUTER) JOIN

  • left table에만 있는 행은 right table의 컬럼에 NULL 값을 채움

RIGHT (OUTER) JOIN

  • right table에만 있는 행은 left table의 컬럼에 NULL 값을 채움

FULL (OUTER) JOIN

  • UNION과 비슷
  • 중복되는 데이터 삭제

  • 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문 (결과는 보호 시작일이 빠른 순으로 조회)
SELECT I.ANIMAL_ID, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE I.DATETIME > O.DATETIME
ORDER BY I.DATETIME;

(INNER) JOIN
: 양쪽 테이블이 모두 가지고 있는 데이터만을 검색할 때 사용 (≒ 교집합)


  • 아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리이름보호 시작일을 조회하는 SQL문 (결과는 보호 시작일 순으로 조회)
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I LEFT OUTER JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME
LIMIT 3;

  • 보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL문
SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAME
FROM ANIMAL_INS I JOIN ANIMAL_OUTS 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;
profile
Grow up everyday

0개의 댓글