[프로그래머스 SQL/144854] 조건에 맞는 도서와 저자 리스트 출력하기
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이 (실패)
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
- 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
- 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을 사용하면 발생한다.