[Day5] Oracle 5 [9/29]

---볡슡---

-- SCOTT 0929(λͺ©) --
--1. μ˜€λ₯˜ λ©”μ‹œμ§€μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ„Έμš” .
-- γ„±. ORA-01438: value larger than specified precision allowed for this column
       deptno NUMBER(2) 2자리 μ •μˆ˜
              NUMBER(p[,s])
       INSERT         ( deptno )   VALUES  ( 100 );
       UPDATE
       SET   detpno = 100
-- γ„΄. ORA-00001: unique constraint (SCOTT.PK_DEPT) violated
                 PK_DEPT μ˜  μœ μΌμ„± μ œμ•½μ‘°κ±΄                   μœ„λ°°λœλ‹€.
       INSERT         ( deptno )   VALUES  ( 40  );
       
-- γ„·. ORA-00923: FROM keyword not found where expected 
            SELECT ????,???
            FROM μ ˆ   μ•ž, λ’€ κ΅¬λ¬Έ μž˜λͺ»λ˜μ—ˆλ‹€.
            
-- γ„Ή. ORA-02292: integrity constraint (SCOTT.FK_DEPTNO) violated - child record found
                FK_DEPTNO μ˜    λ¬΄κ²°μ„±   μ œμ•½μ‘°κ±΄ μœ„λ°°λœλ‹€.
                μžμ‹ λ ˆμ½”λ“œ(ν–‰) μ°Ύμ•˜λ‹€.
                        κ΄€κ³„ν˜• λ°μ΄ν„° λͺ¨λΈ + DBMS = RDBMS(였라클)
                        μ†Œμ†κ΄€κ³„
        parent                         child                
        DEPT                           EMP
        deptno(PK) κ³ μœ ν‚€               empno(PK)
                                       deptno(FK)
          10,20.30,40                      10(3), 20(3), 30(6)  40(X)
          
       DELETE dept
       WHERE deptno = 10;  μ‚­μ œ λΆˆκ°€λŠ₯
       WHERE deptno = 40;  μ‚­μ œ κ°€λŠ₯
-- 
--2. RRκ³Ό  YY의 μ°¨μ΄μ μ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ„Έμš” .
--   2000λ…„λŒ€ 2022/ 21μ„ΈκΈ°
--   YY  '2089.01.12'  '2011.04.21'
--   RR  '1989.01.12'  '2011.04.21'
         50~99  μ΄μ „λ…„λŒ€ 1900λ…„λŒ€
         0~49   ν˜„μž¬λ…„λŒ€  200λ…„λŒ€
         
--3. JAVA :  5 % 2  μ½”딩을 μ˜€λΌν΄λ‘œ λ‚˜λ¨Έμ§€ κ΅¬ν•΄μ„œ μΆœλ ₯ν•˜λŠ” μΏΌλ¦¬λ₯Ό μž‘μ„±ν•˜μ„Έμš”.
--           μ—°μ‚°μž X
            λ‚˜λ¨Έμ§€ κ΅¬ν•˜λŠ” ν•¨μˆ˜ 2개
            SELECT MOD( 5,2 )                         ,   REMAINDER( 5,2 )  
                      μ ˆμ‚­ FLOOR()                           λ°˜μ˜¬λ¦Ό ROUND()
            FROM dual;
            
--4. dept ν…Œμ΄λΈ”을 μ‚¬μš©ν•΄μ„œ κ° DML문의 ν˜•μ‹μ„ μ κ³ , μΏΌλ¦¬ μž‘μ„±ν•˜κ³  μ‹€ν–‰ν•˜μ„Έμš”. 
-- γ„±. μƒˆλ‘œμš΄ λΆ€μ„œλ₯Ό μΆ”κ°€(insert)ν•˜λŠ” μΏΌλ¦¬ μž‘μ„± λ° ν™•μΈ 
--    1) (  50, 'QC', 'SEOUL' )
INSERT INTO ν…Œμ΄λΈ”λͺ… [( μ»¬λŸΌλͺ…... )] VALUES ( 'μ»¬λŸΌκ°’', '문자', ....);
--    2) (  60, T100%, SEOUL )
--    3) (  70, T100T, BUSAN )

-- γ„΄. 60번 λΆ€μ„œμ˜ λΆ€μ„œλͺ…,  μ§€μ—­λͺ…을 μˆ˜μ • 
--     ( μ›λž˜ λΆ€μ„œλͺ… λ’€μ— 'X' λ¬Έμžμ—΄ μΆ”κ°€ν•΄μ„œ μˆ˜μ •, μ§€μ—­λͺ…은 DAEGU λ‘œ μˆ˜μ • )    

INSERT INTO dept VALUES ( 50, 'SALES', 'POHANG');
SELECT *
FROM dept;

UPDATE dept
SET dname = CONCAT( dname , 'X'), loc = 'DAEGU'                           ||
WHERE deptno = 60;

질문)
———————————————
UPDATE dept
SET dname = 'S%ALES'
WHERE dname = 'SALES';
———————————————
μœ„ μΏΌλ¦¬λŠ” μ•ˆλ˜λ‚˜μš”?

-- μ‚¬μ›λ²ˆν˜Έ, λΆ€μ„œλ²ˆν˜Έ(PK)으둜 μˆ˜μ •, μ‚­μ œ
UPDATE  ??
SET   email = ???
WHERE ename = '홍길동'

 

*주의 : μ—…λ°μ΄νŠΈ ν•  λ•Œ λΆ€μ„œλ²ˆν˜Έ(프라이머리킀)둜 ν•΄μ€˜μ•Ό λ‹€λ₯Έ 데이터 μ•ˆκ±΄λ“œλ¦¬λ©΄μ„œ μˆ˜μ •κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— WHERE μ ˆμ— 쿼리 μ μ—ˆλ˜ 것

-- γ„·. LIKE μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ λΆ€μ„œλͺ…에 '%' λ¬Έμžκ°€ ν¬ν•¨λœ λΆ€μ„œ μ •λ³΄ μ‘°νšŒν•˜λŠ” μΏΌλ¦¬ μž‘μ„±
      WHERE dname LIKE '%\%%' ESCAPE  '\'; 
      
-- γ„Ή. REGEXP_LIKE() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ λΆ€μ„œλͺ…에 '%' λ¬Έμžκ°€ ν¬ν•¨λœ λΆ€μ„œ μ •λ³΄ μ‘°νšŒν•˜λŠ” μΏΌλ¦¬ μž‘μ„±
    WHERE REGEXP_LIKE( dname ,  '%' );

-- γ…. λΆ€μ„œλ²ˆν˜Έ 50, 60, 70번 λΆ€μ„œ μ‚­μ œ
      DELETE FROM dept
      WHERE deptno IN ( 50, 60,  70 ); --  μœ μ§€ 보수

