๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€/Oracle

[ex23] pseudo, rownum

ex23_pseudo
    
    ์˜์‚ฌ์ปฌ๋Ÿผ, Pseudo Column
    - ์‹ค์ œ ์ปฌ๋Ÿผ์ด ์•„๋‹Œ๋ฐ ์ปฌ๋Ÿผ์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜๋Š” ์š”์†Œ
    
    rownum
    - ์˜ค๋ผํด ์ „์šฉ
    - row num > ํ–‰๋ฒˆํ˜ธ > ๋ ˆ์ฝ”๋“œ์˜ ์ผ๋ จ๋ฒˆํ˜ธ
    - from์ ˆ์ด ์‹คํ–‰๋  ๋•Œ ๊ฐ ๋ ˆ์ฝ”๋“œ์— ์ผ๋ จ๋ฒˆํ˜ธ๋ฅผ ํ• ๋‹นํžŒ๋‹ค.(*****)
    - where์ ˆ์˜ ์˜ํ–ฅ์„ ๋ฐ›์œผ๋ฉด ์ผ๋ จ๋ฒˆํ˜ธ๋ฅผ ๋‹ค์‹œ ์ •๋น„ํ•œ๋‹ค.(reindexing) (*****)
    - rownum์„ ์‚ฌ์šฉ > ์„œ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

select
    name, buseo,      --์ปฌ๋Ÿผ(์†์„ฑ) > output > ๊ฐ์ฒด์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.(๊ฐœ์ธ ๋ฐ์ดํ„ฐ)
    sysdate,          --ํ•จ์ˆ˜       > output > ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.(์ •์  ๋ฐ์ดํ„ฐ)
    substr(name, 2),  --ํ•จ์ˆ˜       > input + output > ๊ฐ์ฒด๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
    '์ƒ์ˆ˜',            --์ƒ์ˆ˜      > output > ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.(์ •์  ๋ฐ์ดํ„ฐ)
    rownum             --์˜์‚ฌ ์ปฌ๋Ÿผ > output > ๊ฐ์ฒด์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.(๊ฐœ์ธ ๋ฐ์ดํ„ฐ)
from tblInsa;

-- ๊ฒŒ์‹œํŒ > ํŽ˜์ด์ง•
-- 1ํŽ˜์ด์ง€ > rownum between 1 and 20
-- 2ํŽ˜์ด์ง€ > rownum between 21 and 40
-- 3ํŽ˜์ด์ง€ > rownum between 41 and 60

select name, buseo, rownum from tblInsa;
select name, buseo, rownum from tblInsa where rownum = 1; --์œ„์น˜๋กœ ๊ฒ€์ƒ‰
select name, buseo, rownum from tblInsa where rownum <= 5;

--์•„๋ž˜ ์•ˆ๋‚˜์˜ด
select name, buseo, rownum from tblInsa where rownum = 10;
select name, buseo, rownum from tblInsa where rownum > 5;


select 
    name, buseo, rownum 
from tblInsa; --1. *** ์ด ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  rownum์ด ์ด๋ฏธ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค. 


select 
    name, buseo, rownum     --3. ์†Œ๋น„
from tblInsa                --1. ์ƒ์„ฑ+(rownum)
    where rownum = 1;       --2. ์กฐ๊ฑด

select
    name, buseo, rownum
from tblInsa                --1. ์ƒ์„ฑ(+rownum)
    where rownum = 1;       -- rownum์„ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ > ๋ฐ˜๋“œ์‹œ 1~์กฐ๊ฑด ๋ฒ”์œ„ > ์กฐ๊ฑด์— ํฌํ•จ



--------------

select 
    name, buseo, basicpay, rownum
from tblInsa;


select 
    name, buseo, basicpay, rownum --rownum ์ˆœ์„œ๋Œ€๋กœ ์•ˆ๋‚˜์˜ด
from tblInsa
    order by basicpay desc;

