์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
[54] 230316 SQL Ch 5. ์ง๊ณ์ ์๋ธ์ฟผ๋ฆฌ: 23๊ฐ ์๋ธ์ฟผ๋ฆฌ, 24๊ฐ ์๊ด ์๋ธ์ฟผ๋ฆฌ [K-๋์งํธ ํธ๋ ์ด๋ 54์ผ] ๋ณธ๋ฌธ
[54] 230316 SQL Ch 5. ์ง๊ณ์ ์๋ธ์ฟผ๋ฆฌ: 23๊ฐ ์๋ธ์ฟผ๋ฆฌ, 24๊ฐ ์๊ด ์๋ธ์ฟผ๋ฆฌ [K-๋์งํธ ํธ๋ ์ด๋ 54์ผ]
yjyuwisely 2023. 3. 16. 10:23230316 Thu 54th class
Ch 5. ์ง๊ณ์ ์๋ธ์ฟผ๋ฆฌ
์ง๋: p. 216 ~ (๊ต์ฌ: SQL ์ฒซ๊ฑธ์, ์ ์: ์์ฌ์ด ์์ธ ์)
MySQL Workbench Manual: https://dev.mysql.com/doc/workbench/en/
MySQL ํํ ๋ฆฌ์ผ: https://www.tutorialspoint.com/mysql/
SQLD ์์ฝ pdf: https://yurimac.tistory.com/40
์ฑ
์์ฝ (9p) pdf: https://brunch.co.kr/@ydy702/10
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
์์ฝ
์๋ธ์ฟผ๋ฆฌ (sub query)
์ฟผ๋ฆฌ ์์ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑ
(select ๊ตฌ๋ฌธ)
์๋ธ์ฟผ๋ฆฌ์ ์ข
๋ฅ
1. ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ (Scalar Subquery) p. 210
์ฃผ๋ก SELECT ์ ์ ์์นํ์ง๋ง ์ปฌ๋ผ์ด ์ฌ ์ ์๋ ๋๋ถ๋ถ ์์น์ ์ฌ์ฉํ ์ ์๋ค.
์ปฌ๋ผ ๋์ ์ฌ์ฉ๋๋ฏ๋ก ๋ฐ๋์ ํ๋์ ๊ฐ๋ง์ ๋ฐํํด์ผ ํ๋ค.
select (select * from ํ
์ด๋ธ๋ช
) from ํ
์ด๋ธ๋ช
select (select * from ํ
์ด๋ธ๋ช
) from ํ
์ด๋ธ๋ช
2. ์ค์ฒฉ ์๋ธ์ฟผ๋ฆฌ (Nested Subquery) p. 206
WHERE ์ , HAVING ์ ์ ์ฌ์ฉํ ์ ์๋ค.
select * from ํ
์ด๋ธ๋ช
where ์ด๋ช
= (select * from ํ
์ด๋ธ๋ช
)
select * from ํ
์ด๋ธ๋ช
where ์ด๋ช
= (select * from ํ
์ด๋ธ๋ช
)
2.1 ๋จ์ผํ (Single Row) ์๋ธ์ฟผ๋ฆฌ =
๋จ์ผ ํ ๋น๊ต ์ฐ์ฐ์: =, <, >, <> (๊ฐ์ง ์์) ๋ฑ
์๋ธ์ฟผ๋ฆฌ๊ฐ 1๊ฑด ์ดํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
where ์ด๋ช
= (select * from ํ
์ด๋ธ๋ช
)
๊ฒฐ๊ณผ๊ฐ ํ๋๋ง ๋์จ๋ค.
2.2 ๋ค์คํ (Multi Row) ์๋ธ์ฟผ๋ฆฌ IN, ANY, ALL
๋ค์ค ํ ๋น๊ต ์ฐ์ฐ์: IN, ALL, ANY, SOME, EXITS
์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ๋ฌ ๊ฑด์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค.
๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ ๊ฐ๋ค.
IN: OR (๊ฐ์ ๊ฒ์ ๋ํด ๋น๊ต)
ANY: OR (ํฌ๊ธฐ ๋น๊ต)
ALL: AND
IN : ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋น๊ต์กฐ๊ฑด์ด ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค์์ ํ๋๋ผ๋ ์ผ์นํ๋ฉด ์ฐธ
์๋ธ์ฟผ๋ฆฌ ์ถ๋ ฅ๊ฒฐ๊ณผ์ ํ๋๋ผ๋ ์ผ์นํ๋ฉด ์ฐธ์ด ๋๋ค.
ANY, SOME : ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋น๊ต์กฐ๊ฑด์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒ์๊ฒฐ๊ณผ์ ํ๋ ์ด์ ์ผ์นํ๋ฉด ์ฐธ
ALL : ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋น๊ต์กฐ๊ฑด์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒ์๊ฒฐ๊ณผ์ ๋ชจ๋ ์ผ์นํ๋ฉด ์ฐธ
EXIST : ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋น๊ต์กฐ๊ฑด์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์ค ๋ง์กฑํ๋ ๊ฐ์ด ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ์ฐธ
where ์ด๋ช
IN (select * from ํ
์ด๋ธ๋ช
)
์ฐธ๊ณ : https://mainichibenkyo.tistory.com/75
2.3 ๋ค์ค ์ปฌ๋ผ (Multi Column) ์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ๋ฌ ์ปฌ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํ
3. ์ธ๋ผ์ธ ๋ทฐ (Inline View) (*asํค์๋๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์์ ํ
์ด๋ธ๋ช
์ ๋ฐ๋์ ๊ผญ ์ ์ธํด์ผ ํ๋ค.*) p. 212
FROM ์ ๋ฑ ํ
์ด๋ธ๋ช
์ด ์ฌ ์ ์๋ ์์น์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
select * from (select * from ํ
์ด๋ธ๋ช
) as ๊ฐ์ํ
์ด๋ธ๋ช
select * from (select * from ํ
์ด๋ธ๋ช
) as ๊ฐ์ํ
์ด๋ธ๋ช
5์ฅ ์ง๊ณ์ ์๋ธ์ฟผ๋ฆฌ
์ฑ ์ ๋ชฉ์ฐจ
__20๊ฐ__ํ ๊ฐ์ ๊ตฌํ๊ธฐ - COUNT
1. COUNT๋ก ํ ๊ฐ์ ๊ตฌํ๊ธฐ
2. ์ง๊ณํจ์์ NULL๊ฐ
3. DISCOUNT๋ก ์ค๋ณต ์ ๊ฑฐ
4. ์ง๊ณํจ์์์ DISTINCT
__21๊ฐ__COUNT ์ด์ธ์ ์ง๊ณํจ์
1. SUM์ผ๋ก ํฉ๊ณ ๊ตฌํ๊ธฐ
2. AVG๋ก ํ๊ท ๋ด๊ธฐ
3. MIN, MAX๋ก ์ต์๊ฐ, ์ต๋๊ฐ ๊ตฌํ๊ธฐ
__22๊ฐ__๊ทธ๋ฃนํ - GROUP BY
1. GROUP BY๋ก ๊ทธ๋ฃนํ
2. HAVING ๊ตฌ๋ก ์กฐ๊ฑด ์ง์
3. ๋ณต์์ด์ ๊ทธ๋ฃนํ
4. ๊ฒฐ๊ด๊ฐ ์ ๋ ฌ
__23๊ฐ__์๋ธ์ฟผ๋ฆฌ
1. DELETE์ WHERE ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
2. ์ค์นผ๋ผ ๊ฐ
3. SELECT ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
4. SET ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
5. FROM ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
6. INSERT ๋ช ๋ น๊ณผ ์๋ธ์ฟผ๋ฆฌ
__24๊ฐ__์๊ด ์๋ธ์ฟผ๋ฆฌ
1. EXISTS
2. NOT EXISTS
3. ์๊ด ์๋ธ์ฟผ๋ฆฌ
4. IN
23๊ฐ ์๋ธ์ฟผ๋ฆฌ p. 204
์๋ธ์ฟผ๋ฆฌ (sub query)
์ฟผ๋ฆฌ ์์ ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฅผ ์์ฑ
(select ๊ตฌ๋ฌธ)
์๋ธ์ฟผ๋ฆฌ์ ์ข ๋ฅ
1. ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ p. 210
select (select * from ํ ์ด๋ธ๋ช ) from ํ ์ด๋ธ๋ช
2. ์ค์ฒฉ ์๋ธ์ฟผ๋ฆฌ p. 206
select * from ํ ์ด๋ธ๋ช where ์ด๋ช = (select * from ํ ์ด๋ธ๋ช )
3. ์ธ๋ผ์ธ๋ทฐ (asํค์๋๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์์ ํ ์ด๋ธ๋ช ์ ๋ฐ๋์ ๊ผญ ์ ์ธํด์ผ ํ๋ค.) p. 212
select * from (select * from ํ ์ด๋ธ๋ช ) as ๊ฐ์ํ ์ด๋ธ๋ช
์๋ธ์ฟผ๋ฆฌ
(SELECT ๋ช
๋ น)
์๋ธ ์ฟผ๋ฆฌ: SQL ํ๋์ ๋ฌธ์์ ํฌํจ๋์ด ์๋ ๋ ๋ค๋ฅธ SQL๋ฌธ, ์๋ ค์ง์ง ์์ ๊ธฐ์ค์ ์ด์ฉํ ๊ฒ์์ ์ฌ์ฉ.
- ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ดํธ๋ก ๊ฐ์ธ์ ์ฌ์ฉํ๋ค.
- ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผ ํ ๋๋ ๋ณต์ ํ ๋น๊ต ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅํ๋ค ๋จ์ผ ํ ๋น๊ต ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ 1๊ฑด ์ดํ์ฌ์ผ ํ๊ณ ๋ณต์ ํ ๋น๊ต ์ฐ์ฐ์๋ ๊ฒฐ๊ณผ ๊ฑด์์ ์๊ด์๋ค.
- ORDER BY ์๋ธ์ฟผ๋ฆฌ์์๋ ๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋ค.
- SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT-VALUES, UPDATE-SET ์ ์ ์ฌ์ฉ ๊ฐ๋ฅ
23.1 DELETE์ WHERE ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
์์ 5-16) sample54 ํ ์ด๋ธ
SELECT * FROM sample54;
์์ 5-17) sample54์์ a์ ์ต์๊ฐ ๊ฒ์ํ๊ธฐ
SELECT MIN(a) FROM sample54;
์์ 5-18) ์ต์๊ฐ์ ๊ฐ์ง๋ ํ ์ญ์ ํ๊ธฐ p. 206
[2. ์๋ธ์ฟผ๋ฆฌ]
-- sample54 ํ
์ด๋ธ์์ a์ด์ ๊ฐ์ด 20์ธ ๋ฐ์ดํฐ์ ํ์ ์ญ์ ํ๋ผ
delete from sample54 where a = 20;
-- sample54 ํ
์ด๋ธ์์ a์ด์ ๊ฐ์ด ์ต์๊ฐ์ธ ๋ฐ์ดํฐ์ ํ์ ์ญ์ ํ๋ผ
-- delete from sample54 where a์ด์ ๊ฐ์ด ์ต์๊ฐ
-- sample54ํ
์ด๋ธ์์ a์ด์ ๊ฐ์ด ์ต์๊ฐ
select min(a) from sample54;
-- ๊ดํธ๋ก ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ง์ ํด ์ญ์
DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM sample54);
SELECT * FROM sample54;
MySQL์์๋ ์ ์ฝ๋๊ฐ ์ค๋ฅ๊ฐ ๋๋ฏ๋ก ์๋ ์ฝ๋๋ก ์คํ์ด ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ฐฑ์ ํ ๊ฒฝ์ฐ ๋์ผํ ํ
์ด๋ธ์ ์๋ธ์ฟผ๋ฆฌ์์ ์ฌ์ฉํ ์ ์๋๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํด๊ฒฐ๋ฒ 1) ์ธ๋ผ์ธ ๋ทฐ๋ก ์์ ํ
์ด๋ธ์ ๋ง๋ค๋๋ก ์ฒ๋ฆฌํ๋ค.
-- ์ธ๋ผ์ธ๋ทฐ (asํค์๋๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์์ ํ
์ด๋ธ๋ช
์ ๋ฐ๋์ ๊ผญ ์ ์ธํด์ผ ํ๋ค.)
select *
from (select * from ํ
์ด๋ธ๋ช
) as ๊ฐ์ํ
์ด๋ธ๋ช
DELETE FROM sample54 WHERE a = (SELECT a
FROM (SELECT Min(a) AS a FROM sample54) AS x);
-- (SELECT Min(a) AS a FROM sample54): ์ธ๋ผ์ธ ๋ทฐ
ํด๊ฒฐ๋ฒ 2)
COLUMN: ํด๋ผ์ด์ธํธ ๋ณ์
MySQL ํด๋ผ์ด์ธํธ์ ํํด ๊ตฌํํ ์ ์๋ค.
@a: ๋ณ์, set: ๋ณ์์ ๋์
ํ๋ ๋ช
๋ น
set @a = (SELECT MIN(a) FROM sample54);
DELETE FROM sample54 WHERE a = @a;
23.2 ์ค์นผ๋ผ ๊ฐ p. 207
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ: ํ ํ, ํ ์นผ๋ผ๋ง์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ
์์ 5-19) ์๋ธ์ฟผ๋ฆฌ์ ํจํด
ํจํด 1: ํ๋์ ๊ฐ์ ๋ฐํํ๋ ํจํด = ์ค์นผ๋ผ ๊ฐ
SELECT MIN(a) FROM sample54;
ํจํด 2: ๋ณต์์ ํ์ด ๋ฐํ๋์ง๋ง ์ด์ ํ๋์ธ ํจํด [๋ณต์์ ํ / ํ๋์ ์ด ๋ฐํ]
SELECT no FROM sample54;
ํจํด 3: ํ๋์ ํ์ด ๋ฐํ๋์ง๋ง ์ด์ด ๋ณต์์ธ ํจํด [ํ๋์ ํ / ๋ณต์์ ์ด ๋ฐํ]
SELECT MIN(a), Max(no) FROM sample54;
ํจํด 4: ๋ณต์์ ํ, ๋ณต์์ ์ด์ด ๋ฐํ๋๋ ํจํด [๋ณต์์ ํ / ๋ณต์์ ์ด ๋ฐํ]
SELECT no, a FROM sample54;
Point: SELECT ๋ช
๋ น์ด ํ๋์ ๊ฐ๋ง ๋ฐํํ๋ ๊ฒ์ '์ค์นผ๋ผ ๊ฐ์ ๋ฐํํ๋ค'๊ณ ํ๋ค.
Point: = ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๋น๊ตํ ๊ฒฝ์ฐ์๋ ์ค์นผ๋ผ ๊ฐ๋ผ๋ฆฌ ๋น๊ตํ ํ์๊ฐ ์๋ค.
23.3 SELECT ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
์์ 5-20์ SELECT ๊ตฌ์์ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํด๋ณธ๋ค.
์์ 5-20) SELECT ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ p. 210
[1. ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ]
SELECT
(SELECT COUNT(*) FROM sample51) AS sql1,
(SELECT COUNT(*) FROM sample54) AS sql2;
DBMS๋ ์์ค๊ณผ ๋ค๋ฅด๊ฒ ๊ฐ์ ์ค์ ๋ค ํํ์ด ๋๋ ๊ฒ์ด ์๋๋ค.
ํ ์ค์ ํ ๊ฐ๋ง ๋ค์ด๊ฐ๋ค = ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ
์์ 5-21) SELECT ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ (Oracle์ ๊ฒฝ์ฐ)
SELECT
(SELECT COUNT(*) FROM sample51) AS sql1,
(SELECT COUNT(*) FROM sample54) AS sql2 FROM DUAL;
23.4 SET ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
์์ 5-22) SET ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
MySQL์์๋ ์ ๋๋ค.
UPDATE sample54 SET a = (SELECT MAX(a) FROM sample54);
์์ ๋ ์ฝ๋)
update sample54
set a = (select a from (select max(a) as a from sample54) as x);
SELECT * FROM sample54;
23.5 FROM ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ (์ธ๋ผ์ธ ๋ทฐ)
์ธ๋ผ์ธ ๋ทฐ: FROM ์ ์์ ์ฌ์ฉ๋๋ ์๋ธ์ฟผ๋ฆฌ. ORDER BY๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅ
๊ฒ์ํ ํ์ด์ง ์ฒ๋ฆฌ ๋ ์ด๋ค.
limit, offset์ ๊ฒฝ์ฐ mySQL์๋ง ์๋ค.
์์ 5-23) FROM ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
sq = ๊ฐ์์ ํ
์ด๋ธ
SELECT * FROM (SELECT * FROM sample54) sq;
์์ 5-24) FROM ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ (AS๋ก ์ง์ ) p. 212
[3. ์ธ๋ผ์ธ๋ทฐ (*as ํค์๋๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์์ ํ
์ด๋ธ๋ช
์ ๋ฐ๋์ ๊ผญ ์ ์ธํด์ผ ํ๋ค.)]
SELECT * FROM (SELECT * FROM sample54) AS sq;
์์ 5-25) FROM ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ (3๋จ๊ณ)
SELECT * FROM (SELECT * FROM (SELECT * FROM sample54) sq1) sq2;
- ์ค์ ์
๋ฌด์์ FROM ๊ตฌ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ง์ ํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
์์ 6-26) Oracle์์ LIMIT ๊ตฌ์ ๋์ฒด ๋ช
๋ น
SELECT * FROM (
SELECT * FROM sample54 ORDER BY a DESC
) sq
WHERE ROWNUM <= 2;
sample54 | |||
no | a | ||
@rownum:=0 @rownum(๋ณ์)๋ฅผ 0์ผ๋ก ์ด๊ธฐํํ๋ค. int rownum = 0 (Java) mySQL์์๋ @๋ฅผ ๋ถ์ธ๋ค. |
1 | 900 | |
2 | 900 | ||
3 | 900 |
select @rownum:=@rownum + 1 rownum, no, a -- @rownum: ๋ณ์ ํธ์ถ -- +1: ์ฐจ์ด๊ฐ
from sample54,
(select @rownum:=0) tmp -- @rownum:=0: ๋ณ์ ์ ์ธ, ์์์ ํ
์ด๋ธ๋ช
์ ์ค๋ค. Aliases
;
๊ต์ฌ p. 111 ์ฐธ๊ณ
๊ฒ์ํ | board | |||||
ROWNUM | no | title | content | regdate | writer | count |
1 | 1 | ์ ๋ชฉ1 | ๋ด์ฉ1 | 2023-03-15 | ์ ์๋ฐ | 1 |
์ค๊ฐ์ ๊ธ ์ญ์ ๋จ | ||||||
10 | 12 |
1~10, 11~20, 21~30์ฒ๋ผ 10๋จ์์ฉ 1 page, 2 page, 3 page๊ฐ ๋๋ค.
1PAGE | NO | |
1 | 10 | |
2PAGE | NO | |
11 | 20 | |
3PAGE | NO | |
21 | 30 |
๋ง์ฝ ๊ธ ํ๋๋ฅผ ์ญ์ ๋ฅผ ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
∴ ROWNUM์ด ํ์ํ๋ค.
1PAGE | ROWNUM | |
1 | 10 | |
2PAGE | ROWNUM | |
11 | 20 | |
3PAGE | ROWNUM |
|
21 | 30 |
23.6 INSERT ๋ช ๋ น๊ณผ ์๋ธ์ฟผ๋ฆฌ
์์ 5-27) VALUES ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
VALUES ๊ตฌ์ ๊ฐ์ผ๋ก ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์
INSERT INTO sample541 VALUES(
(SELECT COUNT(*) FROM sample51),
(SELECT COUNT(*) FROM sample54)
);
SELECT * FROM sample541;
- INSERT SELECT
์์ 5-28) SELECT ๊ฒฐ๊ณผ๋ฅผ INSERTํ๊ธฐ
INSERT INTO sample541 SELECT 1, 2;
SELECT * FROM sample541;
์๋์ ์ฝ๋์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค.
INSERT INTO sample541 VALUES (1, 2)
์ด ๊ตฌ์ฑ์ด ๋๊ฐ์ ํ
์ด๋ธ ์ฌ์ด์๋ INSERT SELECT ๋ช
๋ น์ผ๋ก ํ์ ๋ณต์ฌํ ์ ์๋ค.
์์ 5-22) ํ
์ด๋ธ์ ํ ๋ณต์ฌํ๊ธฐ
INSERT INTO sample542 SELECT * FROM sample541;
24๊ฐ ์๊ด ์๋ธ์ฟผ๋ฆฌ p. 216
์๋ธ์ฟผ๋ฆฌ์ ์ผ์ข ์ธ '์๊ด ์๋ธ์ฟผ๋ฆฌ'๋ฅผ EXITS ์ ์ด๋ก ์กฐํฉ์์ผ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ดํด ์์๋ณธ๋ค.
exists
select ํ์ ๋ ๊ทธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์๋์ง๋ฅผ ํ๋ณํ ๋
์ถ๊ฐํ๋ ค๋ ๋ฐ์ดํฐ๊ฐ ํ ์ด๋ธ์ ์๋์ง๋ฅผ ํ๋ณํด์
์์ผ๋ฉด insert
์์ผ๋ฉด update
UPDATE sample551 SET a = '์์' WHERE EXISTS (
SELECT * FROM sample552 WHERE no2 = no -- ์๋ธ์ฟผ๋ฆฌ, no: sample551์ no ์ด
);
-- no2์ a์ด ๊ฐ๊ณผ no์ a์ด ๊ฐ์ด ๊ฐ์ผ๋ฉด a๋ฅผ '์์'์ผ๋ก ๋ฐ๊พผ๋ค.
EXITS
EXISTS (SELECT๋ช
๋ น)
The EXISTS operator is used to test for the existence of any record in a subquery.
The EXISTS operator returns TRUE if the subquery returns one or more records.
24.1 EXISTS (์กด์ฌํ๋ฉด)
์์ 5-30) sample551 ํ ์ด๋ธ๊ณผ sample552 ํ ์ด๋ธ
SELECT * FROM sample551;
SELECT * FROM sample552;
์์ 5-30) sample551 ํ ์ด๋ธ๊ณผ sample552 ํ ์ด๋ธ
-- sample551ํ
์ด๋ธ์ a์ด ๊ฐ์ด sample552ํ
์ด๋ธ์ a2์ด์ ์กด์ฌํ๋ฉด
UPDATE sample551 SET a = '์์' WHERE
EXISTS (SELECT * FROM sample552 WHERE no2 = no);
SELECT * FROM sample551;
24.2 NOT EXISTS
์์ 5-32) NOT EXISTS๋ฅผ ์ฌ์ฉํด '์์'์ผ๋ก ๊ฐฑ์ ํ๊ธฐ
UPDATE sample551 SET a = '์์' WHERE
NOT EXISTS (SELECT * FROM sample552 WHERE no2 = no);
SELECT * FROM sample551;
24.3 ์๊ด ์๋ธ์ฟผ๋ฆฌ
๋ถ๋ชจ ๋ช
๋ น๊ณผ ์์์ธ ์๋ธ์ฟผ๋ฆฌ๊ฐ ํน์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ '์๊ด ์๋ธ์ฟผ๋ฆฌ'๋ผ ๋ถ๋ฅธ๋ค.
์๊ด ์๋ธ์ฟผ๋ฆฌ์์๋ ๋ถ๋ชจ ๋ช
๋ น๊ณผ ์ฐ๊ด๋์ด ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์๋ธ์ฟผ๋ฆฌ ๋ถ๋ถ๋ง์ ๋ฐ๋ก ๋ผ์ด๋ด์ด ์คํ์ํฌ ์ ์๋ค.
UPDATE sample551 SET a = '์์' WHERE
EXISTS (SELECT * FROM sample552 WHERE no2 = no);
SELECT * FROM sample552 WHERE no2 = no;
-- ->์๋ฌ: no2๊ฐ ๋ถ๋ช
ํํ๋ค.
- ํ
์ด๋ธ๋ช
๋ถ์ด๊ธฐ
์์ชฝ ํ
์ด๋ธ ๋ชจ๋ ๊ฐ์ ์ด๋ฆ์ ์ด๋ก ๋์ด์๋ค๋ฉด ์ ๋์ํ์ง ์๋๋ค.
์์ 5-33) ์ด์ ํ
์ด๋ธ๋ช
๋ถ์ด๊ธฐ
์ด๋ช
์์ 'ํ
์ด๋ธ๋ช
.'์ ๋ถ์ธ๋ค.
sample552.no2
sample551.no
์๋ ์ฝ๋๋ ๋ฌธ์ ์์ด ์คํํ ์ ์๋ค.
UPDATE sample551 SET a = '์์' WHERE
EXISTS (SELECT * FROM sample552 WHERE sample552.no2 = sample551.no);
24.4 IN (์ด๋ช IN (์งํฉ)) p. 221
IN์ฐ์ฐ์
WHERE ์กฐ๊ฑด์ OR ์กฐ๊ฑด์
WHERE IN (์กฐ๊ฑด์, ์กฐ๊ฑด์)
IN์ ์ฌ์ฉํ๋ฉด ์งํฉ ์์ ๊ฐ์ด ์กด์ฌํ๋์ง๋ฅผ ์กฐ์ฌํ ์ ์๋ค.
IN
์ด๋ช
IN(์งํฉ)
IN์์๋ ์ค๋ฅธ์ชฝ์ ์งํฉ์ ์ง์ ํ๋ค. ์ผ์ชฝ์ ์ง์ ๋ ๊ฐ๊ณผ ๊ฐ์ ๊ฐ์ด ์งํฉ ์์ ์กด์ฌํ๋ฉด ์ฐธ์ ๋ฐํํ๋ค.
OR๋ก ๊ธฐ์ ํ์ ๋์ ๋ณ ์ฐจ์ด๊ฐ ์๋ ๊ฒ ๊ฐ์ง๋ง, ๊ฐ์ ์ฌ๋ฌ๊ฐ ์ง์ ํ ๊ฒฝ์ฐ์๋ ์กฐ๊ฑด์์ด ์๋นํ ๊น๋ํด์ง๋ค.
์์ 5-34) IN์ ์ฌ์ฉํด ์กฐ๊ฑด์ ๊ธฐ์
SELECT * FROM sample551 WHERE no IN(3, 5);
์ง์ ๋ ๊ฐ์ด ๋ฐํ๋๋ค. ํ ์ด๋ธ sample551์ no์ด์ ์๋ ๊ฐ์ ๋ฃ์ด๋ ์๋ ๊ฐ๋ง ๋ฐํ๋๋ค.
์์ 5-35) IN์ ์ค๋ฅธ์ชฝ์ ์๋ธ์ฟผ๋ฆฌ๋ก ์ง์ ํ๊ธฐ
SELECT * FROM sample551 WHERE no IN
(SELECT no2 FROM sample552)
- IN๊ณผ NULL
IN์์๋ ์งํฉ ์์ NULL ๊ฐ์ด ์์ด๋ ๋ฌด์ํ์ง๋ ์๋๋ค. NULL์ ๋น๊ตํ ๋๋ IS NULL์ ์ฌ์ฉํด์ผ ํ๋ค.
MySQL์์ ์งํฉ์ NULL์ด ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ, ์กฐ๊ฑด์ IN์ ์ผ์ชฝ ๊ฐ์ด ์งํฉ์ ํฌํจ๋์ด ์์ผ๋ฉด ์ฐธ์, ๊ทธ๋ ์ง ์์ผ๋ฉด NULL์ ๋ฐํํ๋ค. ์กฐ๊ฑด์ NOT IN์ ์ผ์ชฝ ๊ฐ์ด ์งํฉ์ ํฌํจ๋์ด ์์ผ๋ฉด ๊ฑฐ์ง์, ๊ทธ๋ ์ง ์์ผ๋ฉด NULL์ ๋ฐํํ๋ค.
NULL์ ๋ฐํํ๋ค: ๋น๊ต๋ฅผ ํ ์ ์๋ค๋ ์๋ฏธ์ด๋ค.