ultra_dev
SQL -3 ๋ณธ๋ฌธ
- ์กฐ์ธ์ด๋๐ก ๋๊ฐ์ ํ
์ด๋ธ์ ์๋ก ๋ฌถ์ด์ ํ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ด๋ ๊ฒ
- ํ์ ํ ์ด๋ธ(์ด๋ฆ, ์ฃผ์, ์ ํ๋ฒํธ… ), ๊ตฌ๋งค ํ ์ด๋ธ(๋ฌผ๊ฑด, ๊ฐ๊ฒฉ…)
- ๋ ํ ์ด๋ธ์ ์ฎ์ด์ ํ๋์ ๋ฐฐ์ก์ ์ํ ์ ๋ณด(์ด๋ฆ, ์ฃผ์, ๋ฌผ๊ฑด)๋ฅผ ์ถ์ถํ๋ ๊ฒ์ด ๋ํ์ ์ธ ์กฐ์ธ
- ๋ด๋ถ ์กฐ์ธ (Inner join) ๋ ํ
์ด๋ธ์ ์ฐ๊ฒฐํ ๋ ๋ด๋ถ ์กฐ์ธ์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋จ.
- ๋ด๋ถ ์กฐ์ธ์ ํ์
- SELECT <์ด ๋ชฉ๋ก> FROM <์ฒซ ๋ฒ์งธ ํ
์ด๋ธ> INNER JOIN <๋ ๋ฒ์งธ ํ
์ด๋ธ> -- INNER JOIN์ 'INNER' ์๋ต๊ฐ๋ฅ ON <์กฐ์ธ๋ ์กฐ๊ฑด> [WHERE ๊ฒ์ ์กฐ๊ฑด]
- SQL ๋ธ๋ํํฌ(BLK)๊ฐ ๊ตฌ๋งคํ ๋ฌผ๊ฑด์ ๋ชฉ๋ก์ ํ์์ ๋ณด๊น์ง ํฉ์ณ์ ๋ณด๋ ค๋ฉด?
- SELECT * FROM buy JOIN member ON buy.mem_id = member.mem_id WHERE buy.mem_id = 'BLK';
- ๊ฐ ํ์์ ๊ตฌ๋งค๋ฅผ ์ฌ๋ฌ๋ฒ ํ ์ ์์
- ๋ธ๋ํํฌ(BLK)๋ ํ์ํ ์ด๋ธ์๋ 1๊ฐ, ๊ตฌ๋งคํ ์ด๋ธ์๋ ์ฌ๋ฌ๊ฐ๊ฐ ์์ (์ผ๋๋ค ๊ด๊ณ)
- ํ์ ํ ์ด๋ธ์ PK๊ฐ ๊ตฌ๋งคํ ์ด๋ธ์ FK๋ก ๋ค์ด๊ฐ ์์ - ๋ด๋ถ ์กฐ์ธ์ ๊ฐ๊ฒฐํ ํํ
- SELECT buy.mem_id, member.mem_name, buy.prod_name, member.addr FROM buy JOIN member ON buy.mem_id = member.mem_id;
- ๋ด๋ถ์กฐ์ธ์ ๊ตฌ๋งคํ ๊ธฐ๋ก์ด ์๋ ํ์๋ค๋ง ์ถ๋ ฅ๋จ
- ๊ตฌ๋งค ํ ์ด๋ธ์ ์๋ ์ ์ฒด ํ์๋ค๊น์ง ์ถ๋ ฅํ๊ณ ์ถ์ผ๋ฉด ์ธ๋ถ ์กฐ์ธ์ ์ฌ์ฉํด์ผ ํจ
- ์ธ๋ถ ์กฐ์ธ (outer join)
- ์ธ๋ถ ์กฐ์ธ์ ๋ ํ ์ด๋ธ์ ์กฐ์ธํ ๋ ํ์ํ ๋ด์ฉ์ด ํ์ชฝ ํ ์ด๋ธ์๋ง ์์ด๋ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ถํ ์ ์์
- ์ธ๋ถ ์กฐ์ธ์ ํ์
- outer ์๋ต ๊ฐ๋ฅ
A LEFT OUTER JOIN B
=> A,B ํ
์ด๋ธ ๊ฐ ์กฐ์ธ ์กฐ๊ฑด์ด ๋ง์ง ์๋ A, B์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ ์ค A ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ ๋ฌด์กฐ๊ฑด ๊ฒฐ๊ณผ๊ฐ์ ํฌํจ๋์ด ๋์ด
=> A๋ฅผ ๋ค ๊ฐ์ ธ์์ ๋, B ํ
์ด๋ธ์์ ๊ฐ์ ธ์จ ์ปฌ๋ผ์ ํด๋นํ๋ ๊ฐ์ด ์์ผ๋ฉด NULL ๊ฐ์ผ๋ก ์ฑ์
A RIGHT OUTER JOIN B
=> A,B ํ
์ด๋ธ ๊ฐ ์กฐ์ธ ์กฐ๊ฑด์ด ๋ง์ง ์๋ A, B์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ ์ค B ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ ๋ฌด์กฐ๊ฑด ๊ฒฐ๊ณผ๊ฐ์ ํฌํจ๋์ด ๋์ด
=> B๋ฅผ ๋ค ๊ฐ์ ธ์์ ๋, A ํ
์ด๋ธ์์ ๊ฐ์ ธ์จ ์ปฌ๋ผ์ ํด๋นํ๋ ๊ฐ์ด ์์ผ๋ฉด NULL ๊ฐ์ผ๋ก ์ฑ์
- ์ธ๋ถ ์กฐ์ธ์ ํ์ฉ
- prod_name ์ด NULL์ธ ํ์์ ์์ง ๊ตฌ๋งคํ ์ด๋ ฅ์ด ํ๋ฒ๋ ์๋ ํ์
์ค์ ์ํฉ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ด๋ฌํ ํ์์ ์ถ์ถํด ๊ตฌ๋งค ์ด์ง ์ด๋ฉ์ผ ๋ฑ์ ๋ณด๋ผ์๊ฐ ์์
- ํ์ ๊ฐ์ ๋ง ํ๊ณ ํ๋ฒ๋ ๊ตฌ๋งคํ์ ์ด ์๋ ํ์์ ๋ชฉ๋ก์ ์ถ์ถ ํ๋ ค๋ฉด
SELECT M.mem_id, M.mem_name, B.prod_name, M.addr
FROM member M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
WHERE B.prod_name IS NULL
ORDER BY M.mem_id
์ฆ, ์ ๋ฆฌํ์๋ฉด
๐LEFT OUTER JOIN
์ผ์ชฝ์ ์๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ์กฐ๊ฑด์ ๋ง์ง ์๋๋ผ๋ ๋ชจ๋ ๊ฐ์ ธ์จ๋ค!
์กฐ๊ฑด์ ๋ง์ง ์์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋ํ ๊ฐ์ด ์์ง๋ง NULL๋ก ์ฑ์์ง๋ค
๋ง์ฝ ์ผ์ชฝํ ์ด๋ธ์ด ํ์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ด ๊ตฌ๋งค์๋ผ๋ฉด
- ์ด๋ ๊ฒ ๋์จ JOIN์ ๊ฒฐ๊ณผ๋ก NULL๊ฐ์ด ๋ค์ด์๋ ํ์๋ง ์ถ์ถํด์ ์นดํก ์๋ฆผ์ผ๋ก ์ฒซ ๊ตฌ๋งค ์ด๋ฒคํธ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋ฑ์ผ๋ก ํ์ฉํ ์ ์๋ค.
๐RIGHT OUTER JOIN
LEFT JOIN๊ณผ ๋ฐ๋๋ก ์ค๋ฅธ์ชฝ์ ์๋ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ์กฐ๊ฑด์ด ๋ง์ง ์๋๋ผ๋ ๋ชจ๋ ๊ฐ์ ธ์จ๋ค!
๋ง์ฐฌ๊ฐ์ง๋ก ์กฐ๊ฑด์ด ๋ง์ง ์์ ์ผ์ชฝ ํ ์ด๋ธ์ ์ปฌ๋ผ์ ๋ํ ๊ฐ์ด ์์ง๋ง NULL๋ก ์ฑ์์ง๋ค.
๋ง์ฝ ์ผ์ชฝํ ์ด๋ธ์ด ํ์ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ด ๊ตฌ๋งค์๋ผ๋ฉด
- ์ด๋ ๊ฒ ๋์จ JOIN์ ๊ฒฐ๊ณผ๋ก NULL๊ฐ์ด ๋ค์ด์๋ ํ์๋ง ์ถ์ถํด์ ์นดํก ์๋ฆผ์ผ๋ก ์ฒซ ํ์๊ฐ์ ์ด๋ฒคํธ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋ฑ์ผ๋ก ํ์ฉํ ์ ์๋ค.
'DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DB ์ด๊ฒ ์ ๊ฒ ์ ๋ฆฌ! (feat.SQL ์คํ์์..) (0) | 2024.01.19 |
---|---|
DB Connection Pool !! (0) | 2024.01.04 |
Docker ๋ด๋ถ PostgresSQL Dump (0) | 2023.12.08 |
SQL -2 (0) | 2023.01.13 |
SQL -1 (0) | 2023.01.13 |