--  PL/SQL
--  for( int i=40 ; i <= 70; i+= 10){
--     DELETE FROM dept      WHERE deptno >= i;
--  }
--  
-- 
--5. ν•œκΈ€ ν•œ λ¬Έμžμ™€ μ•ŒνŒŒλ²³ ν•œ λ¬Έμžκ°€ λͺ‡ λ°”μ΄νŠΈμΈμ§€ μΆœλ ₯ν•˜λŠ” μΏΌλ¦¬ μž‘μ„±( X )
        VSIZE()
--
--6. insa ν…Œμ΄λΈ”μ—μ„œ λ‚¨μžλŠ” 'X', μ—¬μžλŠ” 'O' λ‘œ μ„±λ³„(gender) μΆœλ ₯ν•˜λŠ” μΏΌλ¦¬ μž‘μ„±
--
--    NAME                              SSN                           GENDER
--    ---------                 --------------                     ------
--    ν™κΈΈλ™                      771212  -1022432                   X
--    μ΄μˆœμ‹                       801007 -1544236                   X
--    μ΄μˆœμ•                       770922 -2312547                   O
--    κΉ€μ •ν›ˆ                      790304 -1788896                   X
--    ν•œμ„λ΄‰                      811112   -1566789                    X

-- 쒋은 코딩은 μ•„λ‹ˆμ§€λ§Œ μ΄λ ‡κ²Œλ„ κ°€λŠ₯ --

SELECT name, ssn
      , 'X' gender
FROM insa
WHERE MOD( SUBSTR( ssn, -7, 1), 2 ) = 1 
UNION  - SET μ—°μ‚°μž
SELECT name, ssn 
      , 'O' gender
FROM insa
WHERE MOD( SUBSTR( ssn, -7, 1), 2 ) = 0;


-- 2번째 --

SELECT t.name, t.ssn
        , REPLACE(  REPLACE( t.gender , '1', 'X' ) , '0', 'O')  gender
--        if( t.gender == 1 )  'X'  ν”„λ‘œκ·Έλž¨ μ–Έμ–΄μ˜ 절차적인 문법( PL ) + SQL   PL/SQL
--        else                 'O'
FROM (
         -- 인라인 뷰( Inline View )
         SELECT name, ssn
               , MOD(SUBSTR( ssn, -7, 1 ),2) gender
         FROm insa
     ) t;

     
-- 3번째 --

SELECT name, ssn
        -- , MOD( SUBSTR( ssn, -7, 1), 2 ) gender
        , NVL2( NULLIF(  MOD( SUBSTR( ssn, -7, 1), 2 ), 1 ) , 'O', 'X') gender
     FROM insa;


--  NULL μ²˜λ¦¬ ν•¨μˆ˜ ? NVL, NVL2, *** NULLIF() ***
     NULLIF( A, B) 
     A=B   NULL
     A!=B   A
     

ex)

SELECT ename
        , NULLIF(  ename , 'SMITH' )   // λΉ„κ΅ν•˜λŠ” κ°’ (enameκ³Ό SMITH)이 κ°™μœΌλ©΄ NULL λ‹€λ₯΄λ©΄ ename
FROM emp;

μ •λ ¬

    -- μ™Όμͺ½ μ •λ ¬ : 문자
    -- 였λ₯Έμͺ½ μ •λ ¬: 숫자
    SELECT '1', 1
    FROM dual;


--7. insa ν…Œμ΄λΈ”μ—μ„œ 2000λ…„ 이후 μž…μ‚¬μž 정보 μ‘°νšŒν•˜λŠ” 쿼리 μž‘μ„±

 

--    NAME                 IBSADATE
--    -------------------- --------
--    μ΄λ―Έμ„±                  00/04/07
--    μ‹¬μ‹¬ν•΄                  00/05/05
--    κΆŒμ˜λ―Έ                  00/06/04
--    μœ κ΄€μˆœ                  00/07/07

 

-- 문자 --

 SELECT name, ibsadate(λ¬Έμžμ—΄μž„)
    -- , TO_CHAR(λ‚ μ§œ,숫자,문자) -> ν˜•μ‹μ˜ 문자
    -- , TO_CHAR( ibsadate, 'YYYY') ib_year
  FROM insa
  WHERE TO_CHAR( ibsadate, 'YYYY') >= '2000';   // λ¬Έμžμ—΄ 비ꡐ
  ORDER BY ibsadate ASC;

 

-- 숫자둜 λΉ„κ΅ν•œλ‹€λ©΄?--

SELECT name, ibsadate
     -- , EXTRACT( YEAR FROM ibsadate) ib_year
  FROM insa
  WHERE EXTRACT( YEAR FROM ibsadate) >= 2000;  
  ORDER BY ibsadate ASC;


  
--8-1. Oracle의 λ‚ μ§œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μžλ£Œν˜• 2가지λ₯Ό μ μœΌμ„Έμš”.
--   γ„±.  DATE
--   γ„΄.  TIMESTAMP

--8-2. ν˜„μž¬ μ‹œμŠ€ν…œμ˜ λ‚ μ§œ/μ‹œκ°„ 정보λ₯Ό 좜λ ₯ν•˜λŠ” 쿼리λ₯Ό μž‘μ„±ν•˜μ„Έμš”.
-- SYSDATE ν•¨μˆ˜ : λ‚ μ§œ + μ‹œκ°„ , '22/09/29' 
 SELECT SYSDATE           "(γ„±)"  --ν˜„μž¬ μ‹œμŠ€ν…œμ˜ λ‚ μ§œ + μ‹œκ°„(μ‹œκ°„,λΆ„,초)
      , CURRENT_DATE      "(γ„΄)"  --ν˜„μž¬ μ„Έμ…˜(session)의   λ‚ μ§œ + μ‹œκ°„ (μ„Έμ…˜ : λ‘œκ·ΈμΈν•˜κ³  λŠμ–΄μ§ˆλ•ŒκΉŒμ§€)
      , CURRENT_TIMESTAMP "(γ„·)"  --                 +                ms ns
 FROM dual;
--
--9. HR κ³„μ •μœΌλ‘œ μ ‘μ†ν•΄μ„œ 
--   SELECT * FROM scott.dept;
--   μœ„μ˜ μΏΌλ¦¬λ₯Ό μ‹€ν–‰ν•˜λ©΄ ORA-00942: table or view does not exist μ˜€λ₯˜κ°€ λ°œμƒν•œλ‹€.  ( κΆŒν•œ X )
    1) SYS둜 κ°€μ„œ GRANT SELECT ON emp TO HR; // scott emp ν…Œμ΄λΈ” κΆŒν•œ λΆ€μ—¬ λ¨Όμ €ν•˜κ³ 


