โ˜…select-join2

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