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;