-- ๊ธ‰์—ฌ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ๋ฐ›๋Š” ์ง์› 5๋ช…~


select 
    name, buseo, basicpay, rownum, rnum --๋ฐ”๊นฅ์ชฝ์˜ rownum์ด ์•ˆ์ชฝ rownum์„ ๋ฎ์–ด์“ฐ๊ธฐ
from (select 
            name, buseo, basicpay, rownum as rnum
        from tblInsa
            order by basicpay desc)
                where rownum <= 5;



-- ์ธ๊ตฌ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋‚˜๋ผ 1~3๋“ฑ 
select * from tblCountry;

-- 1. ์›ํ•˜๋Š” ์ •๋ ฌ
select * from tblCountry where population is not null order by population desc;
select rownum from tblCountry where population is not null order by population desc;

-- 2. ์œ„์˜ ๊ฒฐ๊ณผ์…‹์„ ๊ฐ€์ง€๊ณ  ํ•œ๋ฒˆ๋” rownum์„ ๋งŒ๋“ค๊ธฐ > from ์ ˆ ์‹คํ–‰
select * from (select * from tblCountry where population is not null order by population desc);
select rownum from (select * from tblCountry where population is not null order by population desc);
select * from (select * from tblCountry where population is not null order by population desc)
    where rownum <= 3;



-- tblInsa. ๊ธ‰์—ฌ๊ฐ€ 3๋“ฑ

-- 1. ๊ธ‰์—ฌ ์ˆœ์œผ๋กœ ์ •๋ ฌ 
select * from tblInsa order by basicpay desc;

select rownum from tblInsa order by basicpay desc;

-- 2. ์›ํ•˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ ๊ฒฐ๊ณผ์…‹ > from์ ˆ ์ ์šฉ > rownum ๋‹ค์‹œ ๋งค๊ธด๋‹ค.
select a.*, rownum from (select * from tblInsa order by basicpay desc) a;

select a.*, rownum from (select * from tblInsa order by basicpay desc) a where rownum = 1;
select a.*, rownum from (select * from tblInsa order by basicpay desc) a where rownum <= 5;
select a.*, rownum from (select * from tblInsa order by basicpay desc) a where rownum = 3;

-- 3. 
--์•ˆ์ชฝ์— ์žˆ๋Š” rnum์€ ์ •์  ๋ฐ์ดํ„ฐ๊ฐ€ ๋จ
select * from (select a.*, rownum as rnum from (select * from tblInsa order by basicpay desc) a)
    where rnum = 3;




-- tblComedian. 5๋ฒˆ์งธ ๋šฑ๋šฑํ•œ ์‚ฌ๋žŒ?
select * from tblComedian;

-- 1. ์ •๋ ฌ
select * from tblComedian order by weight desc;

-- 2. ์„œ๋ธŒ์ฟผ๋ฆฌ > rownum ๋ณ„์นญ
select a.*, rownum as rnum from (select * from tblComedian order by weight desc) a;

-- 3. ์„œ๋ธŒ์ฟผ๋ฆฌ > rownum ๊ณ ์ •์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ
select * from (select a.*, rownum as rnum from (select * from tblComedian order by weight desc) a); --์™„์„ฑ

-- ์•ˆ์ชฝ rnum ์‚ฌ์šฉํ•ด์„œ where ์กฐ๊ฑด
select * from (select a.*, rownum as rnum from (select * from tblComedian order by weight desc) a)
    where rnum = 5;

 


์˜ค๋‹ต๋…ธํŠธ

