[프로그래머스 SQL/144854] 조건에 맞는 도서와 저자 리스트 출력하기

☑️ 문제

프로그래머스 144854

☑️ 풀이

첫 번째 풀이 (실패)

SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK B, AUTHOR A
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE ASC

Image

  • BOOK과 AUTHOR 테이블을 단순히 나열해 카테고리 필터만 적용했기 때문에 두 테이블 간의 관계가 전혀 반영되지 않았다.
  • 모든 저자와 경제 카테고리 책의 모든 조합이 출력되는 카티시안 곱이 발생했다.

두 번째 풀이 (성공)

SELECT B.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(B.PUBLISHED_DATE, '%Y-%m-%d') AS PUBLISHED_DATE
FROM BOOK B INNER JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE ASC

Image

  • INNER JOIN을 통해 BOOK과 AUTHOR 간의 관계를 명시적으로 연결했다.

☑️ 문법 정리

INNER JOIN

  • 형식

      	SELECT 컬럼명
      FROM 테이블1
      INNER JOIN 테이블2
      ON 테이블1.공통컬럼 = 테이블2.공통컬럼
    
    • 두 테이블에서 지정된 조건에 일치하는 행만 연결하여 출력한다.
    • ON절에서 지정한 조건이 일치하는 행만 반환한다.

카티시안 곱(Cartesian Product)

  • 형식

      // 기본 문법
      SELECT *
      FROM 테이블1, 테이블2;
        
      // CROSS JOIN
      SELECT *
      FROM 테이블1
      CROSS JOIN 테이블2;
    
    • 두 테이블의 모든 행을 서로 조합한다. (N * M)
    • 조인 조건 없이 단순히 테이블을 나열하거나 CROSS JOIN을 사용하면 발생한다.

© 2021. All rights reserved.

yaejinkong의 블로그