# 출처 : 우리 학교 교수님 + <MySQL 로 배우는 데이터베이스 개론과 실습>
- 코드 작동 순서 : from>select>조건>정렬(order by)>그룹핑(group by)
Q. 가격이 8000원 이상인 도서를 구매한 고객에 대해서 고객별 주문 도서의 총 수량(두 권 이상 구매한 고객)
from | orders | from orders |
select | 주문 도서의 총 수량 | select count(*) |
조건 | 가격이 8000원 이상인 도서 | where saleprice>=8000 |
그룹핑 | 고객별(단, 두 권 이상 구매한 고격) | group by custid having count(*)>=2 |
사실 여기서 '고객 별'로 라는 말에서 정렬, order by를 쓰는 게 아닐까 싶엇는데. group by를 쓴다...
select custid, count(*) as "총수량" -- 필요한 칼럼
from madang.orders
where saleprice>=8000 -- 조건
group by custid ; -- 그룹핑(~별로)
왼쪽이 group by를 햇을 때고, 오른쪽이 order by다. 사실 맨 마지막 쿼리문을 빼면, order by의 결과와 동일하게 나온다. 이게 무슨 일인가 하면.
count(*) 때문에 결과값이 하나 밖에 안 나와서 order by를 해봤자 의미가 없다는 뜻. (아래는 count를 빼고 출력한 모습)
즉 group by는 결과값을 그룹핑하는 거인 듯.
Q. 고객과 고객의 주문에 관한 데이터를 고객별로 정렬하여 보이시오.
-- 고객과 고객의 주문에 관한 데이터를 고객별로 정렬
select *
from customer, orders
where orders.custid=customer.custid
order by customer.custid;
from | customer, orders | from customer, orders |
select | * | select * |
조건 | custid가 동일한 튜플을 선택 | where orders.custid=customer.custid |
정렬 | 고객별로 | order by customer.custid |
order by를 안 했을 때,
order by를 하면 이름 순대로 정렬해서 모든 출력값을 보여주고, group by를 하면 이름 순대로 하나씩 뽑아서 보여주는 듯.
Q. 가장 비싼 도서의 이름?
select bookname
from book
where price=(select max(price) from book);
이건 못 풀었다. 서브 쿼리문 쓰면 되더라..ㅎㅎ
Q. 대한미디어에서 출판한 도서를 구매한 고객의 이름을 보이시오.
select name
from customer
where custid in (select custid
from orders
where bookid in(select bookid
from book
where publisher="대한미디어"));
이거 쿼리 짜는데ㅋㅋㅋㅋㅋㅋㅋㅋ
후우.. 말도 안 되는 결과가 나온다....
대한 미디어에서 출판한 도서 | select bookid from book where publisher="대한미디어" |
도서를 구매한 고객 | select custid from orders |
고객의 이름 | select name from customer |
이 3개의 쿼리문을 연결하면 된당..
Q. 출판사별로 출판사의 평균 도서 가격보다 비싼 도서를 구하시오.
select b1.bookname
from book b1
where b1.price>(select avg(b2.price)
from book b2
where b2.publisher=b1.publisher);
이건 예상치 못한 연산 방법이었다... 난 아래처럼 풀엇는데 안 돌아가더라..ㅎㅎ
안 돌아가는 이유는 서브 쿼리가 1개 이상 반환해서 그러는 건데. 그에 반해 book의 price 중 어느 것과 비교해야 하는지 멘붕와서 그런 듯.. 스스슷
★ 상관 부속 질의 : 의존관계가 있따. 앞 절의 속성을 whrere 절의 맨 뒤에 넣는다. 즉 b1을 서브쿼리의 whrere절의 마지막에 넣는 거다.
'mysql' 카테고리의 다른 글
빠르게 MySQL 기본 문법 정리 한 번 보기!! (0) | 2021.10.31 |
---|