-- 3. tblInsa. ์—ฌ์ž ์ธ์›์ˆ˜๊ฐ€ (๊ฐ€์žฅ ๋งŽ์€ ๋ถ€์„œ ๋ฐ ์ธ์›์ˆ˜) ๊ฐ€์ ธ์˜ค์‹œ์˜ค.
-- ์ •๋ ฌ
select buseo, count(*) as c from tblInsa where substr(ssn, 8, 1) = '2' group by buseo order by c desc;
-- ์„œ๋ธŒ์ฟผ๋ฆฌ > rownum ๋ณ„์นญ
select a.*, rownum as rnum from (select buseo, count(*) as c from tblInsa where substr(ssn, 8, 1) = '2' group by buseo order by c desc) a;
-- ์„œ๋ธŒ์ฟผ๋ฆฌ > rownum ๊ณ ์ •
select buseo, c 
from (select a.*, rownum as rnum 
from (select buseo, count(*) as c  
        from tblInsa where substr(ssn, 8, 1) = '2' group by buseo order by c desc) a)
    where rnum = 1;
--๋‹ต์•ˆ
select * from (select buseo, count(*) as cnt from tblinsa where substr(ssn, 8, 1) = '2'
   group by buseo order by count(*) desc) where rownum = 1;
   

-- 9. tblinsa. ํ‰๊ท  ๊ธ‰์—ฌ 2์œ„์ธ ๋ถ€์„œ์— ์†ํ•œ ์ง์›๋“ค์„ ๊ฐ€์ ธ์˜ค์‹œ์˜ค. --***
-- ์ด๋ฌด๋ถ€
select buseo, round(avg(basicpay)) from tblInsa group by buseo order by avg(basicpay) desc;
select * from tblInsa group by buseo order by avg(basicpay) desc;
select a.*, rownum as rnum from (select buseo from tblInsa group by buseo order by avg(basicpay) desc) a;
select * from tblInsa where buseo = ();
select * from (select a.*, rownum as rnum from (select buseo, avg(basicpay) from tblInsa group by buseo order by avg(basicpay) desc) a) where rnum = 2;

--๋‹ต
select * from (select a.*, rownum as rnum from (select buseo, avg(basicpay) from tblinsa
   group by buseo
      order by avg(basicpay) desc) a) where rnum = 2;
select * from tblInsa;



-- 11. tblinsa. ๋‚จ์ž ์ง์› ์ค‘์—์„œ ๊ธ‰์—ฌ๋ฅผ 3๋ฒˆ์งธ๋กœ ๋งŽ์ด ๋ฐ›๋Š” ์ง์›๊ณผ 9๋ฒˆ์งธ๋กœ ๋งŽ์ด ๋ฐ›๋Š” ์ง์›์˜ ๊ธ‰์—ฌ ์ฐจ์•ก์€ ์–ผ๋งˆ์ธ๊ฐ€? ***
select * from tblInsa where substr(ssn, 8, 1) = '1' order by basicpay desc;
select a.*, rownum as rnum from (select * from tblInsa where substr(ssn, 8, 1) = '1' order by basicpay desc) a;

select (select basicpay from (select a.*, rownum as rnum from (select * from tblInsa where substr(ssn, 8, 1) = '1' order by basicpay desc) a) where rnum = 3) 
 - (select basicpay from (select a.*, rownum as rnum from (select * from tblInsa where substr(ssn, 8, 1) = '1' order by basicpay desc) a) where rnum = 9) as "๊ธ‰์—ฌ ์ฐจ์•ก" from dual;

--๋‹ต
select () - () from dual; --dual ์ด์šฉํ•ด์•ผ ๋จ

select 
   (select basicpay from (select basicpay, rownum as rnum from (select basicpay from tblinsa where substr(ssn, 8, 1) = '1' order by basicpay desc)) where rnum = 3)
   -
   (select basicpay from (select basicpay, rownum as rnum from (select basicpay from tblinsa where substr(ssn, 8, 1) = '1' order by basicpay desc)) where rnum = 9) as "๊ธ‰์—ฌ ์ฐจ์•ก"
from dual;

'ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€ > Oracle' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ex25] with  (0) 2023.03.30
[ex24] rank  (0) 2023.03.30
[ex22] alter  (0) 2023.03.26
[ex21] union  (0) 2023.03.26
[ex20] view  (0) 2023.03.26