--   κ·Έλž˜μ„œ HR κ³„μ •μ—μ„œλ„ scott.dept ν…Œμ΄λΈ”μ„ SELECTν•  수 μžˆλ„λ‘ κΆŒν•œλΆ€μ—¬ 및 arirang μ΄λž€ μ΄λ¦„μœΌλ‘œ μ‹œλ…Έλ‹˜( SYNONYM )을 μƒμ„±ν•΄μ„œ     

    2) SYSμ—μ„œ SYNONYM 생성


--   HR κ³„μ •μ—μ„œλ„ SELECT * FROM arirang 쿼리λ₯Ό μ‚¬μš©ν•  수 μžˆλ„λ‘ μ„€μ •ν•˜κ³  ν…ŒμŠ€νŠΈν•˜λŠ”  λͺ¨λ“  쿼리λ₯Ό μˆœμ„œλŒ€λ‘œ μž‘μ„±ν•˜μ„Έμš”. 

      dual ν…Œμ΄λΈ” ?  public     μ‹œλ…Έλ‹˜( synonym )
     μŠ€ν‚€λ§ˆ.객체λͺ…
     scott.emp           -> λͺ¨λ“  μ‚¬μš©μž κ°„λ‹¨ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ 별칭 (arirang)  

 

 --10. emp ν…Œμ΄λΈ”μ—μ„œ 사원λͺ…(ename)에 검색어( 'e' ) 문자 μž…λ ₯ λ₯Ό ν¬ν•¨ν•œ 사원을 κ²€μƒ‰ν•΄μ„œ μ•„λž˜μ™€ 같이 좜λ ₯.
--
--    ENAME   SEARCH_ENAME
--    --------------------
--    ALLEN   ALL[E]N
--    JONES   JON[E]S
--    BLAKE   BLAK[E]
--    TURNER   TURN[E]R
--    JAMES   JAM[E]S
--    MILLER   MILL[E]R

:λ°”μΈλ“œλ³€μˆ˜ (콜둠 λΆ™μ–΄μžˆλŠ” λ³€μˆ˜) 
  γ„±. bind variable
  γ„΄. μ„Έμ…˜(session)이 μœ μ§€λ˜λŠ” λ™μ•ˆ μ‚¬μš©ν•  μˆ˜ μžˆλŠ” λ³€μˆ˜
  

- μ›λž˜ 문제 - 

SELECT ename
          , REPLACE( ename ,  'E', '[E]' ) SEARCH_ENAME
FROM emp
WHERE REGEXP_LIKE(ename ,  :searchWord , 'i');
WHERE ename LIKE '%E%';

 

- μž…λ ₯λ°›κΈ° -
SELECT ename
          , REPLACE( ename ,  UPPER(:searchWord)  , '[' || UPPER(:searchWord)  || ']' ) SEARCH_ENAME
FROM emp
WHERE REGEXP_LIKE(ename ,  :searchWord , 'i');
WHERE ename LIKE '%E%';


--
--11.   UPDATE λ¬Έμ— WHERE μ‘°κ±΄μ ˆμ΄ μ—†λŠ” κ²½μš°λŠ” μ–΄λ–»κ²Œ λ˜λ‚˜ ? λͺ¨λ“  λ ˆμ½”λ“œ(ν–‰) μˆ˜μ •
--11-2. DELETE λ¬Έμ— WHERE μ‘°κ±΄μ ˆμ΄ μ—†λŠ” κ²½μš°λŠ” μ–΄λ–»κ²Œ λ˜λ‚˜ ? λͺ¨λ“  λ ˆμ½”λ“œ(ν–‰) μ‚­μ œ
--11-3. INSERT λ¬Έμ— λŒ€ν•΄μ„œ μ„€λͺ…ν•˜μ„Έμš”. 
          DML문에 포함됨 ->  컀밋, λ‘€λ°±ν•΄μ•Ό λ°˜μ˜λœλ‹€!
          
--11-4. dept ν…Œμ΄λΈ”에   λΆ€μ„œλ²ˆν˜Έ : 50, λΆ€μ„œλͺ…: QC λ‘œ μƒˆλ‘œμš΄ λΆ€μ„œλ₯Ό μ €μž₯ν•˜μ„Έμš”. 
--
--12. DML( INSERT, UPDATE, DELETE ) λ¬Έ μ‹€ν–‰ ν›„ λ°˜λ“œμ‹œ λ¬΄μ—‡μ„ ν•΄ μ£Όμ–΄μ•Ό ν•˜λ‚˜ ? μ»€λ°‹, λ‘€λ°± (μ€‘μš”!!!!!!!!!!!!!!!!)
--
--13. SQL μ§‘ν•© μ—°μ‚°μžμ˜ μ’…λ₯˜μ™€ μ„€λͺ…을 ν•˜μ„Έμš”
--       UNION [ALL] , INTERSECT , MINUS
μ§‘ν•©μ—°μ‚°μž 쑰건
           μ»¬λŸΌμˆ˜ λ™μΌ
           μžλ£Œν˜• λ™μΌ

--13-2. insa ν…Œμ΄λΈ”μ—μ„œ 
--   γ„±. μΆœμ‹ μ§€μ—­(city)κ°€ μΈμ²œμΈ μ‚¬μ›μ˜ μ •λ³΄(name,city,buseo)λ₯Ό μ‘°νšŒν•˜κ³ 
--   γ„΄. λΆ€μ„œ(buseo)κ°€ κ°œλ°œλΆ€μΈ μ‚¬μ›μ˜ μ •λ³΄(name,city,buseo)λ₯Ό μ‘°νšŒν•΄μ„œ
--   λ‘ κ²°κ³Όλ¬Όμ˜ ν•©μ§‘ν•©(UNION)을 μΆœλ ₯ν•˜λŠ” μΏΌλ¦¬λ₯Ό μž‘μ„±ν•˜μ„Έμš”. 
--   ( μ‘°κ±΄ : SET(집합) μ—°μ‚°μž μ‚¬μš© )

 

--14. insa ν…Œμ΄λΈ”μ—μ„œ  μ£Όλ―Όλ²ˆν˜Έλ₯Ό μ•„λž˜μ™€ 같이 '-' 문자λ₯Ό μ œκ±°ν•΄μ„œ 좜λ ₯
--    [μ‹€ν–‰κ²°κ³Ό]
--    NAME                SSN                         SSN_2
--    ν™κΈΈλ™     770423-1022432      7704231022432
--    μ΄μˆœμ‹      800423-1544236     8004231544236
--    μ΄μˆœμ•      770922-2312547       7709222312547   

    SELECT  SUBSTR(ssn, 1, 6) || SUBSTR( ssn, -7 )
            , REPLACE( ssn, '-' , '')
            , REPLACE( ssn, '-' )
    FROM insa;

