DB/쿼리 문제풀이

프로그래머스 ORACLE 조건에 맞는 도서와 저자 리스트 출력하기

sshhhh 2023. 10. 6.
SELECT A.BOOK_ID AS BOOK_ID
, B.AUTHOR_NAME AS AUTHOR_NAME
, TO_CHAR(A.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK A --기준테이블
INNER JOIN AUTHOR  B
ON A.AUTHOR_ID = B.AUTHOR_ID 
WHERE A.CATEGORY ='경제'
ORDER BY  PUBLISHED_DATE;

 

 

📌TO_CHAR(날짜 변환), 조인 기준 테이블

 

 

📌LEFT JOIN과 RIGHT JOIN

데이터베이스에서 두 개의 테이블을 연결할 때 사용되는 조인 유형입니다.

이 두 조인의 차이는 연결하는 테이블의 순서와 결과에 있습니다.

  1. LEFT JOIN:
    • 왼쪽 테이블을 기준으로 하여 오른쪽 테이블과 연결합니다.
    • 왼쪽 테이블의 모든 행은 결과에 포함됩니다.
    • 왼쪽 테이블과 오른쪽 테이블 간에 매칭되는 행이 없는 경우에도 왼쪽 테이블의 값은 결과에 나타나며 오른쪽 테이블의 값은 NULL로 표시됩니다.
  2. RIGHT JOIN:
    • 오른쪽 테이블을 기준으로 하여 왼쪽 테이블과 연결합니다.
    • 오른쪽 테이블의 모든 행은 결과에 포함됩니다.
    • 오른쪽 테이블과 왼쪽 테이블 간에 매칭되는 행이 없는 경우에도 오른쪽 테이블의 값은 결과에 나타나며 왼쪽 테이블의 값은 NULL로 표시됩니다.

 

 

 

Customers 테이블:

CustomerID CustomerName

1 John
2 Emily
3 Michael

Orders 테이블:

OrderID CustomerID Product

101 1 Phone
102 1 Laptop
103 2 Tablet
  • LEFT JOIN:결과:CustomerName Product
    John Phone
    John Laptop
    Emily Tablet
    Michael NULL
  • SELECT Customers.CustomerName, Orders.Product FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
  • RIGHT JOIN:결과:CustomerName Product
    John Phone
    John Laptop
    Emily Tablet
    NULL Keyboard
  • SELECT Customers.CustomerName, Orders.Product FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

여기서, RIGHT JOIN을 사용할 때는 Customers 테이블에 없는 CustomerID가 3인 주문이 있습니다. 이 경우에도 RIGHT JOIN을 사용하면 오른쪽 테이블의 값은 결과에 포함되며, 왼쪽 테이블의 값은 NULL로 나타납니다.

 

📌JOIN ON 절 ,WHERE절 차이

  • ON : 조인조건 명시 —>어떤 열들을 기준으로 테이블을 연결할지
  • WHERE : 그냥 필터링
SELECT Customers.CustomerName, Orders.OrderDate
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE Orders.OrderDate > '2023-01-01';

위 쿼리는 **Customers**와 Orders 테이블을 **CustomerID**를 기준으로 조인하고, 그 결과 중에서 **OrderDate**가 '2023-01-01'보다 큰 주문만을 검색합니다. 이 경우 ON 절은 조인 조건을 설정하고, WHERE 절은 조인된 결과를 추가적으로 필터링합니다.

요약하면, ON 절은 조인 조건을 설정하고 WHERE 절은 조인된 결과를 추가적으로 필터링할 때 사용됩니다.

댓글