-- function example --16. SUBSTR í¨ì를 ì¬ì©íì¬ -- ì¬ìë¤ì ì ì¬í ë ëì ì ì¬í ë¬ë§ ì¶ë ¥íìì¤. -- 81/02/21 -> 81/02 --> 1,5 -- substr(ì본 문ìì´, ìì ì¸ë±ì¤, ê°ì) -- substr('STRING', 1, 2) -> 'ST' select hiredate, substr(hiredate, 1, 5) from emp; --17. SUBSTR í¨ì를 ì¬ì©íì¬ 4ìì ì ì¬í ì¬ìì ì¶ë ¥íìì¤. -- 80/12/17 -> substr(str, 4, 2) select * --substr(hiredate, 4, 2) from emp where substr(hiredate, 4, 2) = '04' -- ; --18. MOD í¨ì를 ì¬ì©íì¬ -- ì¬ìë²í¸ê° ì§ìì¸ ì¬ëë§ ì¶ë ¥íìì¤. -- mod(í¼ì ì, ì ì) => ëë¨¸ì§ ë°í select * from emp where mod(empno, 2)=0 ; --19. ì ì¬ì¼ì ë ëë 2ì리(YY), ìì ì«ì(MM)ë¡ íìíê³ -- ìì¼ì ì½ì´ (DY)ë¡ ì§ì íì¬ ì¶ë ¥íìì¤. -- to_char() select hiredate, to_char(hiredate, 'YY MM MON DY') from emp ; --20. ì¬í´ ëª ì¹ ì´ ì§ë¬ëì§ ì¶ë ¥íìì¤. -- íì¬ ë ì§ìì ì¬í´ 1ì 1ì¼ì ëº ê²°ê³¼ë¥¼ ì¶ë ¥íê³ -- TO_DATE í¨ì를 ì¬ì©íì¬ ë°ì´í° íì ì¼ì¹ ìí¤ìì¤. select sysdate, to_date('2021/01/01', 'YYYY/MM/DD'), sysdate-to_date('2021/01/01', 'YYYY/MM/DD') from dual; --21. ì¬ìë¤ì ìê´ ì¬ë²ì ì¶ë ¥íë -- ìê´ì´ ìë ì¬ìì ëí´ìë NULL ê° ëì 0ì¼ë¡ ì¶ë ¥íìì¤. -- nvl(컬ë¼, 기본ê°) select ename, nvl(mgr, 0) from emp; --22. DECODE í¨ìë¡ ì§ê¸ì ë°ë¼ ê¸ì¬ë¥¼ ì¸ìíëë¡ íìì¤. -- ì§ê¸ì´ âANALISTâì¸ ì¬ìì 200, -- âSALESMANâì¸ ì¬ìì 180, -- âMANAGERâì¸ ì¬ìì 150, -- âCLERKâì¸ ì¬ìì 100ì ì¸ìíìì¤. select ename, sal, job, decode(job, 'ANALYST', sal+200, 'SALESMAN', sal+180, 'MANAGER', sal+150, 'CLERK', sal+100 ) as upsal from emp; --23. 모ë ì¬ìì ê¸ì¬ ìµê³ ì¡, ìµì ì¡, ì´ì¡ ë° íê· ê¸ì¬ë¥¼ ì¶ë ¥íìì¤. -- íê· ì ëí´ìë ì ìë¡ ë°ì¬ë¦¼íìì¤. select max(sal), min(sal), sum(sal), round(avg(sal),0) from emp; --24. ê° ë´ë¹ ì 무 ì íë³ë¡ -> jobì¼ë¡ 그룹í -- ê¸ì¬ ìµê³ ì¡, ìµì ì¡, ì´ì¡ ë° íê· ì¡ì ì¶ë ¥íìì¤. -- íê· ì ëí´ìë ì ìë¡ ë°ì¬ë¦¼ íìì¤. select job, max(sal), min(sal), sum(sal), round(avg(sal),0) from emp group by job ; --25. COUNT(*) í¨ì를 ì´ì©íì¬ -- ë´ë¹ì ë¬´ê° ëì¼í -> ì 무ë³ë¡ 그룹í -- ì¬ì ì를 ì¶ë ¥íìì¤. select job, count(*) from emp group by job ; --26. ê´ë¦¬ì ì를 ì¶ë ¥íìì¤. select count( mgr) from emp; select count(distinct mgr) from emp; --27. ê¸ì¬ ìµê³ ì¡, ê¸ì¬ ìµì ì¡ì ì°¨ì¡ì ì¶ë ¥íìì¤. select max(sal), min(sal), max(sal)-min(sal) from emp; --28. ì§ê¸ë³ ì¬ìì ìµì ê¸ì¬ë¥¼ ì¶ë ¥íìì¤. group by job -- ê´ë¦¬ì를 ì ì ìë ì¬ìê³¼ where mgr is not null -- ìµì ê¸ì¬ê° 2000 미ë§ì¸ 그룹ì ì ì¸ìí¤ê³ having min(sal) >= 2000 -- 결과를 ê¸ì¬ì ëí ë´ë¦¼ì°¨ìì¼ë¡ ì ë ¬íì¬ ì¶ë ¥íìì¤. select job, min(sal) from emp where mgr is not null group by job having min(sal)>=2000 order by min(sal) desc ; --29. ê° ë¶ìì ëí´ group by deptno -- ë¶ìë²í¸, ì¬ì ì, ë¶ì ë´ì 모ë ì¬ìì íê· ê¸ì¬ë¥¼ ì¶ë ¥íìì¤. -- íê· ê¸ì¬ë ììì ë째 ìë¦¬ë¡ ë°ì¬ë¦¼ íìì¤. select deptno, count(*), round(avg(sal),2) from emp group by deptno ; --30. ê° ë¶ìì ëí´ group by deptno -- ë¶ìë²í¸, -- ì´ë¦, ì§ì ëª , -- ì¬ì ì, ë¶ìë´ì 모ë ì¬ìì íê· ê¸ì¬ë¥¼ ì¶ë ¥íìì¤. -- íê· ê¸ì¬ë ì ìë¡ ë°ì¬ë¦¼ íìì¤. -- DECODE ì¬ì©. select * from dept; select deptno, decode(deptno, 10, 'ACCOUNTING', 20, 'RESEARCH', 30, 'SALES', 40, 'OPERATIONS' ) as deptName , decode(deptno, 10, 'NEW YORK', 20, 'DALLAS', 30, 'CHICAGO', 40, 'BOSTON' ) as loc , round(avg(sal),0), count(*) from emp group by deptno ; -- ì¡°ì¸ ì´ì© select e.deptno, d.loc, d.dname, round(avg(sal),2), count(*) from emp e, dept d where e.deptno=d.deptno group by e.deptno, d.loc, d.dname order by e.deptno ; -- ìë¸ì¿¼ë¦¬ ì´ì© select deptno, (select dname from dept d where e.deptno=d.deptno), (select loc from dept d where e.deptno=d.deptno) from emp e group by deptno ; --31. ì 무를 íìí ë¤ì í´ë¹ ì 무ì ëí´ ë¶ì ë²í¸ë³ -- ê¸ì¬ ë° ë¶ì 10, 20, 30ì ê¸ì¬ ì´ì¡ì ê°ê° ì¶ë ¥íìì¤. -- ë³ì¹ì ê° job, dno, ë¶ì 10, ë¶ì 20, ë¶ì 30, -- ì´ì¡ì¼ë¡ ì§ì íìì¤. ( hint. Decode, group by ) select job, deptno, nvl(decode(deptno, 10, sum(sal)),0) as "10ë² ë¶ì", nvl(decode(deptno, 20, sum(sal)),0) as "20ë² ë¶ì", nvl(decode(deptno, 30, sum(sal)),0) as "30ë² ë¶ì", sum(sal) as "ì´ì¡" from emp group by job, deptno order by job, deptno ;