(볡슡끝)
--------------------------------------------------------------------------------------------
였라클 μ—°μ‚°μž
였라클 ν•¨μˆ˜
였라클 μžλ£Œν˜•
--------------------------------------------------------------------------------------------

1. μ—°μ‚°μž( Operator ) - Where μ ˆμ—μ„œ μ‚¬μš©.

1) 비ꡐ μ—°μ‚°μž : 숫자, 문자, λ‚ μ§œ 비ꡐ
= != <> ^= > < >= <=
WHERE deptno = 10;
WHERE deptno != 10;
WHERE ename = 'SMITH';
WHERE sal >= 1000 AND sal <= 2000;
WHERE sal BETWEEN 1000 AND 2000;
WHERE hiredate >= '1981.01.1' AND hiredate <= '1981.12.31' -- 81년도 μž…μ‚¬
2) λ…Όλ¦¬μ—°μ‚°μž AND OR NOT
3) SQL μ—°μ‚°μž
BETWEEN AND
IN
LIKE
IS NULL
ANY, ALL, SOME, EXISTS : WHERE μ„œλΈŒμΏΌλ¦¬ X
4)*** SET(집합) μ—°μ‚°μž ***
UNION 합집합 -- 첫 쿼리와 두 μΏΌλ¦¬μ—μ„œ μ€‘λ³΅λ˜μ§€ μ•Šκ²Œ λͺ¨λ“  행을 μΆ”μΆœ
UNION ALL 합집합 -- 첫 쿼리와 두 μΏΌλ¦¬μ—μ„œ 쀑볡을 ν—ˆμš©ν•œ λͺ¨λ“  행을 μΆ”μΆœ
INTERSECT ꡐ집합
MINUS 차집합
 
ex) UNION
20 7369 SMITH CLERK
20 7566 JONES MANAGER ***
20 7902 FORD ANALYST
+
20 7566 JONES MANAGER ***
30 7698 BLAKE MANAGER
10 7782 CLARK MANAGER
=
10 7782 CLARK MANAGER
20 7369 SMITH CLERK
20 7566 JONES MANAGER ***
20 7902 FORD ANALYST
30 7698 BLAKE MANAGER
SELECT deptno, empno, ename, job
FROM emp
WHERE deptno = 20
 
예) 컬럼 μˆ˜λ„ 1개둜 λ™μΌν•˜κ³  μžλ£Œν˜• number λ™μΌν•˜κΈ° λ•Œλ¬Έμ— UNION κ°€λŠ₯ν•˜λ‹€.
-- ORA-01790: expression must have same datatype as corresponding expression
-- ORA-01789: query block has incorrect number of result columns
-- 쿼리 λΈ”λŸ­μ΄ 잘λͺ»λœ κ²°κ³Ό μ—΄(컬럼) μˆ˜κ°€ μžˆλ‹€.
SELECT empno -- empno
FROM emp
UNION
SELECT deptno, dname --dname --deptno
FROM dept;
 
문제) insaν…Œμ΄λΈ”μ—μ„œ μΆœμƒμ§€ '인천' 이고 λΆ€μ„œ 'κ°œλ°œλΆ€' 사원 쑰회.
SELECT name, city, buseo
FROM insa
WHERE city = '인천' AND buseo = 'κ°œλ°œλΆ€';
-- ( κΈ°μ–΅ ) μœ„ μ•„λž˜ κ°™μŒ
SELECT name, city, buseo
FROM insa
WHERE city = '인천'

INTERSECT

SELECT name, city, buseo
FROM insa
WHERE buseo = 'κ°œλ°œλΆ€';
 
5) multi set μ—°μ‚°μž - 두 개의 nested table을 ν•˜λ‚˜μ˜ nested table둜 combine ν•˜λŠ” 것 X
6) 계측적 질의 μ—°μ‚°μž : PRIOR, CONNECT_BY_ROOT μ—°μ‚°μž.
7) μ—°κ²° μ—°μ‚°μž : || ν•˜λ‚˜μ˜ 컬럼과 λ‹€λ₯Έ 컬럼,
8) μ‚°μˆ  μ—°μ‚°μž
SELECT 5 + 3
, 5 - 3
, 5 * 3
--, 5 / 3 -- 1.66666666666666666666666666666666666667
-- , 5 % 3 -- ORA-00911: invalid character -> λ‚˜λ¨Έμ§€λŠ” MOD 둜 ν•΄μ€˜μ•Όν•¨
--, MOD( 5, 3)
-- , 5 / 0 -- ORA-01476: divisor is equal to zero // 0으둜 λ‚˜λˆŒ 수 μ—†μŒ
--, MOD( 5, 0 ) -- 5
, 5 + 'A' -- ORA-01722: invalid number
FROM dual;
FROM emp; -- emp ν–‰ 갯수 만큼 8
FROM dept; -- dept ν–‰ 갯수 만큼 8
μ°Έκ³ )

μž„μ‹œ κ²°κ³Όκ°’ ν™•μΈν•˜λŠ” ν…Œμ΄λΈ”

SELECT 5+3
FROM dual;
 
9) μ‚¬μš©μž μ •μ˜ μ—°μ‚°μž CREATE OPERATOR μ—°μ‚°μž 생성할 수 μžˆλ‹€.
10) μ—°μ‚°μž μš°μ„  μˆœμœ„
ex) μˆœμ„œ
where job='SALESMAN' AND sal >= 1500 OR job='PRESIDENT';
(1) λΉ„κ΅μ—°μ‚°μž 각각(=,>=,=)
(2) λ…Όλ¦¬μ—°μ‚°μž 각각 (AND, OR)
 
11) floating-point condition ( 뢀동 μ†Œμˆ˜μ  쑰건 ) - IS [NOT] NAN, IS [NOT] INFINITE
IS [NOT] NULL 널 체크
WHERE mgr IS NULL;
IS NAN; -- Not A Number 
 
--------------------------------------------------------------------------------------------

2. 였라클 ν•¨μˆ˜ 

1. ν•¨μˆ˜ ?
λ³΅μž‘ν•œ 쿼리문 + 반볡(자주) μ‚¬μš© -> κ°„λ‹¨ν•˜κ²Œ 처리 λͺ©μ μœΌλ‘œ μ‚¬μš©ν•œ 것.
μžλ°” ν•¨μˆ˜ ? μ„  κΈ‹κΈ° 4번( 반볡 ) X 50
반볡적인 μ½”λ”© -> ν•¨μˆ˜(λ©”μ„œλ“œ) μ„ μ–Έ + 호좜
3가지: κΈ°λŠ₯, λ§€κ°œλ³€μˆ˜, 리턴값(μžλ£Œν˜•)
 
