본문 바로가기

mysql

쿼리 문 짜는 과정 다 보여줄께~

728x90

# 출처 : 우리 학교 교수님 + <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절의 마지막에 넣는 거다.