학부시절 들었던.. 전공수업을 다시 듣는 기분이었다..
SQL을 오랜만에 보니까 반갑기도 하고......
2학년때는 이게 너무 어렵게 느껴졌었는데
아무래도 지금은 좀 나아지긴 했으나 안쓴지 오래돼서 기억이 안남
SQLD에서 쓰는 함수들이 실무에서는 안쓴다는게 충격적이었다....
2만원 이상인 책의 데이터
SELECT *
FROM book
WHERE price <= 20000;
1 | 축구의역사 | 굿스포츠 | 7000 |
2 | 축구아는 여자 | 나무수 | 13000 |
5 | 피겨 교본 | 굿스포츠 | 8000 |
6 | 역도 단계별기술 | 굿스포츠 | 6000 |
8 | 야구를 부탁해 | 이상미디어 | 13000 |
9 | 올림픽 이야기 | 삼성당 | 7500 |
10 | Olympic Champions | Pearson | 13000 |
출판사가 굿스포츠, 대한미디어인 데이터
select *
from book
where publisher IN ('굿스포츠', '대한미디어');
select *
from book
where publisher = '굿스포츠' or publisher = '대한미디어';
1 | 축구의역사 | 굿스포츠 | 7000 |
3 | 축구의 이해 | 대한미디어 | 22000 |
4 | 골프 바이블 | 대한미디어 | 35000 |
5 | 피겨 교본 | 굿스포츠 | 8000 |
6 | 역도 단계별기술 | 굿스포츠 | 6000 |
도서이름에 ‘축구’가 포함된 출판사를 검색하시오
select bookname, publisher
from book
where bookname LIKE ‘%축구%’
%축구 = 앞에 어떤글자와도 상관없고 뒤에 두 글자만 축구
축구% = 앞에 두 글자는 축구 뒤에는 어떤 글자가 와도 상관없음
2만원 이하인 도서 가격 내림차순으로 정렬
select *
from book
where price <= 20000
order by price desc;
COUNT(publisher)는 출판사의 수를 센다.
COUNT(DISTINCT publisher)는 중복을 제거한 출판사의 수를 세어준다.
select custid, count(*) AS 도서수량, sum(saleprice) AS 총액
from orders
group by custid;
custid | 도서수량 | 총액 |
---|---|---|
1 | 3 | 39000 |
2 | 2 | 15000 |
3 | 3 | 31000 |
4 | 2 | 33000 |
HAVING 절은 GROUP BY 절의 결과 나타나는 그룹을 제한하는 역할을 함
– where절이랑 똑같은데 groupby 한 것에 조건거는거라고 생각
조인 = 테이블 합치기
도서를 구매한 고객의 custid, custname과 총 구매수량
SELECT orders.custid, customer.custname, COUNT(*) AS 도서수량
FROM orders, customer
WHERE orders.custid = customer.custid
AND saleprice >= 8000
GROUP BY orders.custid, customer.custname
HAVING COUNT() >= 2;
custid | custname | 도서수량 |
---|---|---|
1 | 아이언맨 | 2 |
4 | 헐크 | 2 |
3 | 스파이더맨 | 2 |
LEFT OUTER JOIN은 주문안한 고객을 보고 싶을 때
right outer 조인했는데 여기서 데이터가 나온다면 데이터 무결성 조건 깨진 것임!
why? 없는 고객이 주문을 했다...!
-조인으로 하는 법
select distinct(O.custid), custname
from orders O, customer C
where O.custid = C.custid
-서브쿼리
select custid, custname
from customer
where custid IN (select distinct custid from orders)
1 | 아이언맨 |
2 | 블랙위도우 |
3 | 스파이더맨 |
4 | 헐크 |