2. ν•¨μˆ˜μ˜ κΈ°λŠ₯
1) 계산 ν•¨μˆ˜
2) 데이터 μˆ˜μ •
3) 그룹의 κ²°κ³Ό 좜λ ₯
4) λ‚ μ§œ-> ν˜•μ‹ λ¬Έμžμ—΄ λ³€κ²½ TO_CHAR(λ‚ μ§œ, 'YYYY')
5) 컬럼 데이터 νƒ€μž…μ„ λ³€κ²½ ( ν˜•λ³€ν™˜ ) TO_NUMBER( λ¬Έμžμ—΄, λ‚ μ§œ )
 
3. ν•¨μˆ˜μ˜ μœ ν˜•(μ’…λ₯˜)
1) 단일행 ν•¨μˆ˜ : 각 ν–‰λ§ˆλ‹€ 처리 κ²°κ³Ό.
2) λ³΅μˆ˜ν–‰ ν•¨μˆ˜ : μ—¬λŸ¬ ν–‰(κ·Έλ£Ή) -> ν•œ 개의 κ²°κ³Ό ( == κ·Έλ£Ήν•¨μˆ˜ )
--------------------------------------------------------------------------------------------
4. 숫자 ν•¨μˆ˜

1). ROUND( number ) : μˆ«μžκ°’을  [νŠΉμ • μœ„μΉ˜]μ—μ„œ λ°˜μ˜¬λ¦Όν•˜μ—¬ λ¦¬ν„΄ν•œλ‹€
ν˜•μ‹)
   ROUND( n  [ ,m ] )

   SELECT    3.141592
           , ROUND(  3.141592 )  a -- m μƒλž΅λœ κ²½μš°μ—λŠ” μ†Œμˆ˜μ  첫 번째 자리 반올림.
           , ROUND(  3.141592,  0 ) b -- m =0 κ²½μš°μ—λŠ” μ†Œμˆ˜μ  첫 번째 자리 반올림.
           , ROUND(  3.141592,  2 ) c -- m+1 μœ„μΉ˜μ—μ„œ 반올림 
           , ROUND(  3.141592,  -1 ) d
           , ROUND( 12345  , -1 ) e  -- 일
           , ROUND( 12345  , -2 ) f  -- μ‹­
           , ROUND( 12345  , -3 ) g  -- λ°±
   FROM dual;

 

 

 > TRUNC 와 FLOOR 두 μ ˆμ‚­ν•¨μˆ˜μ˜ 차이점 ? 
  
2) TRUNC( number )  -- νŠΉμ • μœ„μΉ˜μ—μ„œ μ ˆμ‚­ 
ν˜•μ‹)
   TRUNC( n  [ ,m ] )
    

   SELECT    3.141592
           , TRUNC(  3.141592 )  a -- m μƒλž΅λœ κ²½μš°μ—λŠ” μ†Œμˆ˜μ  첫 번째 자리 μ ˆμ‚­
           , TRUNC(  3.141592,  0 ) b -- m =0 κ²½μš°μ—λŠ” μ†Œμˆ˜μ  첫 번째 자리 μ ˆμ‚­.
           , TRUNC(  3.141592,  2 ) c -- m+1 μœ„μΉ˜μ—μ„œ μ ˆμ‚­ 
           , TRUNC(  3.141592,  -1 ) d
            , TRUNC( 12345  , -1 ) e  -- 일
            , TRUNC( 12345  , -2 ) f  -- μ‹­
            , TRUNC( 12345  , -3 ) g  -- λ°±
   FROM dual;


   
3) CEIL : νŠΉμ •μœ„μΉ˜X , μ†Œμˆ«μ  μ²« λ²ˆμ§Έ μžλ¦¬μ—μ„œλ§Œ   μ˜¬λ¦Ό ( μ •μˆ˜λ₯Ό λ¦¬ν„΄ )   

SELECT CEIL( 3.141592 ), FLOOR( 3.59 )
FROM dual;



4) FLOOR : νŠΉμ •μœ„μΉ˜X , μ†Œμˆ«μ  μ²« λ²ˆμ§Έ μžλ¦¬μ—μ„œλ§Œ  μ ˆμ‚­

5) MOD 
6) ABS                 -- Math.abs()

SELECT 100,   ABS( 100 ), ABS( -100 )
FROM dual;



7) SIGN()  μˆ«μžκ°’μ˜ λΆ€ν˜Έμ— λ”°λΌ 1 , 0 , -1 μ˜ κ°’을 λ¦¬ν„΄ν•œλ‹€. 
    ν˜•μ‹)    SIGN( n )
           n μ΄ μ–‘μˆ˜μ΄λ©΄    1
                μŒμˆ˜μ΄λ©΄   -1
                0이면      0

   SELECT SIGN( 100), SIGN( -100 ), SIGN( 0 )             
   FROM dual;


  8) POWER()   2^3
  9) SQRT()   μ œκ³±κ·Ό  f

 SELECT POWER(2,3) , POWER( 2, -3)
        , SQRT( 4) , SQRT(2)
  FROM dual;

  10) SIN(), COS(), TAN(), LOG(a,b), LN() μžμ—°λ‘œκ·Έ λ“±λ“±

  
  [문제]
  μ΄κ²Œμ‹œκΈ€μˆ˜ : 235 / ν•œνŽ˜μ΄μ§€   : 10 
  μ΄νŽ˜μ΄μ§€μˆ˜ ? 23νŽ˜μ΄μ§€ + 1νŽ˜μ΄μ§€( 5κ²Œμ‹œκΈ€ ) = 24νŽ˜μ΄μ§€

   SELECT  CEIL( 235/10 )   "μ΄νŽ˜μ΄μ§€μˆ˜"   -- 23.5 νŽ˜μ΄μ§€
   FROM dual;

