dev_beomgeun
꾸준하게 차근차근
dev_beomgeun
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • 전공 (0)
      • 운영체제 (0)
      • 알고리즘 (0)
      • 자료구조 (0)
      • 데이터베이스 (0)
      • 네트워크 (0)
    • 개발 공부 (32)
      • 웹 (6)
      • 리눅스 (4)
      • 머신러닝 (1)
      • 스프링 (17)
      • Git (2)
      • AWS (2)
    • 개발 도서, 강의 (3)
      • 스프링 입문을 위한 자바 객체지향의 원리와 이해 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식(김영한.. (2)
      • 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (1)
    • 문제 풀이 (118)
      • 백준 알고리즘 (72)
      • 프로그래머스 알고리즘, SQL (38)
      • Hackerrank SQL (8)
    • 프로젝트 기록 (4)
      • 캡스톤 종합설계 (4)
      • 반려하루 프로젝트 (0)
    • 활동 기록 (12)
      • 네이버 부스트캠프 (7)
      • 취준 & 코테 (4)
      • 소프트웨어 마에스트로 13기 (1)
    • 이것저것 (1)

블로그 메뉴

  • 홈
  • 깃허브
  • 링크드인
  • 방명록

공지사항

인기 글

태그

  • 서블릿
  • 백준 DP
  • 일기
  • Hackerrank
  • 스프링
  • HackerRank mysql
  • 백준
  • 부스트캠프
  • 기록
  • 회고
  • Baekjoon
  • 네이버 부스트캠프
  • 반성
  • c++
  • 그래프탐색
  • AI Tech
  • dp
  • BFS
  • 프로그래머스
  • 프로그래머스 SQL

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dev_beomgeun

꾸준하게 차근차근

[프로그래머스 SQL] 있었는데요, 없었습니다 (join)
문제 풀이/프로그래머스 알고리즘, SQL

[프로그래머스 SQL] 있었는데요, 없었습니다 (join)

2021. 2. 23. 12:14
728x90

programmers.co.kr/learn/courses/30/lessons/59043

 

코딩테스트 연습 - 있었는데요 없었습니다

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디

programmers.co.kr

두 개의 테이블(ANIMAL_INS, ANIMAL_OUTS)이 주어지고 들어온 날짜보다 나간 날짜가 더 빠른 데이터의 ID와 NAME을 출력한다.

 

테이블 JOIN을 이용해야 하는데

테이블 A, B가 있다고 하면 테이블 A LEFT JOIN ON 공통 키이다.

= 테이블 A의 모든 데이터 + 테이블 B에서 A와 공통키로 일치하는 데이터가 뒤에 붙는다.

 

각각 테이블이 이렇게 구성되어 있고,

ANIMAL_INS LEFT JOIN ANIMAL_OUTS ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID를 해주면

이런 식으로 ANIMAL_INS의 테이블 모두 + 테이블을 더해주는 키에 해당하는 ANIMAL_OUTS의 정보가 붙게 된다.

따라서 COLUMN 내용도 조정해주지 않으면 두 테이블의 COLUMN이 모두 출력되므로 SELECT문에서 선택해준다.

또한, 저렇게 테이블 A에 해당하는 정보가 B에 없는 경우 A의 정보만 나오고 B 자리에는 NULL값이 들어가게 되는데

WHERE B.ANIMAL_ID IS NULL로 처리해주면 A에는 있고 B에는 없는 데이터 출력

WHERE B.ANIMAL_ID IS NOT NULL로 처리해주면 A와 B 모두 있는 데이터 출력이 된다.

 

기본 틀은

SELECT A.ID, A.NAME

FROM A

LEFT JOIN ON A.ID = B.ID

WHERE ~

ORDER BY ~이다.

 

따라서 이 문제에서는 DATE가 더 빠른 정보를 출력하는 것이 목표이므로

SELECT ANIMAL_INS.ANIMAL_ID, ANIMAL_INS.NAME
FROM ANIMAL_INS
LEFT JOIN ANIMAL_OUTS
ON ANIMAL_INS.ANIMAL_ID = ANIMAL_OUTS.ANIMAL_ID
WHERE ANIMAL_INS.DATETIME > ANIMAL_OUTS.DATETIME
ORDER BY ANIMAL_INS.DATETIME

테이블을 더해주고 WHERE 조건에 >를 통해서 출력해주었다.

728x90
저작자표시 비영리 변경금지 (새창열림)

'문제 풀이 > 프로그래머스 알고리즘, SQL' 카테고리의 다른 글

[프로그래머스 SQL] 보호소에서 중성화한 동물(join)  (0) 2021.02.23
[프로그래머스 SQL] 오랜 기간 보호한 동물(1) (join)  (0) 2021.02.23
[프로그래머스 SQL] NULL 처리하기  (0) 2021.02.23
[프로그래머스] SQL 문제 정리  (0) 2021.01.20
[프로그래머스] 3진법 뒤집기 (n진법, bitset) [C++]  (0) 2021.01.03
    '문제 풀이/프로그래머스 알고리즘, SQL' 카테고리의 다른 글
    • [프로그래머스 SQL] 보호소에서 중성화한 동물(join)
    • [프로그래머스 SQL] 오랜 기간 보호한 동물(1) (join)
    • [프로그래머스 SQL] NULL 처리하기
    • [프로그래머스] SQL 문제 정리
    dev_beomgeun
    dev_beomgeun
    백엔드 개발을 하며 얻은 지식과 경험을 공유합니다. 현재 카카오페이에서 백엔드 엔지니어로 일하고 있습니다.

    티스토리툴바