MSA/SQL

DAY.07

domsam 2025. 4. 22. 18:03
반응형
/* p.190 
INSERT

질의 3-44. book 테이블에 새로운 도서 '스포츠 의학'을 삽입하시오. 스포츠 의학은
한솔의학서적에서 출간했으며 가격은 90,000원입니다.
*/
INSERT INTO book
( bookid, bookname, publisher, price )
VALUES 
( 11, '스포츠 의학', '한솔의학서적', 90000 );


INSERT INTO book
   SET bookid = 12
     , bookname = '스포츠 의학'
     , publisher = '한솔의학서적'
     , price = 90000;
     
/* 질의 3-45. book 테이블에 새로운 도서 '스포츠 의학'을 삽입하시오. 스포츠 의학은
한솔의학서적에서 출간했으며 가격은 미정입니다.  */      
INSERT INTO book
   SET bookid = 13
     , bookname = '스포츠 의학'
     , publisher = '한솔의학서적';

-- 질의 3-46. 수입도서 목록을 book 테이블에 모두 삽입하시오.
INSERT INTO book
( bookid, bookname, publisher, price )
SELECT bookid - 7, bookname, publisher, price 
FROM imported_book A;

-- p.193 update
/*
	update 테이블명
	set 속성명 = 수정값
	[, 속성명 = 수정값
	 , 속성명 = 수정값 ... ]
	[ WHERE 검색 조건 ]  

*/

START TRANSACTION;

UPDATE book
set bookname = '걸어서 세계속으로'
, price = 20000
, 컬럼명 = 수정값
WHERE bookid = 3 ;

COMMIT; 

ROLLBACK;

-- 질의 3-47. Customer 테이블에서 고객번호가 5인 고객의 주소를 '대한민국 부산'으로 변경하시오.

UPDATE customer
SET address = '대한민국 부산'
WHERE custid = 5; 

-- 질의 3-48. book 테이블에서 14번 '스포츠 의학'의 출판사를 imported_book 테이블에 있는
--            21번 책의 출판사와 동일하게 변경하시오.
UPDATE book
SET publisher = 'Pearson'
WHERE bookid = 13;

UPDATE book
SET publisher = ( SELECT publisher FROM imported_book WHERE bookid = 21 )
WHERE bookid = 13;


UPDATE imported_book
SET publisher = (SELECT publisher FROM book WHERE bookid = 12)
WHERE bookid = 21;

-- p.197 delete

START TRANSACTION;

DELETE FROM orders
WHERE pk
;

ROLLBACK;

-- 질의 3-49. book테이블에서 도서번호가 11인 도서를 삭제하시오.
DELETE FROM book 
WHERE bookid = 9;

-- 질의 3-50. 모든 고객을 삭제하시오.

DELETE FROM customer;

TRUNCATE customer;



SELECT IFNULL(NULL, 0), ISNULL(NULL, 0), NVL(NULL, 0);


-- p.201
-- 01-(1) 도서번호가 1인 도서의 이름
SELECT bookname
  FROM book
 WHERE bookid = 1;
 
-- 01-(2) 가격이 20,000원 이상인 도서의 이름
SELECT bookname
  FROM book
 WHERE price >= 20000;
 
-- 01-(3) 박지성의 총 구매액
SELECT saleprice FROM orders WHERE custid = 1;

SELECT * FROM customer WHERE NAME = '박지성';

SELECT SUM(saleprice)
  FROM orders O
 INNER JOIN customer C
    ON C.custid = O.custid
 WHERE C.`name` = '박지성';


SELECT SUM(saleprice) FROM orders
WHERE custid IN ( SELECT custid FROM customer WHERE NAME = '박지성' );

-- 01-(4) 박지성이 구매한 도서의 수
SELECT COUNT(O.custid)
  FROM orders O
 INNER JOIN customer C
    ON C.custid = O.custid
 WHERE C.`name` = '박지성';
 
SELECT COUNT(custid) FROM orders
WHERE custid = ( SELECT custid FROM customer WHERE NAME = '박지성' );

-- 01-(5) 박지성이 구매한 도서의 출판사 수
SELECT COUNT(DISTINCT publisher)
  FROM orders O
 INNER JOIN customer C
    ON C.custid = O.custid
   AND C.`name` = '박지성'
 INNER JOIN book B
    ON B.bookid = O.bookid;
 
-- 01-(6) 박지성이 구매한 도서의 이름, 가격, 정가와 판매가격의 차이
SELECT B.bookname, B.price, ABS(B.price - O.saleprice) AS diff_price
  FROM orders O
 INNER JOIN customer C
    ON C.custid = O.custid
   AND C.`name` = '박지성'
 INNER JOIN book B
    ON B.bookid = O.bookid;
    
-- 절대값 구하는 함수 ABS()
SELECT ABS(10), ABS(-10);