-> λ‚˜λ¨Έμ§€κ°€ λͺ‡μ΄λ“  무쑰건 μ˜¬λ €μ€˜μ•Όν•¨! (κ²Œμ‹œκΈ€ ν•˜λ‚˜λΌλ„ λ‚¨μœΌλ©΄ νŽ˜μ΄μ§€ +1)
   

   [문제] emp ν…Œμ΄λΈ”μ—μ„œ κ° μ‚¬μ›λ“€μ˜ sal κ°€ ν‰κ· sal λ³΄λ‹€ λ§ŽμœΌλ©΄ "λ§Žλ‹€", λ³΄λ‹€ μ μœΌλ©΄ "적닀"라고 μΆœλ ₯
     empno, ename, sal, avg_sal, ν‰κ°€
                                  λ§Žλ‹€
                                  μ λ‹€
   [풀이]   

 SELECT t.*
        ,  '평균보닀 SALκ°€ ' || REPLACE(  REPLACE( SIGN( t.sal - t.avg_sal ), -1, '적닀' ) , 1 , 'λ§Žλ‹€' )  평가        -- 0  'O'         1  'X'  NULLIF  
   FROM (
               SELECT empno, ename, sal
                   -- , AVG( sal )
                  , (  SELECT  ROUND(  AVG(sal) , 2 )    FROM emp )  avg_sal 
               FROM emp
        ) t ;


   --
 μ•„λž˜λ‘œλ„ κ°€λŠ₯!

 SELECT empno, ename, sal , '평균보닀 SALκ°€ λ§Žλ‹€'
   FROM emp
   WHERE sal > (  SELECT  ROUND(  AVG(sal) , 2 )    FROM emp ) 
   UNION
   SELECT empno, ename, sal , '평균보닀 SALκ°€ 적닀'
   FROM emp
   WHERE sal < (  SELECT  ROUND(  AVG(sal) , 2 )    FROM emp );
   UNION
   SELECT empno, ename, sal , '평균보닀 SALκ°€ κ°™λ‹€'
   FROM emp
   WHERE sal = (  SELECT  ROUND(  AVG(sal) , 2 )    FROM emp );

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

5. 문자 ν•¨μˆ˜

[ λ¬Έμž ν•¨μˆ˜ ]
1) UPPER(), LOWER(), INITCAP()

SELECT ename
         , LOWER( ename )
         , INITCAP( ename )  // 첫번째만 λŒ€λ¬Έμžλ‘œ
         , UPPER( ename )
FROM emp;



2) LENGTH() : λ¬Έμžμ—΄μ˜ 길이λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

SELECT DISTINCT job , LENGTH( job )
FROM emp;

--  String name ="Abc";
--  name.length()



3) CONCAT :    ||λž‘ 같은 μ—­ν• 

CONCAT( dname , 'X')


4) SUBSTR   == substring()λž‘ 같은 μ—­ν• 
   SUBSTR( λ¬Έμžμ—΄, μ‹œμž‘μœ„μΉ˜, κΈΈμ΄ )
   

   SELECT name, ssn
       , SUBSTR( ssn, 0, 6 )
       , SUBSTR( ssn, -7 )
       , SUBSTR( ssn, -7, 1 )  성별
       , SUBSTR( ssn, 0, 2 )  년도
       , SUBSTR( ssn, 3, 2 )  μ›”
       , SUBSTR( ssn, 5, 2 )  일
   FROM insa;


   
 5) INSTR - λ¬Έμžμ—΄ 쀑 μ§€μ •λœ λ¬Έμžκ°’μ˜ μœ„μΉ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
   -- JAVA:  indexOf(), lastIndexOf() -1
    ν˜•μ‹)
   INSTR ( string, substring [, position [,occurrence] ] )
   0 μ°ΎλŠ”λ¬Έμžμ—΄μ΄ μ—†λ‹€.
   μ°Ύμ€ μœ„μΉ˜ κ°€    1λΆ€ν„° μ‹œμž‘ν•œλ‹€. 
   
  ex) λΆ€μ„œλͺ…에   T λ¬Έμžμ—΄μ΄ μžˆλŠ” 지 체크 + μΈλ±μŠ€λ°˜ν™˜, μ—†μœΌλ©΄ 0
 

  SELECT dname
        , INSTR(  dname , 'T' )
  FROM dept;


  λ‘ λ²ˆμ§Έ C의 μœ„μΉ˜λ₯Ό  μ°Ύκ³  μ‹Άλ‹€λ©΄...

  SELECT dname
        , INSTR(  dname , 'O' , 2 )
  FROM dept;


  -- 

  SELECT  'corporate floor'
        , INSTR(  'corporate floor', 'or'  )  -- 첫 번째 or  2
        , INSTR(  'corporate floor', 'or' , 3  ) -- 3번째 μœ„μΉ˜μ—μ„œ or μ°ΎλŠ”λ‹€   5
        , INSTR(  'corporate floor', 'or' , 3 , 2  ) -- 14
                                          -- lastIndexOf()    
        , INSTR(  'corporate floor', 'or' , -3 , 2  ) -- 2
  FROM dual;


  
 -- μ „ν™”λ²ˆν˜Έ ν…Œμ΄λΈ” 생성 : TBL_TEL

 --      번호 컬럼
 CREATE TABLE
 ALTER TABLE
 DROP TABLE
 -- ν…Œμ΄λΈ” 생성 확인
 SELECT *
 FROM tabs;
 
INSERT INTO "SCOTT"."TBL_TEL" (NO, TEL) VALUES ('1', '02)123-4567');
INSERT INTO "SCOTT"."TBL_TEL" (NO, TEL) VALUES ('2', '054)7899-5645');
INSERT INTO "SCOTT"."TBL_TEL" (NO, TEL) VALUES ('3', '031)9874-2932');
COMMIT;

SELECT *
FROM tbl_tel;

 

[문제]  tbl_tel ν…Œμ΄λΈ”μ—μ„œ μ „ν™”λ²ˆν˜Έ
μ§€μ—­λ²ˆν˜Έ
μ „λ²ˆ μ•žμžλ¦¬
μ „λ²ˆ λ’€μžλ¦¬
좜λ ₯.

SELECT no, tel
     , INSTR( tel, ')')  ")μœ„μΉ˜"
     , INSTR( tel, '-')  "-μœ„μΉ˜"
     , SUBSTR( tel, 1, INSTR( tel, ')')-1 ) "μ§€μ—­λ²ˆν˜Έ"
     , SUBSTR( tel, INSTR( tel, ')') + 1 ,  INSTR( tel, '-') - INSTR( tel, ')') -1 ) "μ•žμžλ¦¬"
     , SUBSTR( tel, INSTR( tel, '-') + 1  ) "λ’·μžλ¦¬"
FROM tbl_tel;

