{ 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문으로만 시험 준비