프로그래머스 SQL 고득점 KIT [JOIN]

프로그래머스 SQL JOIN을 풀어봅니다.

4문제를 한 포스팅에 담아봅니다.


없어진 기록 찾기

  • 입양을 간 기록은 있는데, 보호소에 없는 동물의 기록을 찾습니다.
    • IDNAME에 관심있으므로 SELECT 해줍니다
    • 입양을 간 기록중에서, 보호소 기록에는 없는 정보를 찾아야 합니다.
      • OUT에는 있으나 IN에는 없는 정보를 조회 해야합니다.
      • OUT 을 기준으로 LEFT JOIN 시킵니다.
    • OUT에는 있지만 IN 에는 없다는 것은 ID 부분이 NULL 이 될것입니다.
    • ID 순으로 정렬시켜줍니다.
1
2
3
4
5
SELECT A.ANIMAL_ID, A.NAME
    FROM ANIMAL_OUTS A LEFT JOIN ANIMAL_INS B
        ON A.ANIMAL_ID = B.ANIMAL_ID
    WHERE B.ANIMAL_ID IS NULL
    ORDER BY A.ANIMAL_ID;

있었는 데요 없었습니다

  • 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회합니다.
    • IDNAME에 관심있으므로 SELECT 해줍니다.
    • 입양이 된 동물 기준입니다.
      • 양쪽에 전부 존재해야 합니다.
      • IN을 기준으로 INNER JOIN 시킵니다.
    • 보호일보다 입양일이 더 빠르다는것은, 입양일의 DATETIME 이 더 작다는 것입니다.
    • 보호일 순으로 정렬 시켜 줍니다.
1
2
3
4
5
SELECT A.ANIMAL_ID, A.NAME 
    FROM ANIMAL_INS A INNER JOIN ANIMAL_OUTS B 
        ON A.ANIMAL_ID = B.ANIMAL_ID
    WHERE A.DATETIME > B.DATETIME
    ORDER BY A.DATETIME;

오랜 기간 보호한 동물(1)

  • 입얍을 못간 동물중 가장 오래 있었던 동물 3마리의 이름과 보호 시작을 조회합니다.
    • NAMEDATETIME에 관심있으므로 SELECT 해줍니다.
    • 입얍을 못간 동물중 입니다. IN에는 있으나 OUT에는 없는 정보를 조회 해야합니다.
      • IN을 기준으로 LEFT JOIN 시킵니다.
    • 입양을 가지 못했다는것은 OUT 에서 NULL 입니다.
    • DATETIME 기준으로 정렬합니다.
    • 3마리 까지만 조회하니 LIMIT를 걸어줍니다.
1
2
3
4
5
6
SELECT A.NAME, A.DATETIME 
    FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B
        ON A.ANIMAL_ID = B.ANIMAL_ID
    WHERE B.ANIMAL_ID IS NULL
    ORDER BY A.DATETIME
    LIMIT 3;

보호소에서 중성화한 동물

  • 보호소에서 나간 동물중, 보호소 내에서 중성화 수술을 거친 동물을 찾습니다.
    • 나간 동물중 입니다.
      • 양쪽에 전부 존재해야 합니다.
      • IN을 기준으로 INNER JOIN 시킵니다.
    • 중성화를 했다는 이야기는, 들어올때의 성별과 나갈때의 성별이 다르다는 것입니다.
      • != 연산으로 비교합니다.
      • ID 순으로 정렬 시켜 줍니다.