MSA/SQL

DAY.08

domsam 2025. 4. 23. 18:12
반응형
-- 01-(7) 박지성이 구매하지 않은 도서의 이름
SELECT DISTINCT bookname
FROM book B
LEFT JOIN orders O
ON B.bookid = O.bookid
LEFT JOIN customer C
ON O.custid = C.custid
AND C.`name` = '박지성'
WHERE c.custid IS NULL;


SELECT *
FROM book B
LEFT JOIN orders O
ON O.bookid = B.bookid
LEFT JOIN customer C
ON C.custid = O.custid
AND C.`name` = '박지성'
WHERE C.custid IS NULL;



SELECT bookname
FROM book
WHERE bookid NOT IN ( SELECT O.bookid FROM orders O 
                       INNER JOIN customer C
                          ON C.custid = O.custid
								  AND C.`name` = '박지성' );
								  
								  
SELECT B.bookname
FROM book B
WHERE NOT EXISTS ( SELECT * FROM orders O
                   INNER JOIN customer C
                          ON C.custid = O.custid
								  AND C.`name` = '박지성'
								  WHERE B.bookid = O.bookid );
								  
								  
-- 02-(1) 마당서점 도서의 총개수
SELECT (SELECT COUNT(bookid) FROM book) 
     + (SELECT COUNT(bookid) FROM imported_book);
     
SELECT SUM(A.cnt) 
FROM (     
	SELECT 1 as cnt FROM book
	UNION ALL
	SELECT 1 FROM imported_book
) A;

SELECT COUNT(A.bookid) 
FROM (     
	SELECT bookid FROM book
	UNION ALL
	SELECT bookid FROM imported_book
) A;

-- 02-(2) 마당서점에 도서를 출고하는 출판사의 총개수 (book 테이블 기준)
SELECT COUNT(DISTINCT publisher)
FROM book;

-- 02-(3) 모든 고객의 이름, 주소
SELECT NAME, address
FROM customer; 

-- 02-(4) 2024년 7월 4일 ~ 7월 7일 사이에 주문받은 도서의 주문번호
SELECT orderid
FROM orders
WHERE orderdate BETWEEN '2024-07-04' 
AND '2024-07-07';

SELECT orderid
FROM orders
WHERE orderdate > '2024-07-03'
  AND orderdate <= '2024-07-07';
 

-- 02-(5) 2024년 7월 4일 ~ 7월 7일 사이에 주문받은 도서를 제외한 도서의 주문번호
SELECT orderid
FROM orders
WHERE !(orderdate > '2024-07-03' AND orderdate <= '2024-07-07'); 


SELECT orderid
  FROM orders
 WHERE orderdate < '2024-07-04' 
    OR orderdate > '2024-07-07'; 

-- 02-(6) 성이 '김'씨인 고객의 이름과 주소
SELECT NAME, address 
FROM customer
WHERE NAME LIKE '김%';


SELECT LEFT(NAME, 1), address 
FROM customer
WHERE LEFT(NAME, 1) = '김';

SELECT 'abcdefg', LEFT('abcdefg', 3), RIGHT('abcdefg', 3), MID('abcdefg', 2, 3);

-- 02-(7) 성이 '김'씨이고 이름이 '아'로 끝나는 고객의 이름과 주소 
SELECT NAME, address 
FROM customer
WHERE NAME LIKE '김%아';

-- 02-(8) 주문하지 않은 고객의 이름 (부속질의 사용)
SELECT NAME
FROM customer
WHERE custid NOT IN ( SELECT custid FROM orders );

-- 02-(9) 주문 금액의 총액과 주문의 평균 금액
SELECT SUM(saleprice), AVG(saleprice)
  FROM orders;
  
-- 02-(10) 고객의 이름과 고객별 구매액
SELECT C.NAME, SUM(O.saleprice)
  FROM orders O
 INNER JOIN customer C
    ON C.custid = O.custid
 GROUP BY C.name;