[문제]
 1)
   UPDATE tbl_tel
   SET tel =   REPLACE( tel, ')', '-' );
   COMMIT;
 2)
 SELECT *
 FROM tbl_tel;
 
  3) μ§€μ—­λ²ˆν˜Έ,   μ•žμžλ¦¬, λ’·μžλ¦¬
  -- ORA-00904: "T"."F_BAR": invalid identifier
  SELECT t.no, t.tel 
     --, t.f_bar
      ,  SUBSTR( t.tel, 1, t.f_bar-1)  "μ§€μ—­λ²ˆν˜Έ"
      ,  SUBSTR( t.tel, t.f_bar+1, t."s_bar"- t.f_bar-1)  "μ•žμžλ¦¬"
      ,  SUBSTR( t.tel, t."s_bar"+1 )  "λ’€μžλ¦¬"
  FROM (
             SELECT no, tel
                 , INSTR( tel, '-')  f_bar
                 , INSTR( tel, '-', -1)  "s_bar"
             FROM tbl_tel
       ) t ;



 6) RPAD / LPAD
    μ§€μ •λœ κΈΈμ΄μ—μ„œ λ¬Έμžκ°’을 μ±„μš°κ³  λ‚¨μ€ κ³΅κ°„(우/쒌)을 νŠΉμ •κ°’μœΌλ‘œ μ±„μš°λŠ” ν•¨μˆ˜
    
    γ€ν˜•μ‹γ€‘
      RPAD (expr1, n [, expr2] )


   μ˜ˆ)

   SELECT ename, sal + NVL( comm, 0) pay
            , LPAD(  '\' || ( sal + NVL( comm, 0)),  10 , '*' ) -- Left μ™Όμͺ½ λ‚¨λŠ” 곳을 νŠΉμ •κ°’μœΌλ‘œ μ±„μš°κ² λ‹€.
            , RPAD(  '\' || ( sal + NVL( comm, 0)),  10 , '*' )
   FROM emp;


   μ˜ˆ)  HR

   select last_name, RPAD(' ',salary/1000, '*') "Salary"
   from employees
   where department_id = 80
   order by last_name, "Salary";

 

   
                 100 κΈ°μ€€μœΌλ‘œ λ³„ν•œκ°œ μΆœλ ₯ κ·Έλž˜ν”„ 

   SELECT ename, sal
          , ROUND( sal/ 100 ) "#갯수"
          , RPAD( ' ', ROUND( sal/ 100 ) + 1, '#'  )
   FROM emp;



 7) ASCII( char )  μ§€μ •ν•œ 숫자 λ˜λŠ” 문자의   ASCII μ½”λ“œκ°’μ„ λ¦¬ν„΄ν•˜λŠ” ν•¨μˆ˜
 

 SELECT ASCII( 'A' ) -- 65
  , ASCII( 'a' ) -- 65
  , ASCII( 0 ) -- '0' ->  48
 FROM dual;


 
  [문제] ename μ˜ λ‘ λ²ˆμ§Έ λ¬Έμžμ˜ ASCII μ„ μΆœλ ₯ν•˜λŠ” μΏΌλ¦¬ μž‘μ„±ν•˜μž. 

  SELECT ename
    , SUBSTR( ename, 2, 1 )
    , ASCII(SUBSTR( ename, 2, 1 ))
  FROM emp;


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

6. λ‚ μ§œ ν•¨μˆ˜μ˜ μ’…λ₯˜

[ λ‚ μ§œ ν•¨μˆ˜ ]

1) ROUND( date )  ***  μ •μ˜€λ₯Ό κΈ°μ€€μœΌλ‘œ λ‚ μ§œλ₯Ό λ°˜μ˜¬λ¦Όν•˜μ—¬ λ¦¬ν„΄ν•œλ‹€. 
  ν˜•μ‹)
   ROUND( date [, fmt ] ) 
   

   SELECT 
          SYSDATE
        , ROUND( SYSDATE ) -- μ •μ˜€ X
        , ROUND( SYSDATE, 'DD' )  --  μ •μ˜€ X (μœ„μ—λž‘ κ°™μŒ)
        -- X μš”μΌ , ROUND( SYSDATE, 'DAY' )  -- (μš”μΌμ΄κΈ°λ•Œλ¬Έμ— X)
        , ROUND( SYSDATE, 'MONTH' ) --   [15일]  29일 -> 10/1
        , ROUND( SYSDATE, 'YEAR' )  --   [6μ›”]   9μ›”  -> 23/01/01
   FROM dual;



2) TRUNC( date ) *** μ‹œκ°„.λΆ„.초,MS 00:00:00.000         μƒμΌμ§€λ‚¬λ‹ˆ? = μ‹œκ°„ ν•„μš”μ—†μ΄ λ‚ μ§œλ§Œ μ‚¬μš©ν• λ•Œ   
 SELECT CURRENT_TIMESTAMP
     , TRUNC( CURRENT_TIMESTAMP )
 FROM dual;

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

7. datetime μ’…λ₯˜

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

8. ν˜• λ³€ν™˜ ν•¨μˆ˜ μ’…λ₯˜

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

9. 일반 ν•¨μˆ˜ & 10. μ •κ·œ ν‘œν˜„μ‹ ν•¨μˆ˜

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

11. κ·Έλ£Ή ν•¨μˆ˜ == λ³΅μˆ˜ν˜• ν•¨μˆ˜


1) COUNT ν•¨μˆ˜ : ν–‰(λ ˆμ½”λ“œ)의 갯수λ₯Ό λ¦¬ν„΄ν•œλ‹€. 
   COUNT(*)  : NULL κ°’을 ν¬ν•¨ν•œ κ°―수λ₯Ό λ¦¬ν„΄ν•œλ‹€. 
  ν˜•μ‹) 
  COUNT( [*|DISTINCT|ALL] μ»¬λŸΌλͺ…)  [ OVER μ ˆ ]
  

  SELECT COUNT( empno ), COUNT( deptno ) , COUNT( sal ) , COUNT( comm )  -- NULL 포함X 갯수
   , COUNT( * )
  FROM emp;
  
  SELECT COUNT(*) "10번 μ‚¬μ›μˆ˜"
  FROM emp
  WHERE deptno = 10;


  
2) SUM() : NULL을 μ œμ™Έν•œ ν•©μ„ λ¦¬ν„΄ν•œλ‹€. 
  ν˜•μ‹) SUM( [DISTINCT|ALL]  expr ) [OVER 절]

 

emp ν…Œμ΄λΈ”μ—μ„œ  μ΄ sal ν•© 

    SELECT SUM( sal )  -- 24925
    FROM emp;


    
    λ¬Έμ œ] emp ν…Œμ΄λΈ”μ—μ„œ  μ‚¬μ›μ˜ κΈ°λ³ΈκΈ‰(sal)의 ν‰κ· 
    SELECT COUNT(*) FROM emp;  -- 12
    -- ORA-00937: not a single-group group function   νŒ€ν”„λ‘œμ νŠΈ μ—λŸ¬ μ§ˆλ¬Έ *****
    -- λ³΅μˆ˜ν–‰ ν•¨μˆ˜
    -- λ‹¨μΌν–‰ ν•¨μˆ˜  Single-row ν•¨μˆ˜
    -- SELECT SUM(sal) /  (  SELECT COUNT(*) FROM emp  )// μ•ˆλ¨! κ·Έλƒ₯ λ°”λ‘œ COUNT(*)라고 ν•˜λ©΄λ¨

  [μ—λŸ¬ μ›μΈ]
  -- ORA-00937: not a single-group group function   νŒ€ν”„λ‘œμ νŠΈ μ—λŸ¬ μ§ˆλ¬Έ *****
  SELECT SUM(sal)    /  (  SELECT COUNT(*) FROM emp  )
  FROM emp;
  
