1. 마당서점에서 다음의 심화된 질문에 대해 SQL 문을 작성하시오.
(1) 박지성이 구매한 도서의 출판사와 같은 출판사에서 도서를 구매한 고객의 이름
#첫 번째 방법
SELECT c1.name
FROM Customer c1, Orders o1, Book b1
WHERE c1.custid=o1.custid AND o1.bookid=b1.bookid AND c1.name NOT LIKE '박지성'
AND b1.publisher IN (SELECT b2.publisher FROM Customer c2, Orders o2, Book b2
WHERE c2.custid=o2.custid AND o2.bookid=b2.bookid
AND c2.name LIKE '박지성');
#두 번째 방법
SELECT DISTINCT c1.name
FROM Customer c1 JOIN Orders o1 ON c1.custid=o1.custid
WHERE c1.name NOT LIKE '박지성' AND
o1.bookid IN (SELECT bookid
FROM Book
WHERE publisher IN (SELECT publisher
FROM Orders Join Book ON Orders.bookid=Book.bookid
WHERE Orders.custid=(SELECT custid
FROM Customer c2
WHERE c2.name LIKE '박지성')));
이게 제일 헷갈렸다.. 돌아가라 머리야
(2) 두 개 이상의 서로 다른 출판사에서 도서를 구매한 고객의 이름
1. Customer, Orders, Book 세 테이블을 모두 조인시키기
>> 결과

2. JOIN 된 테이블의 이름과 추출할 Customer 테이블의 이름이 같고 출판사가 중복이 아니면 COUNT +1
3. COUNT가 2 이상일 때 고객 이름 출력
#첫 번째 방법
SELECT name
FROM Customer c
WHERE (SELECT COUNT(DISTINCT publisher)
FROM Customer c1, Orders o1, Book b1
WHERE c1.custid=o1.custid AND o1.bookid=b1.bookid AND c.name=c1.name) >= 2;
#두 번째 방법
SELECT name
FROM Customer c1
WHERE (SELECT COUNT(DISTINCT publisher)
FROM Book JOIN Orders ON Book.bookid=Orders.bookid
JOIN Customer c2 On Orders.custid=c2.custid
WHERE c1.name LIKE c2.name) >= 2;