ultra_dev

SQL -3 ๋ณธ๋ฌธ

DB

SQL -3

ultra_dev 2023. 1. 13. 01:23
  • ์กฐ์ธ์ด๋ž€๐Ÿ’ก ๋‘๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์„œ๋กœ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ๊ฒƒ
    • ํšŒ์› ํ…Œ์ด๋ธ”(์ด๋ฆ„, ์ฃผ์†Œ, ์ „ํ™”๋ฒˆํ˜ธ… ), ๊ตฌ๋งค ํ…Œ์ด๋ธ”(๋ฌผ๊ฑด, ๊ฐ€๊ฒฉ…)
    • ๋‘ ํ…Œ์ด๋ธ”์„ ์—ฎ์–ด์„œ ํ•˜๋‚˜์˜ ๋ฐฐ์†ก์„ ์œ„ํ•œ ์ •๋ณด(์ด๋ฆ„, ์ฃผ์†Œ, ๋ฌผ๊ฑด)๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ๋Œ€ํ‘œ์ ์ธ ์กฐ์ธ

 

 

  • ๋‚ด๋ถ€ ์กฐ์ธ (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
Comments