2850
2450         λ³΅μˆ˜ν–‰ν•¨μˆ˜(κ·Έλ£Ήν•¨μˆ˜)   SUM             2XXXX
5000
1500

 -- ORA-00937: not a single-group group function *******
 -- κ·Έλ£Ήν•¨μˆ˜λŠ” μΌλ°˜μ»¬λŸΌν•˜κ³  μ‚¬μš©  X   
  SELECT SUM(sal) , deptno // 같이 λͺ»μ”€!
  FROM emp
  
[문제] emp ν…Œμ΄λΈ”  μ΄ μ‚¬μ›μˆ˜ μΆœλ ₯

SELECT COUNT(*), SUM( sal  + NVL( comm, 0 )  )
FROM emp;


[문제] emp ν…Œμ΄λΈ”μ—μ„œ κ° λΆ€μ„œλ³„ μ‚¬μ›μˆ˜ μΆœλ ₯

SELECT *
FROM dept;
SELECT '10'  , COUNT( * ) 
FROM emp
WHERE deptno = 10
UNION ALL
SELECT '20'  ,COUNT( * ) 
FROM emp
WHERE deptno = 20
UNION ALL
SELECT '30'  , COUNT( * ) 
FROM emp
WHERE deptno = 30
UNION ALL
SELECT '40'  ,COUNT( * ) 
FROM emp
WHERE deptno = 40
UNION ALL
SELECT ''  ,COUNT( * ) 
FROM emp ;


-- GROUP BY μ ˆ  + μ΄ν•©, λͺ‡λͺ…, ν‰κ· , μ§‘κ³„ν•¨μˆ˜
-- λΆ€μ„œλ³„ μ‚¬μ›μˆ˜ μ‘°νšŒ

SELECT deptno,  COUNT(*)
FROM emp
GROUP BY deptno
ORDER BY deptno ASC;



3) AVG() NULL값을 μ œμ™Έν•œ ν–‰μ˜ ν‰κ· μ„ λ¦¬ν„΄
γ€ν˜•μ‹γ€‘
   AVG( [DISTINCT ¦ ALL] μ»¬λŸΌλͺ…)
      [ [OVER] (analytic 절)]

 SELECT SUM( sal ) , COUNT(*)
      , SUM( sal ) / COUNT(*) avg  -- 평균
      , AVG( sal ) 
 FROM emp;

λ‹€λ₯Έ 이유 : 평균값을 λ‚Ό λ•Œ sal 이 null일 경우 점수λ₯Ό μ œμ™Έν•˜κ³  SUM이 되기 λ•Œλ¬Έμ— COUNTμ—μ„œ nλͺ…을 λΉΌμ€˜μ•Όν•¨
 
 [ λ¬Έμ œ ]  μ»€λ―Έμ…˜μ˜ ν‰κ·  κ³„μ‚°  *****
 -- μ™œ ? NULL μ œμ™Έν•œ ν‰κ· ,ν•©,λΆ„μ‚°,ν‘œμ€€νŽΈμ°¨ λ“±λ“±

 SELECT SUM( comm )
      , ROUND(  SUM( comm ) / COUNT(*) , 2 )  -- μ†Œμˆ˜μ  3번째 자리 반올림
      , SUM( comm ) / COUNT( comm )
      , AVG( comm ) comm_avg
 --SELECT comm      
 FROM emp;


 
 [ λ¬Έμ œ ] emp ν…Œμ΄λΈ”μ—μ„œ κΈ°λ³ΈκΈ‰μ΄ κ°€μž₯ λ§Žμ΄/적게 λ°›λŠ” κΈˆμ•‘?
 γ€ν˜•μ‹γ€‘
      MAX ([{DISTINCT ¦ ALL}] expr) 
           [OVER(analytic_clause)]

 SELECT MAX(sal) , MIN(sal)
 FROM emp;

 

SELECT STDDEV( sal )   -- ν‘œμ€€νŽΈμ°¨ ?
    , VARIANCE( sal )  -- λΆ„μ‚°  ?
FROM emp;



[문제] emp ν…Œμ΄λΈ”μ—μ„œ κΈ‰μ—¬(sal)λ₯Ό κ°€μž₯ 많이 λ°›λŠ” μ‚¬μ›μ˜ μ‚¬μ›λ²ˆν˜Έ,사원λͺ…, λΆ€μ„œλ²ˆν˜Έ, sal 쑰회
-- μ„œλΈŒμΏΌλ¦¬λŠ” κ΄„ν˜Έ μ‚¬μš©.

SELECT empno, ename, deptno, sal
FROM emp
WHERE sal = ( SELECT MAX(sal) FROM emp );


-- ORA-00934: group function is not allowed here
--SELECT empno, ename, deptno, sal
--FROM emp
--WHERE sal = MAX(sal); // μ•ˆλ¨~!

[문제] MAX(Sal), Min(sal) 
7839   KING   10   5000
7369   SMITH   20   800

SELECT empno, ename, deptno, sal
FROM emp
WHERE sal IN ( (SELECT MIN(sal) FROM emp), (SELECT MAX(sal) FROM emp) );
WHERE sal = ( SELECT MIN(sal) FROM emp ) OR sal = ( SELECT MAX(sal) FROM emp );

μ•„λž˜λ„ κ°€λŠ₯

SELECT 'μ΅œμ €', empno, ename, deptno,   sal
FROM emp
WHERE sal = ( SELECT MIN(sal) FROM emp ) 
UNION ALL
SELECT '졜고', empno, ename, deptno, sal
FROM emp
WHERE sal = ( SELECT MAX(sal) FROM emp );

  • 넀이버 λΈ”λŸ¬κ·Έ κ³΅μœ ν•˜κΈ°
  • 넀이버 λ°΄λ“œμ— κ³΅μœ ν•˜κΈ°
  • 페이슀뢁 κ³΅μœ ν•˜κΈ°
  • μΉ΄μΉ΄μ˜€μŠ€ν† λ¦¬ κ³΅μœ ν•˜κΈ°