[Day6] Oracle 6 [10/4]
--1. EMP ํ
์ด๋ธ์ ์ฌ์์๋ฅผ ์กฐํํ๋ ์ฟผ๋ฆฌ ์์ฑ.
์ง๊ณํจ์ == ๊ทธ๋ฃนํจ์ == ๋ณต์ํํจ์
COUNT(*) + NULL ํฌํจ
COUNT(์ปฌ๋ผ๋ช
) + NULL ์ ์ธ
STDDEV( ํ์ค ํธ์ฐจ )
VARIANCE( ๋ถ์ฐ )
SELECT COUNT(comm), COUNT(*) , SUM( sal ) , MAX(sal )
-- , empno *** ORA-00937: not a single-group group function
FROM emp;
๋ณต์ต) ์ด๊ธ์ฌํฉ, ํ๊ท ๊ธ์ฌ, ์ต๊ณ ๊ธ์ฌ์ก, ์ต์ ๊ธ์ฌ์ก ์กฐํ
์กฐ๊ฑด) pay = sal + comm
-- ์ธ๋ผ์ธ๋ทฐ
SELECT SUM( t.pay ) , AVG( t.pay ), MAX( t.pay ) , MIN( t.pay )
FROM (
SELECT sal + NVL( comm, 0 ) pay
FROM emp
) t;
-- WITH์
WITH
temp as (
SELECT sal + NVL( comm, 0 ) pay
FROM emp
)
SELECT SUM( t.pay ) , AVG( t.pay ), MAX( t.pay ) , MIN( t.pay )
FROM temp t;
-- ํ
์ด๋ธ ๋ณ์นญ์ ์ฌ์ฉ. (FROM temp t)
--2. ํ์ฌ ์์คํ
์ ๋ ์ง๋ฅผ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ ์์ฑ
์ค๋ผํด ๋ ์ง ์๋ฃํ : DATE , TIMESTAMP
๋ ์ง+ h,m,s + ms + ํ์์กด
SELECT SYSDATE -- ํจ์ 22/10/04
, CURRENT_TIMESTAMP -- 22/10/04 10:15:08.296000000 ASIA/SEOUL
FROM dual; -- PUBLIC ์๋
ธ๋
--3. SQL ์งํฉ ์ฐ์ฐ์์ ์ข
๋ฅ์ ์ค๋ช
์ ํ์ธ์
-- UNION, UNION ALL, INTERSECT, MINUS
-- ์ฃผ์์ฌํญ ) ์ปฌ๋ผ์ ๋์ผ, ์๋ฃํ ๋์ผ
--4. ํจ์ ์ค๋ช
-- ใฑ. ๋ฐ์ฌ๋ฆผ ํจ์๋ฅผ ์ ์ธํ์์ ์ ๊ณ ์ค๋ช
ํ์ธ์
ROUND( ๋ฐ์ฌ๋ฆผ๊ฐ[, ๋ฐ์ฌ๋ฆผ ์์น] )
3+1
-3
-- ใด. ์ ์ญ(๋ด๋ฆผ) ํจ์๋ฅผ ์ ์ธํ์์ ์ ๊ณ ์ค๋ช
ํ์ธ์.
FLOOR() ๋ฌด์กฐ๊ฑด ์์์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ์์ ์ ์ญ
TRUNC( a[, b] )
-- ใท. ์ ์(์ฌ๋ฆผ) ํจ์๋ฅผ ์ ์ธํ์์ ์ ๊ณ ์ค๋ช
ํ์ธ์.
CEIL()
--5. ๊ฒ์ํ์์ ์ด ๊ฒ์๊ธ ์๊ฐ : 65 ๊ฐ ์ด๊ณ ํ ํ์ด์ง์ : 15๊ฐ์ ๊ฒ์๊ธ ์ถ๋ ฅํ ๋
-- ์ด ํ์ด์ง ์๋ฅผ ๊ณ์ฐํ๋ ์ฟผ๋ฆฌ ์์ฑ. ( ์ ์ )
SELECT 65 / 15 --4.33333333333333333333333333333333333333
, CEIL( 65/ 15 ) ์ดํ์ด์ง์
FROM dual;
--6. emp ํ
์ด๋ธ์์ ์ฌ์๋ค์ ํ๊ท ๊ธ์ฌ๋ณด๋ค ๋ง์ ๊ธ์ฌ๋ฅผ ๋ฐ์ผ๋ฉด 1
-- ์ ์ ๊ธ์ฌ๋ฅผ ๋ฐ์ผ๋ฉด -1
-- ๊ฐ์ผ๋ฉด 0
-- ์ ์ถ๋ ฅํ๋ ์ฟผ๋ฆฌ ์์ฑ. ( SIGN ํจ์ )
SELECT t.ename, t.pay
-- PL + SQL == PL/SQL
-- , if( t.pay > t.avg_pay)
-- else if( t.pay < t.avg_pagy)
-- else
, SIGN( t.pay - t.avg_pay )
FROM (
SELECT ename, sal + NVL( comm, 0 ) pay
--, AVG( sal + NVL( comm, 0 ) ) avg_pay -- ORA-00937: not a single-group group function
, ( SELECT AVG( sal + NVL( comm, 0 ) ) FROM emp ) avg_pay
FROM emp
) t;
--7. insaํ
์ด๋ธ์์ 80๋
๋( 80๋
~89๋
์ )์ ์ถ์ํ ์ฌ์๋ค๋ง ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ ์์ฑ
-- ใฑ. LIKE ์ฌ์ฉ
-- ใด. REGEXP_LIKE ์ฌ์ฉ
-- ใท. BETWEEN ~ AND ์ฌ์ฉ
SELECT name, ssn
FROM insa
WHERE REGEXP_LIKE( ssn, '^8');
WHERE ssn LIKE '8%';
WHERE SUBSTR( ssn, 0, 2 ) BETWEEN 80 AND 89; -- 1889
--
--8. insa ํ
์ด๋ธ์์ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ฅผ 123456-1****** ํ์์ผ๋ก ์ถ๋ ฅํ์ธ์ . ( LPAD, RPAD ํจ์ ์ฌ์ฉ )
--[์คํ๊ฒฐ๊ณผ]
--ํ๊ธธ๋ 770423-1022432 770423-1******
--์ด์์ 800423-1544236 800423-1******
--์ด์์ 770922-2312547 770922-2******
RPAD()/ LPAD()
SELECT name, ssn
, SUBSTR( ssn, 0, 8 ) || '******'
, CONCAT( SUBSTR( ssn, 0, 8 ), '******' )
, RPAD( SUBSTR( ssn, 0, 8 ), 14 , '*' )
, LENGTH( ssn )
, RPAD( SUBSTR( ssn, 0, 8 ), LENGTH( ssn ) , '*' )
FROM insa;
--
--8-2. emp ํ
์ด๋ธ์์ 30๋ฒ ๋ถ์๋ง PAY๋ฅผ ๊ณ์ฐ ํ ๋ง๋๊ทธ๋ํ๋ฅผ ์๋์ ๊ฐ์ด ๊ทธ๋ฆฌ๋ ์ฟผ๋ฆฌ ์์ฑ
-- ( ํ์ํ ๋ถ๋ถ์ ๊ฒฐ๊ณผ ๋ถ์ํ์ธ์~ PAY๊ฐ 100 ๋จ์๋น # ํ๊ฐ , ๋ฐ์ฌ๋ฆผ์ฒ๋ฆฌ )
--[์คํ๊ฒฐ๊ณผ]
--DEPTNO ENAME PAY BAR_LENGTH
------------ ---------- ---------- ----------
--30 BLAKE 2850 29 #############################
--30 MARTIN 2650 27 ###########################
--30 ALLEN 1900 19 ###################
--30 WARD 1750 18 ##################
--30 TURNER 1500 15 ###############
--30 JAMES 950 10 ##########
SELECT deptno, ename, sal + NVL(comm, 0) pay
, ROUND( (sal + NVL(comm, 0))/ 100 ) bar_length
, RPAD( ' ', ROUND( (sal + NVL(comm, 0))/ 100 )+ 1, '#' )
FROM emp
WHERE deptno = 30
ORDER BY pay DESC;
--8-3. insa ํ
์ด๋ธ์์ ์ฃผ๋ฏผ๋ฒํธ๋ฅผ ์๋์ ๊ฐ์ด '-' ๋ฌธ์๋ฅผ ์ ๊ฑฐํด์ ์ถ๋ ฅ
--[์คํ๊ฒฐ๊ณผ]
--NAME SSN SSN_2
--ํ๊ธธ๋ 770423-1022432 7704231022432
--์ด์์ 800423-1544236 8004231544236
--์ด์์ 770922-2312547 7709222312547
SELECT name, ssn
, INSTR( ssn, '-' )
, SUBSTR( ssn, 0, 6 ) || SUBSTR( ssn, -7 )
, REPLACE( ssn, '-', '') -- *** JSP
FROM insa;
--9. ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ผ์ธ์ .
-- TRUNC( ์ซ์, [๋ ์ง] , ๋ฌธ์) ์ ์ญํจ์
SELECT TRUNC( SYSDATE, 'YEAR' ) 2022/01/01
, TRUNC( SYSDATE, 'MONTH' ) 2022/10/01
, TRUNC( SYSDATE ) 2022/10/04 00:00:00.0000 ***
FROM dual;
--10. emp ์์ comm ์ด null ์ด ์๋ ์ฌ์์ ์ถ๋ ฅ.
SELECT comm
FROM emp
WHERE comm IS NULL;
WHERE comm IS NOT NULL;
WHERE comm = null;
--
--11. emp ์์ ํ๊ท PAY ๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฐ ์ฌ์๋ค๋ง์ ๊ธ์ฌํฉ์ ์ถ๋ ฅ.
SELECT t.*
FROM (
SELECT ename, sal, comm, sal + NVL(comm, 0) pay
, ( SELECT AVG( sal + NVL(comm, 0) ) FROM emp ) avg_pay
FROM emp
) t
WHERE t.pay >= t.avg_pay ;
--12. emp ํ
์ด๋ธ์์ ๊ธ์ฌ๋ฅผ ๊ฐ์ฅ ๋ง์ด ๋ฐ๋ ์ฌ์์ empno, ename, pay ๋ฅผ ์ถ๋ ฅ.
SELECT MAX( sal + NVL(comm, 0) ) max_pay
FROM emp;
SELECT deptno, ename, job, sal + NVL(comm, 0) pay
FROM emp
WHERE sal + NVL(comm, 0) = ( SELECT MAX( sal + NVL(comm, 0) ) max_pay FROM emp );
-- WHERE pay= 5000; -- ORA-00904: "PAY": invalid identifier
-- (๋ฌธ์ ) max_pay, min_pay ์ต๊ณ ,์ต์ ๊ธ์ฌ์ ํ์ธ
SELECT deptno, ename, job, sal + NVL(comm, 0) pay , '์ต์ ๊ธ์ฌ์'
FROM emp
WHERE sal + NVL(comm, 0) = ( SELECT MIN( sal + NVL(comm, 0) ) max_pay FROM emp )
UNION
SELECT deptno, ename, job, sal + NVL(comm, 0) pay , '์ต๊ณ ๊ธ์ฌ์'
FROM emp
WHERE sal + NVL(comm, 0) = ( SELECT MAX( sal + NVL(comm, 0) ) max_pay FROM emp );
-- 2
SELECT deptno, ename, job, sal + NVL(comm, 0) pay
FROM emp
WHERE sal + NVL(comm, 0) = ( SELECT MIN( sal + NVL(comm, 0) ) max_pay FROM emp )
OR
sal + NVL(comm, 0) = ( SELECT MAX( sal + NVL(comm, 0) ) max_pay FROM emp );
-- 3. IN SQL์ฐ์ฐ์
SELECT deptno, ename, job, sal + NVL(comm, 0) pay
FROM emp
WHERE sal + NVL(comm, 0) IN (
( SELECT MIN( sal + NVL(comm, 0) ) max_pay FROM emp )
, ( SELECT MAX( sal + NVL(comm, 0) ) max_pay FROM emp )
);
SQL์ฐ์ฐ์ : ANY, ALL, SOME, EXISTS
-- ์ต๊ณ ๊ธ์ฌ์
SELECT deptno, ename, job, sal + NVL(comm, 0) pay
FROM emp
WHERE sal + NVL(comm, 0) <= ALL( SELECT sal + NVL(comm, 0) FROM emp );
WHERE sal + NVL(comm, 0) >= ALL( SELECT sal + NVL(comm, 0) FROM emp );
WHERE sal + NVL(comm, 0) = ( SELECT MAX( sal + NVL(comm, 0) ) max_pay FROM emp );
--12-2. emp ํ
์ด๋ธ์์ ๊ฐ ๋ถ์๋ณ ๊ธ์ฌ๋ฅผ ๊ฐ์ฅ ๋ง์ด ๋ฐ๋ ์ฌ์์ pay๋ฅผ ์ถ๋ ฅ
-- java for( int i=10; i<=40; i+=10 ) PL/SQL
SELECT *
FROM emp
WHERE deptno = 10 AND sal + NVL(comm, 0) = (
SELECT MAX( sal + NVL(comm, 0) ) max_pay_10
FROM emp
WHERE deptno = 10
)
UNION
SELECT *
FROM emp
WHERE deptno = 20 AND sal + NVL(comm, 0) = (
SELECT MAX( sal + NVL(comm, 0) ) max_pay_10
FROM emp
WHERE deptno = 20
)
UNION
SELECT *
FROM emp
WHERE deptno = 30 AND sal + NVL(comm, 0) = (
SELECT MAX( sal + NVL(comm, 0) ) max_pay_10
FROM emp
WHERE deptno = 30
)
UNION
SELECT *
FROM emp
WHERE deptno = 40 AND sal + NVL(comm, 0) = (
SELECT MAX( sal + NVL(comm, 0) ) max_pay_10
FROM emp
WHERE deptno = 40
);
-- 2.
SELECT deptno
--, sal + NVL(comm, 0) -- 257ํ, 16์ด์์ ์ค๋ฅ ๋ฐ์, ORA-00979: not a GROUP BY expression
, MAX( sal + NVL(comm, 0) ) -- ๊ฐ ๋ถ์๋ณ ์ต๊ณ ๊ธ์ฌ์ก
, MIN( sal + NVL(comm, 0) ) -- ๊ฐ ๋ถ์๋ณ ์ต์ ๊ธ์ฌ์ก
, AVG( sal + NVL(comm, 0) ) -- ๊ฐ ๋ถ์๋ณ ํ๊ท ๊ธ์ฌ์ก
, SUM( sal + NVL(comm, 0) ) -- ๊ฐ ๋ถ์๋ณ ์ด ๊ธ์ฌ์ก
FROM emp
GROUP BY deptno -- ์ง๊ณ ํจ์
ORDER BY deptno ASC;
-- 3. ์๊ด๋( correlated ) ์๋ธ์ฟผ๋ฆฌ( subquery ) - [์ํ]
-- ใด sub์์ ๋ฆฌํดํ ๊ฐ์ main์์ ์ฌ์ฉํ๊ณ main์์ ๋ฆฌํดํ ๊ฐ์ ๋ค์ sub์ ์ฌ์ฉํจ
SELECT *
FROM emp a
WHERE a.sal + NVL(a.comm, 0) = (
SELECT MAX( b.sal + NVL(b.comm, 0) )
FROM emp b
WHERE b.deptno = a.deptno
)
ORDER BY a.deptno ASC ;
-- 4. ์์(RANK) ํจ์
-- 5. TOP - N ๋ฐฉ์
-- [ ๋ฌธ์ ํจ์ ]
ASCII() <-> CHR()
๋ฌธ์ <-> ASCII
SELECT ename
, SUBSTR( ename, 0, 1)
, ASCII( SUBSTR( ename, 0, 1) )
FROM emp;
SELECT ASCII(1) -- 49
, CHR( 49 )
FROM dual;
-- GREATEST(์ต๋์ ), LEAST( ์ต์ํ) ๋์ด๋ ๋ฌธ์ ์ค์ ๊ฐ์ฅ ํฐ ๊ฐ, ์์๊ฐ์ ๋ฆฌํดํ๋ ํจ์
SELECT GREATEST( 10, 20 )
, GREATEST( 10, 20, 30, 40, 50 )
, LEAST( 10, 20, 30, 40, 50 )
, GREATEST( 'KBS', 'MBC', 'SBS', 'JTBC' )
, LEAST( 'KBS', 'MBC', 'SBS', 'JTBC' )
FROM dual;
-- VSIZE( ๋ฌธ์ ) ์ง์ ๋ ๋ฌธ์์ด์ ํฌ๊ธฐ๋ฅผ ์ซ์๋ก ๋ฐํ.
SELECT VSIZE('a') -- ์ํ๋ฒณ ํ ๋ฌธ์ 1๋ฐ์ดํธ
, VSIZE('ํ') -- ํ๊ธ์ ํ ๋ฌธ์ 3๋ฐ์ดํธ
, ASCII('๊ฐ') -- 15380608
FROM dual;
-- [ ๋ ์ง ํจ์ ] --
SYSDATE
ROUND( ๋ ์ง )
TRUNC( ๋ ์ง )
--๋ ์ง + ์ซ์ = ์ซ์๋งํผ ์ผ์๊ฐ ๋ํด์ง ๋ ์ง
--๋ ์ง - ์ซ์ = ์ซ์๋งํผ ์ผ์๊ฐ ๋นผ์ง ๋ ์ง
--๋ ์ง + ์ซ์/24 = ๋ ์ง์ ์ซ์๋งํผ์ ์๊ฐ์ด ๋ํด์ง ๋ ์ง.
--๋ ์ง - ๋ ์ง = ๋ ๋ ์ง์ ์ฐจ์ด ์ผ ์
-- (๋ฌธ์ ) ์ค๋๋ถํฐ 10์ผ ํ์ ๋ง๋์.. ์ฝ์
-- (๋ฌธ์ ) ์ง๊ธ๋ถํฐ 2์๊ฐ ํ...
SELECT SYSDATE
,SYSDATE + 10
, SYSDATE - 3 -- 3์ผ์
, SYSDATE + 2/24 -- 2์๊ฐ ํ ๋ ์ง ๊ฐ์ฒด (์๊ฐํ์๋ ์๋จ)
-- , TO_CHAR( ์ซ์, ๋ ์ง, ๋ฌธ์ , 'ํ์' )
, TO_CHAR( SYSDATE + 2/24, 'YYYY.MM.DD HH24:MI:SS' )
FROM dual;
-- (๋ฌธ์ ) emp ํ
์ด๋ธ์์ ๊ฐ ์ฌ์์ ๊ทผ๋ฌด ์ผ์๋ฅผ ์กฐํ.
SELECT ename, hiredate
, SYSDATE
, CEIL( ABS(SYSDATE - hiredate) ) -- 1์๊ฐ์ด๋ผ๋ ๋์ผ๋ฉด CEIL
FROM emp;
-- [๋ฌธ์ ] ์๋ฃ์ผ๊น์ง ๋ช์ผ์ด ๋จ์๋์ง ? ๋ ์ง - ๋ ์ง = ์ผ์
-- ์๋ฃ์ผ 2023.01.18
SELECT SYSDATE
, '2023.01.18'
-- , '2023.01.18' - SYSDATE -- ORA-00932: inconsistent datatypes: expected CHAR got DATE
-- ์ผ์นํ์ง ์๋ ๋ฐ์ดํฐ์ ํ : ๋ฌธ์ ๋ ์ง
-- '2023.01.18' ๋ ์ง ์๋ฃํ์ด ์๋๊ณ ๋ฌธ์๋ก ์ธ์ํ๋ค.
-- ์ค๋ผํด ํ ๋ณํ : ๋ฌธ์ -> ๋ ์ง [๊ฒ์]
, CEIL( TO_DATE('2023.01.18') - SYSDATE ) "๋จ์ ์ผ ์ "
FROM dual;
SELECT 2 + TO_NUMBER( '2' )
, 2 + '2' -- ์๋ํ๋ณํ๋๊ธฐ์ ๊ตณ์ด TO_NUMBER() ๋ก ๋ณํ X
, TO_DATE('2023.01.18')
FROm dual;
ใํ์ใ
TO_DATE( char [,'fmt' [,'nlsparam']])
-- MONTHS_BETWEEN ๋ ๊ฐ์ ๋ ์ง ๊ฐ์ ๋ฌ์ ์ฐจ์ด ( ๊ฐ์์ )
-- ADD_MONTHS ํน์ ์๋ฅผ ๋ฌ์ ๋ํ ๋ ์ง
-- LAST_DAY ํน์ ๋ ์ง๊ฐ ์ํ ๋ฌ์ ๊ฐ์ฅ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๋ฆฌํด
-- NEXT_DAY ๋ช
์๋ ์์ผ์ด ๋์์ค๋ ๊ฐ์ฅ ์ต๊ทผ์ ๋ ์ง "
SELECT ename, hiredate
, CEIL( ABS( hiredate - SYSDATE ) ) ๊ทผ๋ฌด์ผ์
, ROUND( MONTHS_BETWEEN( SYSDATE, hiredate ) , 2 ) ๊ทผ๋ฌด๊ฐ์์
, ROUND( MONTHS_BETWEEN( SYSDATE, hiredate ) / 12 , 2 ) ๊ทผ๋ฌด๋
์
FROM emp;
-- ADD_MONTHS ํจ์
ใํ์ใ
ADD_MONTHS(date, month)
SELECT ename, hiredate
, hiredate + 100 -- 100์ผ ํ
, hiredate + 10/24 -- 10์๊ฐ ํ
, ADD_MONTHS( hiredate, 3) -- 3๊ฐ์ ํ
, ADD_MONTHS( hiredate, -3) -- 3๊ฐ์ ์
FROM emp;
-- ํ์ธ
SELECT TO_DATE( '2022-02-01' )
, ADD_MONTHS( TO_DATE( '02-01-2022', 'MM-DD-YYYY') , 1 ) a -- ๋ฌธ์๋ฅผ ๋ ์ง๋ก ํ๋ณํ TO_DATE
-- ORA-01830: [date format] picture ends before converting entire input string
-- ์ ์ฒด ์
๋ ฅ ๋ฌธ์์ด์ด ๋ณํ๋๊ธฐ ์ ์ ๋ ์ง ํ์ ์ฌ์ง์ด ์ข
๋ฃ๋์๋ค.
, ADD_MONTHS( TO_DATE( '02-28-2022', 'MM-DD-YYYY') , 1 ) b -- 2/28 + ํ๋ฌ
, ADD_MONTHS( TO_DATE( '02-27-2022', 'MM-DD-YYYY') , 1 ) c -- 2/27 + ํ๋ฌ
, ADD_MONTHS( TO_DATE( '03-30-2022', 'MM-DD-YYYY') , -1 ) d -- 3/31 + ํ๋ฌ
-- 3/31~3/28 - 1 ๋ฌ = 2/28
FROM dual;
-- ๋ฌ๋ ฅ : ๋
,์ ๋ง์ง๋ง๋ ์ง.
SELECT TO_DATE( '2022-02-01' )-1 -- 22/01/31
FROM dual;
-- LAST_DAY ํจ์ : ํน์ ๋ ์ง๊ฐ ์ํ ๋ฌ(์)์ ๊ฐ์ฅ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๋ฐํ
SELECT SYSDATE
, LAST_DAY( SYSDATE )
, TO_CHAR( LAST_DAY( SYSDATE ), 'DD' ) -- ๋ฌธ์ ) ์ด๋ฒ ๋ฌ์ด ๋ช์ผ ๊น์ง ์๋์?
FROm dual;
-- TO_NUMBER()
-- TO_CHAR()
-- TO_DATE()
-- NEXT_DAY ํจ์ : ๋ช
์๋ ์์ผ์ด ๋์์ค๋( ๋ค๊ฐ์ค๋ ) ๊ฐ์ฅ ์ต๊ทผ์ ๋ ์ง๋ฅผ ๋ฆฌํดํ๋ ํจ์
-- ๋ค์ ์ฃผ X
ใํ์ใ
NEXT_DAY(date,char)
-- ๋ฌธ์ ) ๋์์ค๋( ๋ค๊ฐ์ค๋ ) ์์์ผ์ ํด๊ฐ์ด๋ค. ๋ช ์ผ ?
SELECT SYSDATE
, NEXT_DAY( SYSDATE, '์์์ผ' ) -- ๋์ฒด ๊ณตํด์ผ X
, NEXT_DAY( SYSDATE, 'ํ์์ผ' )
, NEXT_DAY( SYSDATE, '๊ธ์์ผ' ) -- ์ด๋ฒ ์ฃผ ๊ธ์์ผ
FROM dual;
-- datetime(= date ํจ์์ ํ์ฅ ํํ) ์ข
๋ฅ
SELECT SYSDATE
, CURRENT_DATE
, CURRENT_TIMESTAMP
FROM dual;
-- EXTRACT ํจ์ :
ใํ์ใ
EXTRACT (
{YEAR ¦
MONTH ¦
DAY ¦
HOUR ¦
MINUTE ¦
SECOND ¦
TIMEZONE_HOUR ¦
TIMEZONE_MINUTE ¦
TIMEZONE_REGION ¦
TIMEZONE_ABBR}
FROM {datetime_value_expr ¦
interval_value_expr}
)
--
SELECT SYSDATE
, TO_CHAR( SYSDATE, 'YYYY' ) year -- ์ผ์ชฝ์ ๋ ฌ( ๋ฌธ์ )
, EXTRACT( YEAR FROM SYSDATE ) year -- ์ค๋ฅธ์ชฝ์ ๋ ฌ( ์ซ์ )
FROM dual;
-- [ ๋ณํ ํจ์์ ์ข
๋ฅ ]
-- TO_NUMBER : ๋ฌธ์ -> ์ซ์ ๋ณํ X
SELECT TO_NUMBER( '1234' )
FROM dual;
-- TO_CHAR : [์ซ์],๋ ์ง,๋ฌธ์ -> ๋ฌธ์ ๋ณํ
ใํ์ใ
TO_CHAR( n [,'fmt' [,'nlsparam']]);
-- ํ๊ธธ๋ ํตํ๊ธฐํธ2,810,000
SELECT name, basicpay + sudang pay
, TO_CHAR( basicpay + sudang, '9G999G999' ) -- ์ฝค๋ง G
, TO_CHAR( basicpay + sudang, '9,999,999' ) -- ์ฝค๋ง ,
, TO_CHAR( basicpay + sudang, 'L9,999,999' ) -- ์ํ L
FROM insa;
-- 2260.416666666666666666666666666666666667
-- ์์์ 2์๋ฆฌ ์ถ๋ ฅ : ROUND() X ์๋ ๋ฐ์ฌ๋ฆผ ํ์ธ
SELECT AVG( sal + NVL( comm, 0) ) avg_pay
, TO_CHAR( AVG( sal + NVL( comm, 0) ), 'L9,999.00' ) avg_pay
FROM emp;
-- TO_CHAR( ๋ ์งํ ) ๋ ์งํ -> ๋ด๊ฐ ์ํ๋ ๋ฌธ์์ด ํ๋ณํํจ์
ใํ์ใ
TO_CHAR( date [,'fmt' [,'nlsparam']])
-- YY์ RR ์ ์ฐจ์ด์ (๊ธฐ์ต) --
SELECT SYSDATE
, TO_CHAR( SYSDATE, 'CC' ) ใฑ -- 21์ธ๊ธฐ
, TO_CHAR( SYSDATE, 'BC' ) ใด -- ์๊ธฐ
-- ์๊ธฐ (่ฅฟ็ด)
-- ๊ธฐ์ ์๋
์ดํ. ์ฃผ๋ก ์์๊ฐ ํ์ด๋ ํด๋ฅผ ์๋
์ผ๋ก ํ์ฌ ์ด๋ฅธ๋ค.
, TO_CHAR( SYSDATE, 'Q' ) ใท -- 10์ == 4๋ถ๊ธฐ
-- , TO_CHAR( SYSDATE, 'IYYY' )-- ๋
, TO_CHAR( SYSDATE, 'YYYY' )-- ๋
RRRR
, TO_CHAR( SYSDATE, 'YEAR' )-- ์๋ฌธ ๋
๋ TWENTY TWENTY-TWO
, TO_CHAR( SYSDATE, 'MM' ) -- ์ MM, MONTH, MON
, TO_CHAR( SYSDATE, 'DD' ) -- ์ผ D, DD, DDD
, TO_CHAR( SYSDATE, 'HH24' )-- ์๊ฐ HH, HH12, HH24
, TO_CHAR( SYSDATE, 'MI' )-- ๋ถ
, TO_CHAR( SYSDATE, 'SS' )-- ์ด SSSSS ์์ ์์ ๋ถํฐ ์ด
, TO_CHAR( SYSDATE, 'DAY' )-- ์์ผ DY(ํ), DAY(ํ์์ผ)
FROM dual;
-- WW, IW, W ( ๊ธฐ์ต )
SELECT
TO_CHAR( SYSDATE, 'WW' ) ใฑ -- ๋
์ค ๋ช ์งธ ์ฃผ
, TO_CHAR( SYSDATE, 'IW' ) ใด -- ๋
์ค ๋ช ์งธ์ฃผ
, TO_CHAR( SYSDATE, 'W' ) ใท -- ์ ์ค ๋ช ์งธ ์ฃผ
, TO_CHAR( SYSDATE, 'TS' ) ใน -- ์๊ฐ ๊ฐ๋ต ( ์คํ 3:15:51 )
FROM dual;
-- [๋ฌธ์ ] SYSDATE ๋ฅผ ์ฌ์ฉํด์
-- TO_CHAR() ํจ์๋ฅผ ์ฌ์ฉํด์
-- '2022๋
10์ 04์ผ ์คํ 15:21:12 (ํ)' ํ์์ผ๋ก ์ถ๋ ฅ
-- ORA-01821: date format not recognized
-- ๋ ์ง ํ์์ด ์ธ์๋์ง ์๋๋ค.
SELECT TO_CHAR( SYSDATE, 'YYYY"๋
" MM"์" DD"์ผ" AM HH24:MI:SS (DY)' )
, TO_CHAR(SYSDATE, 'YYYY') || '๋
' || TO_CHAR(SYSDATE, 'MM') || '์ ' || TO_CHAR(SYSDATE, 'DD') || '์ผ ' || TO_CHAR(SYSDATE, 'TS') ๋ ์ง์๊ฐ
FROM dual;
-- String.format("%04d", 9) -- 0009
-- DecimalFormat ํ์ํ ํด๋์ค
SELECT TO_CHAR( 9 , '0999' ) -- '0009'
FROM dual;
-- [๋ฌธ์ ] ๋ฌธ์์ด -> ๋ ์ง ํ๋ณํ TO_CHAR(), [ TO_DATE() ]
-- '2022๋
12์ 31์ผ'
SELECT TO_DATE('2022๋
12์ 31์ผ', 'YYYY"๋
" MM"์" DD"์ผ"')
FROM dual;
-- [๋ฌธ์ ] emp ํ
์ด๋ธ์์ ๊ฐ ์ฌ์๋ค์ ์
์ฌ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก 10๋
5๊ฐ์ 20์ผ์งธ ๋๋ ๋ ?
๋ ์ง + ์ผ์ = ๋ ์ง
๋ ์ง - ์ผ์ = ๋ ์ง
๋ ์ง - ๋ ์ง = ์ผ์
๋ ์ง + /24 = ๋ ์ง
MONTHS_BETWEEN() ๊ฐ์์
ADD_MONTHS() ๊ฐ์ +/-
NEXT_DAY(), LAST_DAY()
--
SELECT hiredate
, ADD_MONTHS( hiredate + 20 , 12 * 10 + 5 )
FROM emp;
-- [๋ฌธ์ ] insa ํ
์ด๋ธ์์ ssn ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ฅผ ํตํด์ ์์ผ์ ์ป์ด์ค๊ณ
-- ์ค๋์ ๊ธฐ์ค์ผ๋ก ์์ผ ์ง๋ฌ๋ค. ์ง๋์ง ์์๋ค๋ผ๊ณ ์ถ๋ ฅ.
-- 1/ 0/ -1 SIGN()
SELECT *
FROM insa;
--
UPDATE insa
SET ssn = '801004-1544236'
WHERE num = 1002;
COMMIT;
-- (๋ณต์ต) '์ง๋ฌ๋ค', '์์ง๋ฌ๋ค', '์ค๋ ' ์ฒ๋ฆฌ
SELECT ssn
-- , SUBSTR(ssn, 0, 6) X ํ์ด๋ ๋
๋ X
, TO_DATE( SUBSTR( ssn, 3, 4 ) , 'MMDD' ) -- MMDD 2022๋
, SYSDATE
-- ์์( ์์ผ์ด ์ง๋์ง ์์ )
-- ์ ๋ต. ์๊ฐ:๋ถ:์ด 00:00:00
-- , SIGN( TO_DATE( SUBSTR( ssn, 3, 4 ) , 'MMDD' ) - TRUNC( SYSDATE ) )
, SIGN( TO_DATE( SUBSTR( ssn, 3, 4 ) , 'MMDD' ) - SYSDATE )
FROm insa;
SELECT TO_CHAR( TO_DATE( SUBSTR( ssn, 3, 4 ) , 'MMDD' ) , 'TS')
, TO_CHAR( SYSDATE , 'TS')
, TO_CHAR( TRUNC( SYSDATE ) , 'TS')
FROM insa;
-- TO_DATE ๊ธฐ๋ณธ๊ฐ (์ํ)
SELECT TO_DATE( '2021' , 'YYYY' ) -- 21 /10/01
, TO_DATE( '2021-02' , 'YYYY-MM' ) -- 21/02/01
, TO_DATE( '23' , 'DD' ) -- 22/10/23
FROM dual;
-- [์ผ๋ฐ ํจ์]
-- NVL
-- NVL2
-- NULLIF
-- COALESCE ํจ์ ( ์ฝ์ฐ์ผ๋ ์ค ) : ํฉ์น๋ค. ์ฐํฉ
-- ใด ๋์ดํด ๋์ ๊ฐ์ ์์ฐจ์ ์ผ๋ก ์ฒดํฌํ์ฌ NULL ์ด ์๋ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์
ใํ์ใ
COALESCE(expr[,expr,...])
SELECT ename
, sal + NVL(comm, 0) pay
, sal + NVL2( comm, comm, 0) pay
, COALESCE( sal + comm, sal , 0 ) pay
-- sal+comm์ด null์ด๋ฉด (๋ํ๊ธฐ ์ค ํ๋๋ผ๋ null์ด๋ฉด null์) sal ์ถ๋ ฅ, sal์ด null์ด๋ฉด 0 ์ถ๋ ฅ
, sal + COALESCE( comm, 0 ) pay
FROM emp;
-- '' == NULL
select coalesce('','','arirang','kunsan')
from dual;
-- DECODE ํจ์ ( ์ํ ) *****
ใด [์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด]์ ์ฃผ์ด ์กฐ๊ฑด์ ๋ง์ ๊ฒฝ์ฐ ํด๋น ๊ฐ์ ๋ฆฌํดํ๋ ํจ์
ใด PL/SQL ์์์ ์ฌ์ฉํ ์ค๋ผํด ํจ์
ใด (๊ธฐ์ต) ๋น๊ต์ฐ์ฐ์ '=' ๋ง ๊ฐ๋ฅํ๋ค + IF ~ ELSE IF ~ ELSE ๋ฌธ ์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
-- ์๋ฐ -
int x = 10;
if( x == 11 ){
return C;
}
-- ์ค๋ผํด DECODE -
DECODE( x, 11, C)
-- ์๋ฐ -
int x = 10;
if( x == 11 ){
return C;
}else{
return D;
}
-- ์ค๋ผํด DECODE -
DECODE( x, 11, C, D)
-- ์๋ฐ -
int x = 10;
if( x == 11 ){
return C;
}else if( x == 12 ){
return D;
}else if( x == 13 ){
return E;
}else {
return F;
}
-- ์ค๋ผํด DECODE -
DECODE( x, 11, C, 12, D, 13, E, F)
-- [๋ฌธ์ ] insaํ
์ด๋ธ์์ ssn ์ฃผ๋ฏผ๋ฒํธ๋ฅผ ๊ฐ์ง๊ณ
-- ์์ผ ์ง๋จ ์ฌ๋ถ SIGN 1,-1,0 ์ถ๋ ฅ.
-- ์กฐ๊ฑด) DECODE ํจ์๋ฅผ ์ฌ์ฉํด์ '์์ผ ์ ', '์์ผ ํ' , '์ค๋ ์์ผ' ๋ฌธ์์ด ์ถ๋ ฅ
SELECT ssn
, DECODE( SIGN( TO_DATE( SUBSTR( ssn, 3, 4) , 'MMDD' ) - TRUNC( SYSDATE ) ) , 0 , '์ค๋ ์์ผ', 1 , '์์ผ ์ ', -1, '์์ผ ํ' )
FROM insa;
-- 1. ๋ฌธ์ ) insa ํ
์ด๋ธ์์ ssn์ ๊ฐ์ง๊ณ '๋จ์'/'์ฌ์' ๋ผ๊ณ ์ฑ๋ณ์ ์ถ๋ ฅ
-- ( DECODE () ์ฌ์ฉ )
SELECT ssn
, DECODE( MOD( SUBSTR( ssn, -7, 1) , 2 ), 0 , '์ฌ์', '๋จ์') gender
FROM insa;
-- ๋ฌธ์ ) insaํ
์ด๋ธ์์ ๋จ์ ์ฌ์์, ์ฌ์ ์ฌ์์ ๋ช๋ช
์ธ์ง ์ถ๋ ฅ(์กฐํ)
-- ๋ฌธ์ ) emp ํ
์ด๋ธ์์ ์ด์ฌ์์, 10๋ฒ, 20๋ฒ, 30๋ฒ, 40๋ฒ ์ฌ์์๋ฅผ ์ถ๋ ฅ(์กฐํ)
-- 2. ๋ฌธ์ ) emp ์์ ๊ฐ ์ฌ์๋ค์ ๋ฒํธ,์ด๋ฆ,๊ธ์ฌ(pay) ์ถ๋ ฅ
-- 10๋ฒ ๋ถ์์ 15% ์ธ์
-- 20๋ฒ ๋ถ์์ 5% ์ธ์
-- ๊ทธ์ธ ๋ถ์์ 10% ์ธ์
SELECT deptno, empno, ename
, sal + NVL( comm, 0) pay
, DECODE( deptno , 10, ( sal + NVL( comm, 0) ) * 0.15
, 20, ( sal + NVL( comm, 0) ) * 0.05
, ( sal + NVL( comm, 0) ) * 0.10
) ์ธ์์ก
FROM emp
ORDER BY deptno ASC;
'๐จโ๐ป Web Development > Oracle' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle/Table] ์ค๋ผํด ํ ์ด๋ธ (0) | 2022.10.06 |
---|---|
[Day7] Oracle 7 - JOIN, TON-N (ROW_NUMBER), CASE (0) | 2022.10.06 |
[Day5] Oracle 5 - ์ค๋ผํด ์ฐ์ฐ์ & ํจ์ (0) | 2022.09.29 |
[Day4] Oracle 4 - Subquery, CONCAT, MOD, INSERT, REPLACE, NLS, Dual, SYSDATE, RR/YY, Session, Synonym (0) | 2022.09.28 |
[Day3] Oracle 3 - ํจ์, LIKE, BETWEEN, RR/YY, UPDATE (0) | 2022.09.28 |
์ต๊ทผ๋๊ธ