본문 바로가기
학교 강의/데이터베이스

6주차 - 조인 시험에 많이 나옴

by hoshi03 2023. 10. 13.

select문 연습문제

in과 like는 같이 쓰면 인식이 안된다!

 

show tables;
select * from customer;
select * from orders;
select * from book;

-- 고객 번호가 3번인 선수의 이름과 주소를 검색하시오
select name, address from customer where custid = 3;
-- 2014년 7월 4일~7월 7일 사이에 주문받은 도서의 주문번호와 주문날짜를 검색하시오
select orderid, orderdate from orders where orderdate between 20140704 and 20140707;
-- 이거 틀림 고객의 주소가 서울이거나 대전에 사는 고객의 이름과 주소를 검색하시오
select  name, address from customer where address like '%대전%' or address like '%서울%';
-- 출판사가 이상미디어 중 가격이 20000원 이상인 도서의 책제목, 출판사, 가격을 검색
select bookname, publisher, price from book where publisher like '이상미디어' and price >= 20000;
-- 도서를 주문한 회원의 번호를 검색하시오 단 중복된 회원의 번호는 한번만 출력
select distinct custid from orders;
-- 고객 중 전화번호가 없는 고객의 이름과 주소를 검색하시오
select name, address from customer where phone is null;
-- 출판사가 굿스포츠 인 도서 중 축구가 포함된 도서의 이름과 출판사 가격을 검색
select bookname, publisher, price from book where publisher = '굿스포츠' and bookname like '%축구%';
-- 2014년 7월 4일~7월 7일 사이에 주문받은 도서를 제외한 도서의 주문번호 주문날짜를 검색하시오
select orderid, orderdate from orders where orderdate not between 20140704 and 20140707;
-- 도서 테이블에서 출판사별로 금액의 합계와 평균을 출력해주세요
select publisher, sum(price), avg(price) from book group by publisher;
-- 도서테이블의 도서 중 가격이 가장 비싼 책과 가장 저렴한 가격을 검색하시오
select max(price)-min(price) as 'price_diff' from book;
-- 도서테이블에서 10% 할인된 가격 출력
select bookname, price * 0.9, price from book;
-- 주문 테이블에서 고객번호 가 1번인 고객의 총 구매한 책의 가격을 출력하시오
select sum(saleprice) from orders where custid = 1;
-- 이거 틀림 주문 테이블에서 고개번호 별로 책 구입 금액이 비싼 책 부터 정렬해서 고객번호 판매금액을 검색하시오
select custid, saleprice from orders order by custid, saleprice desc;
-- 주문 테이블에서 책 번호 별로 판매금액의 합계를 구하되 판매금액의 합계가 10000원 이상 인 것만 검색하시오
select bookid, sum(saleprice) from orders group by bookid having sum(saleprice) >= 10000;
-- 도서테이블의 도서의 총 개수를 출력해주세요
select count(*) from book;
-- 도서 테이블의 총 출판사의 개수를 출력해 주세요
select count(distinct publisher) from book;
-- 주문 테이블에서 한번이라도 주문한 고객의 개수를 출력해주세요
select count(distinct custid) from orders;
-- 고객별로 주문한 도서의 총 수량과 총 판매액을 구하시오
select count(bookid), sum(saleprice) from orders group by custid;

카디션, 곱집합

조인이 아니고 전부 customer 5개 * orders 10개 로 50개를 가져오게 된다

-- 고객과 고객의 주문한 관한 테이블을 모두 검색하시오
select * from orders,customer;

 

조인문제

show tables;
select * from book;
select * from customer;
select * from orders ;

-- 고객과 고객의 주문한 관한 테이블을 모두 검색하시오
select * from customer c, orders o
where c.custid = o.custid
order by c.name;


--  책을 주문한 고객의 이름과 책이름 가격을 검색하시오, 다시해보기 
select name, saleprice, bookname
from book b, customer c, orders o
where c.custid = o.custid and b.bookid = o.bookid;

-- 박지성이 주문한 책의 총가격을 검색하시오
select name, sum(saleprice)
from customer c,orders o
where o.custid =  c.custid and c.name = '박지성';


-- 고객의 이름과 고객이 주문한 도서의 판매가격을 검색하시오
select name, saleprice
from customer c, orders o
where c.custid = o.custid;


-- 고객의 이름과 고객이 주문한 도서의 판매가격을 검색하되 고객별로 금액이 비싼거별로 정렬하시오, 이름순으로 정렬을 해둬야 가격순으로 정렬을 해도 이름 정렬이 깨지지 않는다
select name, saleprice
from customer c, orders o
where c.custid = o.orderid
order by name, saleprice desc;

-- 도서명별로 책을 판매한 금액의 합계를 검색하시오, 20000원 이상인 경우
select bookname, sum(saleprice)
from orders o, book b
where b.bookid = o.bookid
group by b.bookname
having sum(saleprice >= 20000);

-- 책을 구매한 고객의 이름과  구매한 책의 이름과 판매금액을 검색하시오, 다시해보기 <- custid와 orderid를 햇갈리는 찐빠
select name, bookname, saleprice
from orders o, customer c , book b
where o.custid = c.custid and b.bookid = o.bookid;


 -- 주문 테이블에서 책 이름 별로 판매금액의 합계를 구하되 판매금액의 합계가 10000 원 이상인 것만 검색
 
select bookname, sum(saleprice)
 from book b, orders o
 where b.bookid = o.bookid
 group by b.bookname
 having sum(saleprice) >= 10000;
 
 
 
 
 

-- 가격이 20000 원 이상인 도서를 주문한 고객의 이름과 도서의 이름을 검색하시오
select name, bookname
from book b, orders o, customer c
where b.bookid = o.bookid and o.custid = c.custid and o.saleprice >= 20000;


-- 고객명별로 책을 구입한 합계를 검색하되 합계가 높은순으로 검색하시오
select c.name, sum(o.saleprice) 
from orders o, customer c
where o.custid = c.custid 
group by c.name
order by sum(o.saleprice) desc;

select name, sum(saleprice)
from customer c, orders o
where c.custid = o.custid
group by c.name
order by sum(saleprice) desc;


select c.name, b.bookname 
from customer c, book b, orders o
where c.custid = o.custid and b.bookid = o.bookid and b.price = 20000;




-- 이너, 아우터 조인은 시험에는 안나오지만 중요하다!
-- 고객의 이름과 고객이 주문한 도서의 판매가격을 구하시오.
select name, saleprice
from customer
inner join orders
on customer.custid = orders.custid;

-- 도서를 구매하지 않은 고객을 포함하여 고객의 이름과 고객이 주문한 도서의 판매가격을 구하시오.
select name, saleprice
from customer c
left outer join orders o
on c.custid = o.custid;

 

시험범위 1장, 2장, 2장 관계대수 제외!
3장 조인, 3장 처음부터~ 172까지, 데이터 정의어(182~188)까지

'학교 강의 > 데이터베이스' 카테고리의 다른 글

9주차 조인, 서브쿼리  (1) 2023.10.27
데베시험대비  (0) 2023.10.18
5주차  (1) 2023.10.06
4 주차  (0) 2023.09.22
3주차  (0) 2023.09.15