2023. 3. 2. 10:28ใDB
๋ชจ๋ ๊ฒ์๊ธ์ ๊ธ๋ฒํธ, ์์ฑ์
ํด๋น ๊ฒ์๊ธ์ ๋ฌ๋ฆฐ ๋๊ธ๋ฒํธ, ๋๊ธ ๋ด์ฉ, ๋๊ธ ์์ฑ์๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ
๊ฒ์๊ธ ๋ฒํธ ์์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
โผ์ดํ(EQUAL)์กฐ์ธ, ์ด๋(INNER)์กฐ์ธ
SELECT B.BOARD_NUM
, TITLE
, B.WRITER
, REPLY_NUM
, R.CONTENT
, R.WRITER
FROM BOARD B, BOARD_REPLY R
WHERE B.BOARD_NUM = R.BOARD_NUM
ORDER BY B.BOARD_NUM;
์ปฌ๋ผ๋ช ์ด ์ค๋ณต๋๋ฉด _๋ถ์ ํ ์์๋๋ก ๊ฐ์ ธ๊ฐ.
๋๊ธ ์๋งํผ ๊ฒ์๊ธ ๋ด์ฉ์ ๋ฐ๋ณตํด์ ๋์ด.
์ JOIN ์ฟผ๋ฆฌ๋ ๋๊ธ์ด ๋ฌ๋ฆฐ ๊ฒ์๊ธ๋ง ๋์ด > ๋๊ธ์ด ์ ๋ฌ๋ฆฐ ๊ฒ์๊ธ์ ์ ๋ณด๋ ์กฐํ X
๋๊ธ์ด ์๋ ๊ฒ์๊ธ์ ์ ๋ณด๋ ์กฐํํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ
โผ์์ฐํฐ(OUTER)์กฐ์ธ
SELECT B.BOARD_NUM
, TITLE
, B.WRITER
, REPLY_NUM
, R.CONTENT
, R.WRITER
FROM BOARD B, BOARD_REPLY R
WHERE B.BOARD_NUM = R.BOARD_NUM(+)
ORDER BY B.BOARD_NUM;
๋๊ธ์ด ์์ด์ ๊ฒ์๊ธ ์ ๋ณด๊ฐ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒ์๊ธ์ ๋ณด๋ ค๋ฉด ๋๊ธ ์ ๋ณด๊ฐ ๋ ํ์ํจ.
(+)๋ฅผ ํตํด ๋๊ธ ํ ์ด๋ธ์ ๊ธ๋ฒํธ์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์์ฒญ.
๊ฐ์
๋ ๋ชจ๋ ํ์์ด ์ด ๊ฒ์๊ธ์ ์ ๋ณด๋ฅผ ์กฐํ.
ํ์ ์์ด๋, ํ์๋ช
, ๊ทธ ํ์์ด ์์ฑํ ๊ฒ์๊ธ์ ๊ธ๋ฒํธ, ์ ๋ชฉ ์กฐํ
SELECT MEM_ID
, MEM_NAME
, BOARD_NUM
, TITLE
FROM BOARD_MEMBER M, BOARD B
WHERE M.MEM_ID = B.WRITER;
๊ฒ์๊ธ์ ๋ฑ๋กํ์ง ์์ ํ์์ ๋์ค์ง ์์.
โผ๋ชจ๋ ํ์์ ๊ฒ์๊ธ ๋ฑ๋ก์ ํ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ
SELECT MEM_ID
, MEM_NAME
, BOARD_NUM
, TITLE
FROM BOARD_MEMBER M, BOARD B
WHERE M.MEM_ID = B.WRITER(+);
ํ์์ ๊ฒ์๊ธ์ ์ ๋ณด๊ฐ ๋ถ์กฑํจ.
(+)๋ฅผ ํตํด BOARD ํ ์ด๋ธ์ ์์ฑ์์ ์ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์์ฒญ.
โผ์์(ANSI)์กฐ์ธ (์ค๋ฌด์์ ์ข ์ข ์)
- ์์ ์ดํ ์กฐ์ธ
ํ ์ด๋ธ์ ์ฐ๊ฒฐํ ๋ , ๋์ ์ INNER JOIN ํค์๋ ์ฌ์ฉ
JOIN์ ์ํ ์กฐ๊ฑด์ ์ WHERE ๋์ ON ์ฌ์ฉ
๊ทธ ์ธ ์กฐ๊ฑด์ WHERE์ ๊ทธ๋๋ก ์ฌ์ฉ
SELECT B.BOARD_NUM
, TITLE
, B.WRITER
, REPLY_NUM
, R.CONTENT
, R.WRITER
FROM BOARD B INNER JOIN BOARD_REPLY R
ON B.BOARD_NUM = R.BOARD_NUM
WHERE B.BOARD_NUM = 3
ORDER BY B.BOARD_NUM;
- ์์ ์์ฐํฐ ์กฐ์ธ
ํ ์ด๋ธ์ ์ฐ๊ฒฐํ ๋ , ๋์ ์ LEFT / RIGHT OUTER JOIN ํค์๋ ์ฌ์ฉ
ํค์๋์ LEFT : ์ผ์ชฝ ํ ์ด๋ธ ๊ธฐ์ค์ผ๋ก ์กฐํ (OUTER JOIN ํค์๋ ๊ธฐ์ค-ํ์)
์ ๋ณด ์์ฒญํ๋ (+) ๊ธฐํธ ์ ์จ๋ ๋จ.
JOIN์ ์ํ ์กฐ๊ฑด์ ์ WHERE ๋์ ON ์ฌ์ฉ
SELECT MEM_ID
, MEM_NAME
, BOARD_NUM
, TITLE
FROM BOARD_MEMBER M LEFT OUTER JOIN BOARD B
ON M.MEM_ID = B.WRITER;
โผํ ์ด๋ธ 3๊ฐ ์กฐ์ธ
๊ฒ์๊ธ ๋ฒํธ, ๊ฒ์๊ธ ์ ๋ชฉ, ํด๋น ๊ฒ์๊ธ์ ์์ฑํ ์์ฑ์ ID, ์์ฑ์๋ช
,
ํด๋น ๊ฒ์๊ธ์ ์์ฑ๋ ๋๊ธ ๋ฒํธ, ๋๊ธ ๋ด์ฉ์ ์กฐํํ๋ ์ฟผ๋ฆฌ
SELECT B.BOARD_NUM
, TITLE
, MEM_ID
, MEM_NAME
, REPLY_NUM
, R.CONTENT
FROM BOARD_MEMBER M, BOARD B, BOARD_REPLY R
WHERE M.MEM_ID = B.WRITER
AND B.BOARD_NUM = R.BOARD_NUM;
ํ ์ด๋ธ๋ผ๋ฆฌ ์ฐ๊ฒฐํ ๋ 3๊ฐ ๋์์ ์ฐ๊ฒฐ X ๊ฐ๊ฐ ํ๋์ฉ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋จ.
โผ์์ ์ด๋ ์กฐ์ธ ํ ์ด๋ธ 3๊ฐ ์กฐํ
๋จผ์ ๋๊ฐ์ ํ ์ด๋ธ ์กฐ์ธ ์์ฑ ํ ๋ค๋ฅธ ํ ์ด๋ธ ๋๊ฐ ์กฐ์ธ
์ฌ๋ฌ ํ ์ด๋ธ ์กฐํ ์ ํค์๋ INNER JOIN - ON์ ์ด ์ค๊ฐ์ ๊ณ์ ๋ค์ด์จ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ.
SELECT B.BOARD_NUM
, TITLE
, MEM_ID
, MEM_NAME
, REPLY_NUM
, R.CONTENT
FROM BOARD_MEMBER M INNER JOIN BOARD B
ON M.MEM_ID = B.WRITER
INNER JOIN BOARD_REPLY R
ON B.BOARD_NUM = R.BOARD_NUM;
'DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SELECT ๊ทธ๋ฃน ํจ์ (0) | 2023.04.13 |
---|---|
subquery (0) | 2023.03.03 |
โ select-join (0) | 2023.02.27 |
๋ง์ด ์ฐ๋ ํจ์ (0) | 2023.02.23 |
์น ๊ฐ๋ฐ ์ค์ต ํ์ ๊ด๋ฆฌ (Mybatis) (0) | 2023.02.22 |