IT/DataBase

[SQL] Oracle SELECT query ์‹คํ–‰ ์ˆœ์„œ

์•Œ ์ˆ˜ ์—†๋Š” ์‚ฌ์šฉ์ž 2022. 11. 28.

๋ชฉ์ฐจ

    image source:https://unsplash.com/s/photos/sql

    SQL SELECT ์ฟผ๋ฆฌ ์‹คํ–‰ ์ˆœ์„œ๐Ÿ˜€

    SELECT ์ฟผ๋ฆฌ์—์„œ ์‹คํ–‰ ์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    ๋ถ€๋„๋Ÿฝ์ง€๋งŒ ์ฒ˜์Œ์—” ์ €๋Ÿฐ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ง€ ๋ชฐ๋ž๊ณ  ์ตœ๊ทผ์— ์•Œ์•˜๋‹ค.

    ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋Š” ์ดˆ๋ณด ์‹œ์ ˆ์—” ๊ทธ๋ƒฅ ์ผ๋‹ค๊ณ  ์น˜๋ฉด ์‹œ๊ฐ„์ด ํ๋ฅด๋ฉด์„œ๋Š” ์ ์  ์ดํ•ดํ•˜๋ฉด์„œ ์“ฐ๋ ค๊ณ  ํ•œ๋‹ค.

    ์ € ์ˆœ์„œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ธฐ์–ตํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋ฉฐ ์ด์— ๋”ฐ๋ฅธ ํผํฌ๋จผ์Šค์˜ ์ฐจ์ด๊ฐ€ ํฌ๋‹ค.

     

    ์˜ˆ์‹œ SELECT SQL๐Ÿ˜„

    SELECT
        JOB_ID
        ,AVG(SALARY) SAL_AVG
    FROM
        EMPLOYEES2 e 
    WHERE 
        SALARY > 13000
    GROUP BY 
        JOB_ID
    HAVING
        COUNT(*) > 1
    ORDER BY SAL_AVG DESC
    ;

    ์œ„ ๊ฐ„๋‹จํ•œ ์ฟผ๋ฆฌ๋ฌธ์—์„œ๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” 6๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นœ๋‹ค.

     

    ์ € ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ํ•˜๋‚˜์”ฉ ๋œฏ์–ด ๋ณด๊ฒ ๋‹ค.๐Ÿ˜Ž

    FROM์ ˆ

    ์ฟผ๋ฆฌ์˜ ์ฒซ๋ฒˆ ์งธ ์‹คํ–‰์ˆœ์„œ์ธ FROM์ ˆ์—์„œ ์•„๋ž˜์ฒ˜๋Ÿผ EMPLOYEES2 ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.

    -- EMPLOYEES2ํ…Œ์ด๋ธ”์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ ์กฐํšŒ
    FROM EMPLOYEES2

    FROM์ ˆ

     

    WHERE์ ˆ

    WHERE์ ˆ์—์„œ๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ์—์„œ ์•„๋ž˜์ฒ˜๋Ÿผ ์กฐ๊ฑด์— ๋งž๋Š” ๊ฒฐ๊ณผ๋ฅผ ํ•„ํ„ฐ๋งํ•œ๋‹ค.

    -- ๊ธ‰์—ฌ๊ฐ€ 13000 ์ด์ƒ์ธ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง
    WHERE SALARY > 13000

    WHERE์ ˆ

     

    GROUP BY์ ˆ

    GROUP BY์ ˆ์—์„œ๋Š” WHERE์ ˆ๋กœ ํ•„ํ„ฐ๋ง๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ•‘ํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค.

    (GROUP BYํ•œ ์ปฌ๋Ÿผ์œผ๋กœ ์ค‘๋ณต์ œ๊ฑฐ ํ›„ ๊ทธ๋ฃนํ™”ํ•จ)

    GROUP BY์ ˆ ์‚ฌ์šฉ ์‹œ ๊ทธ๋ฃนํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ(count(), sum(), avg() ๋“ฑ)

    -- JOB_ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ•‘
    GROUP BY JOB_ID

    GROUP BY์ ˆ

     

    HAVING์ ˆ

    HAVING์ ˆ์€ GROUP BYํ•œ ๋ฐ์ดํ„ฐ์— ์กฐ๊ฑด์„ ์ค„ ๋•Œ ์‚ฌ์šฉ๋จ

    HAVING์ ˆ์—์„œ๋Š” ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ๊ฐ€๋Šฅ

    WHERE์ ˆ๊ณผ๋Š” ๋‹ค๋ฅธ์šฉ๋„๋กœ ์‚ฌ์šฉ๋จ(WHERE์ ˆ์€ FROM์ ˆ ๋‹ค์Œ์— ๋‚˜์˜จ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง, ์ฆ‰ GROUP BY ์ „์— ํ•„ํ„ฐ๋ง)

    -- GROUP BYํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ 1๊ฐœ ์ด์ƒ์ธ ๊ฒƒ๋งŒ ์กฐํšŒ
    HAVING COUNT(*) > 1

    HAVING์ ˆ

     

    SELECT์ ˆ

    ์—ฌ๋Ÿฌ ์กฐ๊ฑด๋“ค ํ•„ํ„ฐ๋งํ•œ ์ตœ์ข… ๋ฐ์ดํ„ฐ์—์„œ ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ์ ˆ์ด SELECT์ ˆ์ด๋‹ค.

    -- ์กฐ๊ฑด ์ฒ˜๋ฆฌ ํ›„ ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ ์„ ํƒ
    SELECT JOB_ID, AVG(SALARY) SAL_AVG

    SELECT์ ˆ

     

    ORDER BY ์ ˆ๐Ÿคฉ

    ๋งˆ์ง€๋ง‰ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ• ์ง€ ์ •ํ•œ ๋’ค ์„ ํƒ์‚ฌํ•ญ์œผ๋กœ row์˜ ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•ด์ฃผ๋Š” ์ ˆ์ด ORDER BY ์ ˆ์ด๋‹ค.

    -- ํ‰๊ท ๊ฐ’์„ SAL_AVG๋กœ ๋ณ„์นญ์„ ์ฃผ๊ณ  ๊ทธ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ
    ORDER BY SAL_AVG DESC

    ORDER BY์ ˆ

     

    ์ฐธ์กฐ : ๋งˆ์ด์ž๋ด‰ ๋ธ”๋กœ๊ทธ, 2020.03.17, https://myjamong.tistory.com/172

     

    [Oracle] SQL SELECT ์ฟผ๋ฆฌ ์‹คํ–‰ ์ˆœ์„œ ์ฒ˜๋ฆฌ ๊ณผ์ • :: ๋งˆ์ด์ž๋ชฝ

    SELECT ์ฟผ๋ฆฌ ์‹คํ–‰ ์ˆœ์„œ SQL ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ• ๋•Œ ์‚ฌ์šฉ๋˜๋Š” WHERE, GROUP BY, ORDER BY ์ ˆ๊ณผ ๊ฐ™์€ ๊ตฌ๋ฌธ์„ ์‹คํ–‰ํ•˜๋Š”๋ฐ ์ˆœ์„œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆœ์„œ์— ์˜ํ•ด์„œ ์ฟผ๋ฆฌ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ณ  ์–ด๋–ป๊ฒŒ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•˜๋А๋ƒ์— ๋”ฐ

    myjamong.tistory.com

    ๋Œ“๊ธ€