#34 [ORACLE] OUTER JOIN, NVL, NVL2, IN, COALESCE

    ๐Ÿ“Œ OUTER JOIN 

    : JOINํ•˜๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์—์„œ ํ•œ ์ชฝ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ณ , ํ•œ ์ชฝ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅ

    OUTER JOIN ์˜ˆ์‹œ

     

    ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์•„๋„ ํ•ด๋‹นํ•˜๋Š” ํ–‰์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

    = ๋™์ผํ•œ ๊ฐ’์ด ์—†๋Š” (๊ต์ง‘ํ•ฉ์ด ์—†๋Š”) ํ–‰๋„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ

    ๐Ÿšจ OUTER JOIN์€ USING์ด๋‚˜ ON ์กฐ๊ฑด์ ˆ์„ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•จ

    SELECT *
    FROM ํ…Œ์ด๋ธ”1
    LEFT|RIGHT|FULL OUTER JOIN TABLE ํ…Œ์ด๋ธ”2
    ON (ํ…Œ์ด๋ธ”1 KEY = ํ…Œ์ด๋ธ”2 KEY)

     

    ๐Ÿ“˜ NOTE
    ๐Ÿ’ก USING
    : ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ๋‚ด๋ถ€ ์กฐ์ธ์œผ๋กœ ์กฐ์ธ ๋  ๋•Œ ์กฐ์ธํ•˜๊ณ ์ž ํ•˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๋ช…์ด ๊ฐ™์„ ๊ฒฝ์šฐ,
    ์กฐ์ธ ์กฐ๊ฑด์„ ๊ธธ๊ฒŒ ์ ์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์—ญํ• 

    โœ… ON ์‚ฌ์šฉ์˜ˆ์‹œ

    SELECT  T1.ID,T1.NAME,T2.CHECK_YN
    FROM T1
    JOIN T2
    ON T1.ID = T2.ID;

    โœ… USING ์‚ฌ์šฉ์‹œ

    SELECT  T1.ID,T1.NAME,T2.CHECK_YN
    FROM T1
    JOIN T2
    USING (ID);

     

    ๐Ÿ’ก LEFT OUTER JOIN 

    : ์™ผ์ชฝ ํ…Œ์ด๋ธ”์€ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ชจ๋‘ ๊ฒฐํ•ฉ๋˜์–ด์•ผํ•จ์„ ์˜๋ฏธ

    ๐Ÿ‘‰ ์™ผ์ชฝ ํ…Œ์ด๋ธ” ๊ธฐ์ค€์œผ๋กœ JOIN

    SELECT ์ปฌ๋Ÿผ ๋ช…, ... FROM ํ…Œ์ด๋ธ”๋ช…1
    LEFT OUTER JOIN ํ…Œ์ด๋ธ”๋ช…2
    ON ์กฐ๊ฑด;

     

    ๐Ÿ’ก RIGHT OUTER JOIN

    : ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์€ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋ชจ๋‘ ๊ฒฐํ•ฉ๋˜์–ด์•ผํ•จ์„ ์˜๋ฏธ

    ๐Ÿ‘‰ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ๊ธฐ์ค€์œผ๋กœ JOIN

    SELECT ์ปฌ๋Ÿผ ๋ช…, ... FROM ํ…Œ์ด๋ธ”๋ช…1
    RIGHT OUTER JOIN ํ…Œ์ด๋ธ”๋ช…2
    ON ์กฐ๊ฑด;

     

    ๐Ÿ’ก FULL OUTER JOIN 

    : LEFT OUTER JOIN + RIGHT OUTER JOIN์„ ํ•œ ๊ฒƒ

    ์–‘ ์ชฝ ๋ชจ๋‘ ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊นŒ์ง€ ๋ชจ๋‘ ๊ฒฐํ•ฉํ•ด ์ถœ๋ ฅ

    SELECT ์ปฌ๋Ÿผ ๋ช…, ... FROM ํ…Œ์ด๋ธ”๋ช…1
    FULL OUTER JOIN ํ…Œ์ด๋ธ”๋ช…2
    ON ์กฐ๊ฑด;

     


    ๐Ÿ“Œ IN ์—ฐ์‚ฐ์ž 

    : OR = ์—ญํ• ์„ ํ•˜๋Š” ์—ฐ์‚ฐ์ž

    โœ… IN ์—ฐ์‚ฐ์ž๋Š” WHERE ์ ˆ์—์„œ ํŠน์ • ๊ฐ’ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์ž

     

    ๐Ÿ’ก IN ์‚ฌ์šฉ๋ฒ•

    SELECT * FROM ํ…Œ์ด๋ธ”๋ช…
    WHERE ์ปฌ๋Ÿผ๋ช… IN (๊ฐ’1,๊ฐ’2,๊ฐ’3,...);

    ๐Ÿšจ IN ์—ฐ์‚ฐ์ž๋Š” ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์•„ ์ฃผ๋กœ ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ = OR๋กœ ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉ,

         ์ •์ ์ธ ๋ฐ์ดํ„ฐ('VALUE'๋กœ ์ง์ ‘ ์ง€์ •)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” = OR์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ 


    ๐Ÿ“Œ NULL ๊ฐ’ ์น˜ํ™˜ ํ•จ์ˆ˜ 

    : NULL ์ฒ˜๋ฆฌ ํ•จ์ˆ˜, DATA๊ฐ’์ด NULL ๊ฐ’์ผ ๋•Œ ์ž„์˜ ์„ค์ • ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ•จ์ˆ˜

    ๐Ÿšจ ORCLE์—์„œ๋งŒ ์ œ๊ณตํ•˜๋Š” ํ•จ์ˆ˜

     

    ๐Ÿ’ก NVL()

    : NULL์ธ ๊ฒฝ์šฐ ์ง€์ •๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ , NULL์ด ์•„๋‹ˆ๋ฉด ์›๋ž˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ

    NVL(์ปฌ๋Ÿผ๋ช…, NULL์ผ ๊ฒฝ์šฐ ๋Œ€์ฒดํ•  ๊ฐ’)

    โœ… ๊ฒฐ๊ณผ๊ฐ’์— NULL์ด ํฌํ•จ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธ

     

    ๐Ÿ’ก NVL2()

    : NVL()์™€ ๋‹ค๋ฅด๊ฒŒ NULL์ด ์•„๋‹๋•Œ์—๋„ ๊ฐ’์„ ์ง€์ •ํ•œ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•จ

    โ‰’ ์กฐ๊ฑด์ด NULL ์ฒดํฌ์ธ IF๋ฌธ

    NVL2(๊ฐ’, NULL์ผ ๋•Œ์˜ ์ง€์ •๊ฐ’, NULL์ด ์•„๋‹ ๋•Œ์˜ ์ง€์ •๊ฐ’)

     

    ๐Ÿ’ก COALESCE

    : ์˜์–ด๋กœ๋Š” '(๋” ํฐ ๋ฉ์–ด๋ฆฌ๋กœ) ํ•ฉ์น˜๋‹ค' ๋ผ๋Š” ์˜๋ฏธ

    ์ฒ˜์Œ์œผ๋กœ NULL์ด ์•„๋‹Œ ์ปฌ๋Ÿผ ๊ฐ’์„ ๋งŒ๋‚˜๋ฉด ๊ทธ ์ปฌ๋Ÿผ ๊ฐ’์„ RETURN

    ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปฌ๋Ÿผ์˜ NULL๊ฐ’์„ ํŒ๋ณ„ํ•ด์•ผํ•  ๊ฒฝ์šฐ NULL์ด ์•„๋‹Œ ์ฒซ ๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

    โœ… NVLํ•จ์ˆ˜์˜ ํ™•์žฅ ๋ฒ„์ „

    โœ… ๋ชจ๋“  ์ธ์ˆ˜๊ฐ€ NULL์ธ ๊ฒฝ์šฐ์—๋Š” NULL์„ ๋ฐ˜ํ™˜

    โœ… ์ˆ˜์‹์— NULL์ด ํฌํ•จ๋˜์–ด์žˆ๋Š”์ง€๋ฅผ ํ™•์ธ

    ex) COALESCE(2*NULL, 0) ==> 0

     

    โœ… COALESCE ์‚ฌ์šฉ๋ฒ•

    SELECT A,B COALESCE(A,B) FROM TA;
    A B COALESCE(A,B)
    1 NULL 1
    NULL 2 2
    NULL NULL NULL

     

     

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€