카테고리 없음

[데이터베이스] 13주차

bebeghi3356 2025. 5. 27. 09:48

{ SELECT 문 }

***ORDER BY

집계함수 ***

- 표3-5 집계 함수의 종류******

- distinct : 

- 질의 3-15 

의미잇는 열 이름 출력 > SELECT문에 SUM(saleprice) AS 총매출

- 질의 3-17

- 질의 3- 18 : 도서 판매 건수를 구하라 == 주문 테이블에 튜플 개수를 구하라 (COUNT(*))

 

***GROUP BY ; 소계(특정 그룹에 대한 합계)

 

-질의 3-19 : 고객별로 ~ >> 그룹바이 사용한다

SQL문으로 표현 ->

//사용되는 테이블 : 주문테이블

SELECT custid, COUNT(*)//총 수량, SUM(saleprice) //총 판매 
FROM orders
GROUP BY custid; //그룹바이로 묶은 속성은 반드시 select문에 기술되어야 한다.

 

Q) 출판사 별로 출판한 도서의 수량을 검색하라

SELECT 출판사, COUNT(*)
FROM 도서테이블 
GROUP BY 출판사;

 

*******HAVING 절 : GROUP BY에 대한 조건

- group by 없이 having절이 있는 sql문은 잘못된 검색이다.

- 질의 3-20*********

: Q) 판매가격이 8000원 이상인 도서별 구매한 고객번호를 검색하시오

SELECT custid 

FROM orders

WHERE saleprice >= 8000

이 질의에서 HAVING 절 -> 단, 두 권 이상 구매한 고객만 구한다.

'고객별' 에 대한 추가 조건이 되므로 custid 즉, GROUP BY에 대한 추가 조건이 되므로 HVING 을 사용해준다.

 

161페이지 표 3-6 **********

- GROUPBY <속성> 의 주의사항 중요

- HAVING <검색조건> 의 주의사항 중요

 

 

조인질의 > 테이블 두 개 이상

 

질의 3-22

- Q) 도서와 도서관련 주문 정보를 모두보이시오

//도서테이블, 주문테이블 -> 조인질의

SELECT *
FROM BOOK, ORDERS
WHERE BOOK.bookid = ORDERS.bookid; //조인조건

- Q) 김연아 고객이 주문한 도서 이름을 검색하시오

SELECT bookname

FROM customer, orders, book

WHERE customer.custid =  orders.custid
AND book.bookid = orders.bookid

AND name = '김연아' ;

 

 

- 질의 3-24 **********

고객별로 > 고객 이름별로

그럼 custid가 아니라 name으로 묶어야 함 > group by사용 , ORDER by 사용 (customer.name)

모든 도서의 총 판매 > SUM(saleprice)

Q) 도서 이름별로 주문한 모든 도서의 총 판매액을 구하고 도서 이름별로 정렬하시오

SELECT bookname, SUM(saleprice)

FROM book, orders

WHERE book.bookid = orders.bookid

GROUP BY bookname

ORDER BY bookname ASC;

원래는 table명.속성명 으로 GROUP BY, ORDER BY에서 적어야하는 table명은 생략해도 된다. 단, 테이블에 속성명이 중복되는 경우 table명을 생략하면 안된다.

 

 

- 질의 3-27 *********

'도서를 구매하지 않은 고객을 포함'  ~> Outer join 외부조인

방법 : FROM  ~ LEFT OUTER JOIN ~

                         ON ~

Q) 고객의 이름과 고객이 주문한 도서의 판매가격을 구하시오 ~> Inner Join

SELECT name, saleprice
FROM Customer, Orders
WHERE Customer.custid = Orders.custid;

 

Q) 판매되지 않은 도서를 포함하여 도서이름과 도서의 판매가격을 구하시오

SELECT bookname, saleprice

FROM Book LEFT OUTER JOIN Orders (== orders right outer join book)

ON book.bookid = orders.bookid

 

관계대수 식 ㄴㄴ SQL문으로만 시험 준비