์ค์นผ๋ผ ๋ถ์์ง์ - select ๋ถ์์ง์
๋จ์ผ๊ฐ์ ๋ฐํ
ex) ๊ณ ๊ฐ๋ณ ํ๋งค์ก์ ๋ณด์ด์์ค. ๋จ, ๊ฒฐ๊ณผ๋ ๊ณ ๊ฐ์ด๋ฆ๊ณผ ๊ณ ๊ฐ๋ณ ํ๋งค์ก์ ์ถ๋ ฅํ๋ค.
select (select cname from cust where cust.cid = orders.cid) as cname,
sum((select price from book where book.bid = orders.bid)) as tot_price
from orders
group by cid;
๋จผ์ ๊ตฌ๋งคํ cust๋ฅผ ๋ถ์์ง์๋ก ์ฐพ์, ์ดํ sum ์์์ ๋ถ์์ง์๋ก ์ฑ ๊ฐ๊ฒฉ์ ์ฐพ๊ณ sum์ผ๋ก ํฉ์ฐ
sum์์ ๋ ๋ถ์์ง์๋ผ ๊ดํธ 2๋ฒ์ธ ๋ฏ/??
์ฌ์ฉํ๋ ์ด์ : cname์ ์ถ๋ ฅํ๊ณ ์ถ์๋ฐ orders์๋ cname์ด ์กด์ฌํ์ง ์์, price์ ํฉ๊ณ๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์๋ฐ orders์๋ price๊ฐ ์กด์ฌํ์ง ์์ ๋ถ์์ง์๋ก ๊ฐ์ ธ์ ํฉ๊ณ sum์ ์ฌ์ฉํจ.
ex) orders ํ ์ด๋ธ์ ๊ฐ ์ฃผ๋ฌธ์ ๋ง๋ ๋์์ด๋ฆ์ ์ ๋ ฅํ์์ค.
update orders
set title = (select title
from book
where book.bid = orders.bid);
ex)์์ ์ฌ๋ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ์ฃผ๋ฌธ์ ๋ณด๋ฅผ ๋ณด๊ณ ์ถ๋ค(๊ณ ๊ฐ์ด๋ฆ, ์ฃผ๋ฌธ๋ฒํธ, ์ฃผ๋ฌธ์ผ)
select (select cname
from customer
where cust.cid = orders.cid and addr = 'anyang') as cname, oid, odate
from orders; ##ํ๋ฆฐ ๋ต
select (select cname
from cust
where cust.cid = orders.cid) as cnmae, oid, odate
from orders
where cid in (select cid
from cust
where addr = 'anyang'); ##๋ง๋ ๋ต
์์ ์์๊ฐ ์ ํ๋ ธ๋๋ฉด, ๋จผ์ ์์์ ํด๋นํ๋ cname๋ง ์ฐพ๊ณ oid, odate๋ ๊ทธ๋๋ก ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ oid, odate๊ฐ ์ถ๋ ฅ๋๊ธฐ ๋๋ฌธ์ anyang์ ํด๋นํ์ง ์๋ cname๋ง null๋ก ์ถ๋ ฅ๋ ๋ฟ ์ ๋ถ ์ถ๋ ฅ๋๋ค. ๋ฐ๋ผ์ cname์ ๊ฐ์ ธ์จ ํ anyang์ ์ฌ๋ ์ฌ๋์ ๋ค์ ๊ฑธ๋ฌ์ผ ํ๊ธฐ ๋๋ฌธ์ where๋ก ๋นผ์ ํ์ ๊ณ์ฐํ๋ค.
์ธ๋ผ์ธ ๋ทฐ - from ๋ถ์์ง์
ex) ๊ณ ๊ฐ๋ฒํธ๊ฐ 2 ์ดํ์ธ ๊ณ ๊ฐ์ ํ๋งค์ก์ ๋ณด์ด์์ค. ๋จ, ๊ฒฐ๊ณผ๋ ๊ณ ๊ฐ์ด๋ฆ๊ณผ ๊ณ ๊ฐ๋ณ ํ๋งค์ก์ ์ถ๋ ฅํ๋ค.
select cname, sum(price)
from (select cid, cname
from cust
where cid <= 2) cs,
orders od,
(select bid, price
from book) b
where cs.cid = od.cid and b.bid = od.bid
group by od.cid;
cs, od, b ์ฒ๋ผ ์ด๋ฆ์ ์ง์ ํด ์กฐ๊ฑด์ ํด๋นํ๋ ๊ทธ ํ ์ด๋ธ๋ง ์ฌ์ฉํ๋๋ก ๊ฐ์ ธ์ where, group by๋ก ์ฌ์ฉ
ex) ์ฃผ๋ฌธํ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ์ฃผ๋ฌธ์ผ, ์ฑ ์ด๋ฆ์ ๋ณด์ด๋, ์ฃผ๋ฌธํ์ง ์์ ๊ณ ๊ฐ์ ์ด๋ฆ๊ณผ ์ฃผ๋ฌธํ์ง ์์ ์ฑ ์ด๋ฆ๋ ํจ๊ป ๋ณด์ฌ๋ผ.
select cname, odate, title
from (select cname, odate, bid
from cust left outer join orders on cust.cid = orders.cid) cs left outer join book on cs.bid = book.bid
union
select cname, odate, title
from (select cname, odate bid
from cust left outer join orders on cust.cid = orders.cid) cs right outer join book on cs.bid = book.bid;
from ์ ์์์ bid๋ฅผ ๋ฝ๋ ์ด์ ๋ ์ดํ์ ์์ฐํฐ ์กฐ์ธ์์ ๋น๊ต๋ฅผ ํด์ผ ํ๊ธฐ ๋๋ฌธ. cname, odate๋ง cust, orders ํ ์ด๋ธ์์ ๋ฐ๋ก ๋นผ cs ๊ฐ์ ํ ์ด๋ธ๋ก ๋ง๋ค๊ณ ๋น๊ต.
์ค์ฒฉ์ง์ - where ๋ถ์์ง์
https://till.tistory.com/entry/mysql-%EB%B6%80%EC%86%8D%EC%A7%88%EC%9D%98
ex) ํ๊ท ์ฃผ๋ฌธ๊ธ์ก ์ดํ์ ์ฃผ๋ฌธ์ ๋ํด์ ์ฃผ๋ฌธ๋ฒํธ์ ๊ธ์ก์ ๋ณด์ด์์ค.
select oid, price
from orders inner join book on orders.bid = book.bid
where price <= (select avg(price) from orders natural join book);
ex) ๊ฐ ๊ณ ๊ฐ๋ณ ํ๊ท ์ฃผ๋ฌธ๊ธ์ก๋ณด๋ค ํฐ ๊ธ์ก์ ์ฃผ๋ฌธ ๋ด์ญ์ ๋ํด์ ์ฃผ๋ฌธ๋ฒํธ, ๊ณ ๊ฐ๋ฒํธ, ๊ธ์ก์ ๋ณด์ด์์ค.(์๊ด๋ถ์์ง์)
select oid, cid, price
from (select oid, cid, price
from orders natural join book) t1
where t1.price > (select avg(price)
from (select oid, cid, price
from orders natural join book) t2 natural join book);
ex) 1๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ๋์์ ์ต๊ณ ๊ธ์ก๋ณด๋ค ๋ ๋น์ผ ๋์๋ฅผ ๊ตฌ์ ํ ์ฃผ๋ฌธ์ ์ฃผ๋ฌธ๋ฒํธ์ ๊ธ์ก์ ๋ณด์ด์์ค.
select oid, price
from orders natural join book
where price > all(select price from orders natural join boo where cid = 1);
all: ์ ๋ถ ์ค์
some(any): ์ต์ํ 1๊ฐ๋ณด๋ค
์ ๋ฆฌ
select ๋ถ์์ง์: ์์ฑ์ ๊ฐ์ ธ์ค๊ธฐ(sum๊ณผ ๊ฐ์ ๊ณ์ฐ ์์ฑ ๊ฐ์ ธ์ค๊ธฐ ์ฉ์ด)
from ๋ถ์์ง์: ์์ฑ์ ๊ฐ์ ธ์ค๊ณ ์กฐ๊ฑด์ ์ฃผ๊ธฐ(์กฐ๊ฑด์ ์ค ๊ฐ์์ ํ ์ด๋ธ์ ๋ง๋ค์ด ์ฌ์ฉํจ)
where ๋ถ์์ง์: ์กฐ๊ฑด์ ์ถ๊ฐํ๊ธฐ