- ํ์์ง์(๋ถ์์ง์)
- ํ๋์ SQL๋ฌธ ์์ SQL๋ฌธ์ด
์ค์ฒฉ(nested)๋์ด ์๋ ๊ตฌ์กฐ- ์ง์๋ฅผ 1์ฐจ ์ํํ ๋ค์ ๋ฐํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ์ด๋ก ๋ค์ ์ง์๋ฅผ ์ํ
- ๋ค๋ฅธ ํ ์ด๋ธ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ก ํ์ฌ ํ ์ด๋ธ์ ์๋ ์ ๋ณด๋ฅผ ์ฐพ๊ฑฐ๋ ๊ฐ๊ณตํ ๋ ์ฌ์ฉ
์๋ธ์ฟผ๋ฆฌ ์ฐ์ฐ์
WHERE ์ ์์ ์ฌ์ฉํ๋ ์ฐ์ฐ์
๋ฐ์ดํฐ๋ฅผ ์ ํํ๋ ์กฐ๊ฑด์ด๋ ์ ์ด ๊ฐ์ด ์ฌ์ฉ
์ฐ์ฐ์ ์ข ๋ฅ
1) ๋น๊ต: =, !=, >, <, >=, <=
2) ์งํฉ: IN, NOT IN
3) ์กด์ฌ: EXISTS, NOT EXISTS
4) ํ์ : ALL(๋ชจ๋), ANY(์ต์ ํ๋๋ผ๋)
| book | bookclient |
|---|---|
![]() | ![]() |
| booksale | publisher |
|---|---|
![]() | ![]() |
- ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฐ์ด ๋จ์ผ ํ(ํํ)์ธ ๊ฒฝ์ฐ
- '=' ์ฐ์ฐ์ ์ฌ์ฉ
- =, !=, >, <, >=, <=
main query
WHERE ์กฐ๊ฑด์ = (sub query)
Ex) 'ํธ๋ ๋' ๊ณ ๊ฐ์ ์ด ์ฃผ๋ฌธ๋ ์กฐํ
booksale ํ
์ด๋ธ์๋ ๊ณ ๊ฐ์ด๋ฆ(clientName) ์์ด ๊ณ ๊ฐ๋ฒํธ(clientNo) ๋ง ์๊ธฐ์ bookclient์์ 'ํธ๋ ๋' ๊ณ ๊ฐ์ด๋ฆ์ ํด๋นํ๋ clientNo์ ์ฐพ์ WHERE ์ ์์ booksale์ 'ํธ๋ ๋' clientNo์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.-- ํธ๋ ๋ ๊ณ ๊ฐ์ ์ด์ฃผ๋ฌธ๋ ์กฐํ
SELECT sum(BS.bsQty) AS '์ด์ฃผ๋ฌธ๋'
FROM bookdb.booksale BS
WHERE BS.clientNo = (SELECT BC.clientNo
FROM bookdb.bookclient BC
WHERE BC.clientName = 'ํธ๋ ๋');
- ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฐ์ด ์ฌ๋ฌ ํ์ธ ๊ฒฝ์ฐ
- IN, ANY, ALL, EXISTS ์ฐ์ฐ์ ์ฌ์ฉ
Ex) ๋์๋ฅผ ๊ตฌ๋งคํ ์ ์ด ์๋ ๊ณ ๊ฐ๋ช ์กฐํ
booksale ํ
์ด๋ธ์ด ์ ์ฒด ๊ตฌ๋งค๋ด์ญ์ด๊ธฐ์ ํด๋น ํ
์ด๋ธ์ ์กด์ฌํ๋ clientNo์ด bookclient ์์(IN) ์์ผ๋ฉด ์ถ๋ ฅํ๋ฉด ๋๋ค.-- ๋์๋ฅผ ๊ตฌ๋งคํ ์ ์ด ์๋ ๊ณ ๊ฐ๋ช
์ถ๋ ฅ
SELECT BC.clientNo, BC.clientName
FROM bookdb.bookclient BC
WHERE BC.clientNo IN (SELECT DISTINCT BS.clientNo
FROM bookdb.booksale BS);
- ๊ด๊ณ ์ฐ์ฐ์ ๋ค์ ์์น
Any: ๊ฒ์ ์กฐ๊ฑด์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์ค์์ ํ๋๋ผ๋ ๋ง์กฑํ๋ฉด ์ฐธAll: ๊ฒ์ ์กฐ๊ฑด์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ์ ๋ชจ๋ ๊ฐ์ ๋ง์กฑํ๋ฉด ์ฐธ
( = ํ๋๋ผ๋ ๋ง์กฑํ์ง ์์ผ๋ฉด ๊ฑฐ์ง)
Ex) 2๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ๋์์ ์ต๊ณ ์ฃผ๋ฌธ์๋๋ณด๋ค ๋ ๋ง์ ๋์๋ฅผ ๊ตฌ์ ํ ๊ณ ๊ฐ์ ์ ๋ณด ์กฐํ
์ฌ์ค max() ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํด๋ ๋์ง๋ง, ๋ค์๊ณผ ๊ฐ์ด ALL ์ ํ์ฉํ ์ ์๋ค. 2๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ bsQty ๋ฐ์ดํฐ๋ค๋ณด๋ค ๋ชจ๋ ํฐ bsQty ๋ฅผ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ค.
clientNo 2๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ์ฃผ๋ฌธ์๋(bsQty) ๋ ๋ค์๊ณผ ๊ฐ๋ค.
SELECT BS.bsQty FROM bookdb.booksale BS WHERE BS.clientNo = '2'
ALL ์ ์ ์ฉํ๋ฉด bsQty ๊ฐ 2 ์ 5 ๋ณด๋ค ํฐ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ฒ ๋๋ค.-- 2๋ฒ ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ ๋์์ ์ต๊ณ ์ฃผ๋ฌธ์๋๋ณด๋ค ๋ ๋ง์ ๋์๋ฅผ ๊ตฌ์
ํ ๊ณ ๊ฐ์ ๊ณ ๊ฐ๋ฒํธ, ์ฃผ๋ฌธ๋ฒํธ, ์ฃผ๋ฌธ์๋ ์ถ๋ ฅ
SELECT BS.clientNo, BS.bsNo, BS.bsQty
FROM bookdb.booksale BS
WHERE BS.bsQty > ALL (SELECT BS.bsQty FROM bookdb.booksale BS WHERE BS.clientNo = '2');
SELECT์ ์ ์ฌ์ฉ- ๊ฒฐ๊ณผ ๊ฐ์ ๋จ์ผ ์ปฌ๋ผ์ ์ค์นผ๋ผ ๊ฐ์ผ๋ก ๋ฐํ
- ์ค์นผ๋ผ ๊ฐ์ด ๋ค์ด๊ฐ ์ ์๋ ๋ชจ๋ ๊ณณ์ ์ฌ์ฉ ๊ฐ๋ฅ
SELECT๋ฌธ๊ณผUPDATE SET๋ฌธ์ ์ฌ์ฉ
booksale ํ
์ด๋ธ์ clientNo ์ bookClient ํ
์ด๋ธ๊ณผ ๋น๊ตํ์ฌ clientName ์ SELECT ํด ์ด๋ฅผ AS ๊ณ ๊ฐ๋ช
์ผ๋ก ์ง์ ํ์๋ค.clientNo ์ ํด๋นํ๋ clientName ์ ํ๋์ ๊ฐ์ธ ์ค์นผ๋ผ ๊ฐ์ด๊ธฐ์ SELECT ๋ฌธ์์ ์ฌ์ฉํ ์ ์๋ค.SELECT clientNo AS '๊ณ ๊ฐ๋ฒํธ',
(SELECT clientName
FROM bookClient
WHERE bookClient.clientNo = bookSale.clientNo) AS '๊ณ ๊ฐ๋ช
',
sum(bsQty) AS '์ด์ฃผ๋ฌธ์๋'
FROM bookSale
GROUP BY clientNo;
- ์ถ๋ ฅ
FROM์ ์์ ์ฌ์ฉ- ํ ์ด๋ธ๋ช ๋์ ์ธ๋ผ์ธ ๋ทฐ ๋ถ์์ง์๋ฅผ ์ฌ์ฉ(๊ฐ์ํ ์ด๋ธ)
- ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๋ฐํ๋๋ ๋ฐ์ดํฐ๋ ๋ค์ค ํ, ๋ค์ค์ด์ด์ด๋ ์๊ดX
- ๊ฐ์ ๋ทฐ ํํ๋ก ์ ๊ณต
- ๊ฐ๋ฐ ์ค์ ๋ทฐ๊ฐ ํ์ํ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ทฐ๋ฅผ ์์ฑํ๋ฉด ๊ด๋ฆฌํ ์์ด ๋ง์ ํธ๋์ญ์ ๊ด๋ฆฌ๋ ์ฑ๋ฅ์ ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฒฝ์ฐ์ ์ฌ์ฉ
WHERE book.price >= 25000 ๋ก ์คํํ ์๋ ์์ง๋ง FROM ์ ์์ ํํฐ๋งํ ๋ชจ์ต์ด๋ค.-- ๋์ ๊ฐ๊ฒฉ์ด 25000์ ์ด์์ธ ๋์์ ๋ํ์ฌ ๋์๋ณ๋ก
-- ๋์๋ช
, ๋์๊ฐ๊ฒฉ, ์ดํ๋งค์๋, ์ดํ๋งค์ก ์ถ๋ ฅ (์ดํ๋งค์ก์ ๋ด๋ฆผ์ฐจ์)
SELECT B.bookName, B.bookPrice,
sum(bsQty) AS '์ด์ฃผ๋ฌธ๋',
sum(bookPrice * bsQty) AS '์ดํ๋งค์ก'
FROM (SELECT bookNo, bookName, bookPrice FROM book
WHERE bookPrice >= 25000) B, bookSale
WHERE B.bookNo = bookSale.bookNo
GROUP BY B.bookNo
ORDER BY ์ดํ๋งค์ก DESC;
- ์ถ๋ ฅ
WHERE์ ์ ์๋ธ์ฟผ๋ฆฌ (๊ฒฐ๊ณผ๋ฅผ ํ์ ํ๊ธฐ ์ํด ์ฌ์ฉ)- ๋ถ์์ง์ ๋๋ ํ์์ง์
- ํ ์ง์๋ฌธ ์์ ๋ค๋ฅธ ์ง์๋ฌธ์ด ์ค์ฒฉ(nested)
- ๋ค๋ฅธ ํ ์ด๋ธ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ก ํ์ฌ ํ ์ด๋ธ์ ์๋ ์ ๋ณด๋ฅผ ์ฐพ๊ฑฐ๋ ๊ฐ๊ณต ๋ชฉ์
clientName ์ด ํ๊ธธ๋ ์ธ ๊ณ ๊ฐ์ clientNo ๋ฅผ ์ฐพ์ bookSale ํ
์ด๋ธ์์ bsQty ๊ฐ์ ํฉ๊ณ๋ฅผ ๊ตฌํ๋ค.SELECT sum(bsQty)
FROM bookSale
WHERE clientNo =
(SELECT clientNo FROM bookClient WHERE clientName = 'ํ๊ธธ๋');