[Day3] Oracle 3 [9/27]
--1. μ©μ΄μ 리
-- γ±. Data : μ 보(μλ£)
-- γ΄. DataBase : Data + BASE , λ°μ΄ν° μ§ν©(μ μ₯μ)
-- γ·. DBMS : λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬ μμ€ν
, μννΈμ¨μ΄
-- γΉ. DBA :λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬μ ( SYS, SYSTEM )
-- γ
. λ‘€(ROLE) : λ€μ μ¬μ©μ, λ€μ κΆν + ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκΈ° μν κΆνμ κ·Έλ£Ή
-- γ
. SID( μ μ λ°μ΄ν°λ² μ΄μ€ μ΄λ¦ ) : XE
-- γ
. λ°μ΄ν° λͺ¨λΈ : λ°μ΄ν°λ₯Ό μ μ₯νλ λ°©μμ λ°μ΄ν° λͺ¨λΈ
-- γ
. μ€ν€λ§(Schema) : κ³μ μμ± + μ€ν€λ§( λͺ¨λ κ°μ²΄( ν
μ΄λΈ, λ·°, νλ‘μμ , νΈλ¦¬κ±°, μνμ€ ... ) )
scott scott
μ€ν€λ§.ν
μ΄λΈλͺ
[scott.]emp
-- γ
. R+DBMS : κ΄κ³ν + DBMS
κ°μ²΄(ν
μ΄λΈ) + κ΄κ³(μ°κ΄μ±) + κ°μ²΄(ν
μ΄λΈ)
dept μμκ΄κ³ emp
deptno(PK) κ³ μ ν€ deptno(FK) μ°Έμ‘°ν€
--2. μ€μΉλ [μ€λΌν΄μ μμ ]νλ μ μ°¨λ₯Ό [κ²μ]ν΄μ μμΈν μ μΌμΈμ. ***
γ±. μλΉμ€ μ€μ§
γ΄. un,de νμΌ μ€ν , νλ‘κ·Έλ¨μΆκ°μ κ±°
γ·. oracle ν΄λ μμ
γΉ. λ μ§μ€ν°λ¦¬ μμ .
--3. SYS κ³μ μΌλ‘ μ μνμ¬ λͺ¨λ μ¬μ©μ μ 보λ₯Ό μ‘°ννλ 쿼리(SQL)μ μμ±νμΈμ.
SELECT *
FROM user_users;
FROM all_users;
FROM dba_users;
--4. SCOTT κ³μ + μμ κ°μ²΄(ν
μ΄λΈ) λ₯Ό μμ νλ 쿼리(SQL)μ μμ±νμΈμ.
γ±. κ³μ μμ±
CREATE USER scott IDENTIFIED BY tiger;
γ΄. κ³μ μμ - λΉλ°λ²νΈ μμ , μ κΈ ν΄μ
ALTER USER scott IDENTIFIED BY tiger;
γ·. κ³μ μμ
DROP USER scott CASCADE;
--5. μμ 4λ²μ μν΄μ
-- SCOTT κ³μ μ΄ μμ λμμΌλ©΄ SCOTT κ³μ μ tiger λΉλ°λ²νΈλ‘ μμ±νλ 쿼리(SQL)μ μμ±νμΈμ.
--6. μ€λΌν΄μ΄ μ 곡νλ κΈ°λ³Έμ μΈ λ‘€(role)μ μ’
λ₯λ₯Ό μ μ΄μΈμ..
CONNECT,
RESOURCE
:
Ora_Help
--6-2. SCOTT κ³μ μκ² κΆνμ λΆμ¬νλ 쿼리(SQL)μ μμ±νμΈμ.
DCL - GRANT, REVOKE
GRANT κΆν, λ‘€ TO κ³μ , λ‘€
GRANT CONNECT, RESOURCE TO scott;
--7-1. SCOTT κ³μ μκ² scott.sql νμΌμ μ°Ύμμ emp, dept, bonus, salgrade ν
μ΄λΈμ μμ± λ° λ°μ΄ν° μΆκ°ν κ³Όμ μ μμ±νμΈμ.
-- scott.sql νμΌ
--7-2. κ° ν
μ΄λΈμ μ΄λ€ μ 보λ₯Ό μ μ₯νλμ§ μ»¬λΌμ λν΄ μ 보( 컬λΌλͺ
, μλ£ν )λ₯Ό μ€λͺ
νμΈμ.
-- γ±. emp
DESC emp;
-- γ΄. dept
-- γ·. bonus
-- γΉ. salgrade
--8. SCOTT κ³μ μ΄ μμ νκ³ μλ λͺ¨λ ν
μ΄λΈμ μ‘°ννλ 쿼리(SQL)μ μμ±νμΈμ.
SELECT *
FROM dba_tables; -- DBA(SYS) ORA-00942: table or view does not exist
FROM all_tables;
FROM user_tables;
FROM tabs; -- μ½μ΄
--9. SQL*Plus λ₯Ό μ¬μ©νμ¬ SYSλ‘ μ μνμ¬ μ μν μ¬μ©μ νμΈνκ³ , λͺ¨λ μ¬μ©μ μ 보λ₯Ό μ‘°ννκ³
-- μ’
λ£νλ λͺ
λ Ήλ¬Έμ μμ±νμΈμ.
>sqlplus sys/ss123$ AS SYSDBA SQLPlus λͺ
λ Ήμ΄
SQL>SELECT *
2 FROM dba_users; SQL
3
--10. κ΄κ³ν λ°μ΄ν° λͺ¨λΈμ ν΅μ¬ κ΅¬μ± μμ
γ±. κ°μ²΄
γ΄. μμ±
γ·. κ΄κ³
--11. Oracle SQL Developer μμ 쿼리(SQL)μ μ€ννλ λ°©λ²μ λͺ¨λ μ μΌμΈμ.
γ±. Ctrl + Enter
γ΄. 쿼리 μ ν(select)ν ν F5
γ·. F9
--12. μ€λΌν΄ μ£Όμμ²λ¦¬ λ°©λ² 2κ°μ§λ₯Ό μ μΌμΈμ.
γ±.
γ΄.
--13. μλ£ μ¬μ ( Data [Dictionary] ) μ΄λ? X
--14. SQL μ΄λ ? ꡬ쑰νλ μ§μ μΈμ΄
--15. SQLμ μ’
λ₯μ λν΄ μμΈν μ μΌμΈμ.
γ±. DQL select λ°μ΄ν° κ²μ(μ‘°ν)
γ΄. DDL c,a,d λ°μ΄ν° μ μ
γ·. DCL g,r
γΉ. DML i,u,d
γ
. TCL c,r,sp
--16. select λ¬Έμ 7 κ°μ μ κ³Ό μ²λ¦¬ μμμ λν΄μ μ μΌμΈμ. **** μ€μ
1 WITH
6 SELECT
2 FROM
3 WHERE
4 GROUP BY
5 HAVING
7 ORDER BY
W / S / F / W / G / H / O
--17. emp ν
μ΄λΈμ ν
μ΄λΈ ꡬ쑰(컬λΌμ 보)λ₯Ό νμΈνλ 쿼리λ₯Ό μμ±νμΈμ.
DESC emp;
--18. employees ν
μ΄λΈμμ μλμ κ°μ΄ μΆλ ₯λλλ‘ μΏΌλ¦¬ μμ±νμΈμ.
FIRST_NAME LAST_NAME NAME
-------------------- ------------------------- ----------------------------------------------
Samuel McCain Samuel McCain
Allan McEwen Allan McEwen
Irene Mikkilineni Irene Mikkilineni
Kevin Mourgos Kevin Mourgos
Julia Nayer Julia Nayer
SELECT first_name, last_name
, first_name || ' ' || last_name AS "NAME"
, CONCAT( CONCAT( first_name, ' ' ), last_name ) name
FROM employees;
--19. μλ λ·°(View)μ λν μ€λͺ
μ μ μΌμΈμ.
-- γ±. dba_tables
-- γ΄. all_tables
-- γ·. user_tables == tabs
dba_XXX
all_XXX
user_XXX
--20. HR κ³μ μ μμ± μκΈ°μ [μ κΈμν]λ₯Ό νμΈνλ 쿼리λ₯Ό μμ±νμΈμ.
-- SYS
SELECT ename
, UPPER( ename )
, LOWER( ename )
, INITCAP( ename ) // 첫문μλ§ λλ¬Έμ
FROM emp;
select username, account_status, created
FROM Dba_users
WHERE UserName = UPPER( 'hr' );
--21. emp ν
μ΄λΈμμ μ‘, μ¬μλ²νΈ, μ΄λ¦, μ
μ¬μΌμλ₯Ό μ‘°ννλ 쿼리λ₯Ό μμ±νμΈμ.
SELECT empno, ename, hiredate, job
FROM emp;
--22. emp ν
μ΄λΈμμ μλμ κ°μ μ‘°ν κ²°κ³Όκ° λμ€λλ‘ μΏΌλ¦¬λ₯Ό μμ±νμΈμ.
( sal + comm = pay )
null μλ―Έ ?
null μ²λ¦¬ ν¨μ ?
SELECT EMPNO, ENAME, SAL, NVL( COMM , 0) COMM
, SAL + NVL2( comm, comm, 0) PAY
FROM emp;
EMPNO ENAME SAL COMM PAY
---------- ---------- ---------- ---------- ----------
7369 SMITH 800 0 800
7499 ALLEN 1600 300 1900
7521 WARD 1250 500 1750
7566 JONES 2975 0 2975
7654 MARTIN 1250 1400 2650
7698 BLAKE 2850 0 2850
7782 CLARK 2450 0 2450
7839 KING 5000 0 5000
7844 TURNER 1500 0 1500
7900 JAMES 950 0 950
7902 FORD 3000 0 3000
EMPNO ENAME SAL COMM PAY
---------- ---------- ---------- ---------- ----------
7934 MILLER 1300 0 1300
12κ° νμ΄ μ νλμμ΅λλ€.
μ΄ν΄ X -> μκΈ° (μ½λ© )
--23. empν
μ΄λΈμμ
-- κ° λΆμλ³λ‘ μ€λ¦μ°¨μ 1μ°¨ μ λ ¬νκ³ κΈμ¬(PAY)λ³λ‘ 2μ°¨ λ΄λ¦Όμ°¨μ μ λ ¬ν΄μ μ‘°ννλ 쿼리λ₯Ό μμ±νμΈμ.
SELECT deptno, EMPNO, ENAME, SAL, NVL( COMM , 0) COMM
, SAL + NVL2( comm, comm, 0) pay
FROM emp
ORDER BY 1 , 6 DESC;
ORDER BY deptno , pay DESC;
--24. κ³μ μ μμ±νλ 쿼리 νμμ λν΄ μ μΌμΈμ.
CREATE USER ~ DDL
--25. μμ±λ κ³μ μ λΉλ°λ²νΈ , μ κΈμ ν΄μ νλ 쿼리 νμμ λν΄μ μ μΌμΈμ.
ALTER USER ~ DDL
--26. DBμ λ‘κ·ΈμΈν μ μλ κΆνμ λΆμ¬νλ 쿼리 νμμ λν΄μ μ μΌμΈμ.
CREATE SESSION κΆν < CONNECT λ‘€
DCL : GRANT
GRANT κΆν, λ‘€ TO κ³μ , λ‘€
--27. νΉμ ν¬νΈ( 1521 Port )λ₯Ό [ λ°©νλ²½ ν΄μ ]νλ λ°©λ²μ λν΄μ μμΈν κ³Όμ μ μ μΌμΈμ.
1) λ보기 : λ°©νλ²½ - "λ°©νλ²½ ν΄μ νμΈ" ν΄λ¦
)μ μ μΌμΈμ
--29. SQLμ μμ±λ°©λ² X
SELECT
select
Select 'hr'
SELECT ename, job, hiredate
FROM emp
WHERE
ORDER BY ;
select ename, job
from emp
where ename = '???';
JAVA μλ³μλ₯Ό λͺ
λͺ
νλ κ·μΉ
--30. μλ μλ¬ λ©μμ§μ μλ―Έλ₯Ό μ μΌμΈμ.
γ±. ORA-00942: table or view does not exist
γ΄. ORA-00904: "SCOTT": invalid identifier
γ·. ORA-00936: missing expression
γΉ. ORA-00933: SQL command not properly ended X
-- 31. emp ν
μ΄λΈμμ λΆμλ²νΈκ° 10λ²μ΄κ³ , μ‘μ΄ CLERK μΈ μ¬μμ μ 보λ₯Ό μ‘°ννλ 쿼리 μμ±.
SELECT deptno, ename, job
FROM emp
WHERE job = 'CLERK' AND deptno = 10;
-- JAVA if( A && B ) λ
Όλ¦¬μ°μ°μ &&
-- μ€λΌν΄ μ΄λ€ μ°μ°μ μ 리
10 MILLER CLERK
- , λΆμλ²νΈκ° 10λ²μ΄ μλ μ¬μμ μ 보λ₯Ό μ‘°ννλ 쿼리 μμ±.
-- μλ° λΉκ΅ μ°μ°μ == [!=] > < >= <=
-- μ€λΌν΄ λΉκ΅ μ°μ°μ = !=, <>, ^=
SELECT deptno, ename, job
FROM emp
WHERE job = 'CLERK' AND deptno ^= 10;
WHERE job = 'CLERK' AND deptno <> 10;
WHERE job = 'CLERK' AND deptno != 10;
-- 32. μ€λΌν΄μ nullμ μλ―Έ μ null μ²λ¦¬ ν¨μμ λν΄μ μ€λͺ
νμΈμ .
γ±. null μλ―Έ? λ―ΈνμΈλ κ°.
γ΄. null μ²λ¦¬ ν¨μ 2κ°μ§ μ’
λ₯μ νμμ μ κ³ μ€λͺ
νμΈμ .
NVL()
NVL2()
N
C
γ·. null λΉκ΅ν λ μ¬μ©νλ μ°μ°μ : Ora_Help operator κ²μ
-- 33. emp ν
μ΄λΈμμ λΆμλ²νΈκ° 30λ²μ΄κ³ , 컀미μ
μ΄ nullμΈ μ¬μμ μ 보λ₯Ό μ‘°ννλ 쿼리 μμ±.
( γ±. deptno, ename, sal, comm, pay μ»¬λΌ μΆλ ₯, pay= sal+comm )
( γ΄. commμ΄ null μΈ κ²½μ°λ 0μΌλ‘ λ체ν΄μ μ²λ¦¬ )
( γ·. pay κ° λ§μ μμΌλ‘ μ λ ¬ )
SELECT deptno, ename, sal, comm, sal + NVL(comm, 0) pay
FROM emp
WHERE deptno = 30 AND NOT ( comm IS NULL )
ORDER BY pay DESC; -- μ΄ λ NOT μ AND, OR, NOT λΆμ μ°μ°μ
WHERE deptno = 30 AND comm IS NOT NULL;
WHERE deptno = 30 AND comm IS NULL;
WHERE deptno = 30 AND comm = null; X
-- κ²°κ³Ό λ¬Ό X -> 2λͺ
-- 34. μ€λΌν΄ λΉκ΅ μ°μ°μλ₯Ό μ μΌμΈμ.
γ±. κ°λ€ : =
γ΄. λ€λ₯΄λ€ : != <> ^=
-- *****
-- 35. emp ν
μ΄λΈμμ pay(sal+comm)κ° 1000 μ΄μ~ 2000 μ΄ν λ°λ 30λΆμμλ€λ§ μ‘°ννλ 쿼리 μμ±
쑰건 : γ±. pay κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬ --enameμ κΈ°μ€μΌλ‘ μ€λ¦μ°¨μ μ λ ¬ν΄μ μΆλ ₯(μ‘°ν)
γ΄. comm μ΄ nullμ 0μΌλ‘ μ²λ¦¬ ( nvl () )
(첫λ²μ§Έ λ°©λ²)
SELECT deptno, ename, sal, comm, sal + NVL(comm, 0) pay
FROM emp
WHERE deptno = 30 AND 1000 <= (sal + NVL(comm, 0)) AND (sal + NVL(comm, 0)) <= 2000 ;
-- μ²λ¦¬ μμ λλ¬Έμ λ³μΉ payλ Where μ μμλ μΈμν μ μλ€.
-- WHERE deptno = 30 AND 1000 <= pay AND pay <= 2000 ; --510ν, 44μ΄μμ μ€λ₯ λ°μ
-- ORA-00904: "PAY": invalid identifier μλͺ»λ μλ³μ.
WHERE deptno = 30 AND ( 1000 <= pay AND pay <= 2000 );
-- JAVA 1000 <= pay && pay <= 2000
(λ λ²μ§Έ λ°©λ²) WITH μ μ¬μ©
WITH query AS (subquery),query AS (subquery),query AS (subquery),...
μμ )
SQL> WITH
2 dept_costs AS (
3 SELECT department_name, SUM(salary) dept_total
4 FROM employees e, departments d
5 WHERE e.department_id = d.department_id
6 GROUP BY department_name),
7 avg_cost AS (
8 SELECT SUM(dept_total)/COUNT(*) avg
9 FROM dept_costs)
10 SELECT * FROM dept_costs
11 WHERE dept_total >
12 (SELECT avg FROM avg_cost)
13 ORDER BY department_name;
WITH
emp_30 AS (
SELECT deptno, ename, sal, comm, sal + NVL(comm, 0) pay -- μλΈμΏΌλ¦¬(subquery)
FROM emp
WHERE deptno = 30
),
emp_20 AS (
SELECT deptno, ename, sal, comm, sal + NVL(comm, 0) pay -- μλΈμΏΌλ¦¬(subquery)
FROM emp
WHERE deptno = 20
)
SELECT *
FROM emp_30
WHERE pay BETWEEN 1000 AND 2000 ;
WHERE pay >= 1000 AND pay <= 2000 ;
μ΄μ μ΄ν SQL μ°μ°μ : [NOT] between A and B , IS [NOT] NULL
(μΈ λ²μ§Έ λ°©λ²) μλΈμΏΌλ¦¬( subquery) μ¬μ©
Queryλ?
νλμ΄μμ ν
μ΄λΈμ΄λ λ·°λ‘λΆν° λ°μ΄ν°λ₯Ό κ²μ(retrieve)νλ λμμ λ§νλ€.
μ΄ λ μ°Έμ‘°νλ μ΅μμ λ 벨 SELECT λ¬Έμ Query(μ§μ:쿼리)λΌ νλ€.
subqueryλ ? μΏΌλ¦¬κ° λλ€λ₯Έ SQL λ¬ΈμΌλ‘ nestedλ κ²μ subqueryλΌ νλ€.
μ¦ SQL λ¬Έ μμ λ λ€λ₯Έ SQLλ¬Έμ΄ λ£μ΄μ Έ μλ κ²½μ°μ΄λ€.
[ IN-LINE view μλΈμΏΌλ¦¬ ]
--------------------------------------------------------------------------------
VIEWλ₯Ό μ¬μ©νλ κ²κ³Ό μμ£Ό μ μ¬νκ² select λ¬Έμ₯μ FROMμ μμ subqueryλ₯Ό μ¬μ©νλ€.
• subquery λ€μλ λ°λμ aliasλ₯Ό μ€λ€.
• subqueryλ₯Ό FROMμ μ μ¬μ©ν μ μλ€. FROMμ μ μμΉν subqueryλ νλμ ν
μ΄λΈμ²λΌ μ¬μ©λλ€.
μ°Έκ³ λ‘
μλΈμΏΌλ¦¬κ° FROM μ μ μμΌλ©΄ μ΄λ₯Ό Inline viewλΌνκ³ ,
μλΈμΏΌλ¦¬κ° WHERE μ μ μμΌλ©΄ μ΄λ₯Ό Nested subqueryλΌ ν¨
Nested subqueryμ€μμ μ°Έμ‘°νλ ν μ΄λΈμ΄ parent, childκ΄κ³λ₯Ό κ°μ§λ©΄ μ΄λ₯Ό "correlated subquery"λΌ νλ€.
μκ΄ μλΈμΏΌλ¦¬
μ©μ΄ ( μκΈ° )
쿼리 ?
μλΈμΏΌλ¦¬ ?
μΈλΌμΈλ·°?
μ€μ²© μλΈμΏΌλ¦¬?
μκ΄ μλΈμΏΌλ¦¬ ?
FROM ( μλΈμΏΌλ¦¬ ) alias(λ³μΉ,λ³λͺ
) "μΈλΌμΈλ·°( inline view )" νλ€.
λ¬Έμ
-- λ¬Έμ 1) insa ν
μ΄λΈμμ μ¬μμ μΆμ μ§μμ΄ 'μμΈ'μΈ μ¬μ μ 보 μ‘°ν(μΆλ ₯)
-- ( μ¬μλ²νΈ, μ΄λ¦, μ
μ¬μΌμ, μΆμ μ§μ μ λ³΄λ§ μΆλ ₯ )
SELECT num, name, ibsadate, city
FROM insa
WHERE city = 'μμΈ';
-- λ¬Έμ 2) insa ν
μ΄λΈμμ μ¬μμ μΆμ μ§μμ΄ [μλκΆ]μΈ μ¬μ μ 보 μ‘°ν(μΆλ ₯)
-- ( μ¬μλ²νΈ, μ΄λ¦, μ
μ¬μΌμ, μΆμ μ§μ μ λ³΄λ§ μΆλ ₯ )
-- μλκΆ : μμΈ, μΈμ², κ²½κΈ°
SELECT num, name, ibsadate, city
FROM insa
--WHERE city = 'μμΈ' OR city = 'μΈμ²' OR city = 'κ²½κΈ°'
-- [NOT] IN (list)
WHERE city IN ( 'μμΈ', 'μΈμ²', 'κ²½κΈ°')
ORDER BY city ASC;
-- AND OR NOT μ€λΌν΄ λ
Όλ¦¬ μ°μ°μ
-- SQL μ°μ°μ IN μ°μ°μ
-- ( λ¬Έμ 3) insa ν
μ΄λΈμμ μΆμ μ§μμ΄ 'μμΈ'μ΄ μλ μ¬μ μ 보 μ‘°ν.
SELECT num, name, ibsadate, city
FROM insa
--WHERE city != 'μμΈ'
WHERE NOT city = 'μμΈ'
ORDER BY city ASC;
-- λ¬Έμ 4) insa ν
μ΄λΈμμ μ¬μμ μΆμ μ§μμ΄ [μλκΆ]μ΄ μλ μ¬μ μ 보 μ‘°ν(μΆλ ₯)
-- ( μ¬μλ²νΈ, μ΄λ¦, μ
μ¬μΌμ, μΆμ μ§μ μ λ³΄λ§ μΆλ ₯ )
SELECT num, name, ibsadate, city
FROM insa
WHERE city != 'μμΈ' AND city != 'μΈμ²' AND city != 'κ²½κΈ°'
-- [NOT] IN (list 'λ μ§', μ«μ, 'λ¬Έμμ΄' )
--WHERE city NOT IN ( 'μμΈ', 'μΈμ²', 'κ²½κΈ°')
--WHERE NOT city IN ( 'μμΈ', 'μΈμ²', 'κ²½κΈ°')
ORDER BY city ASC;
-- 36. emp ν
μ΄λΈμμ 1981λ
λμ μ
μ¬ν μ¬μλ€λ§ μ‘°ννλ 쿼리 μμ±. X
-- λΉκ΅ μ°μ°μ : μ«μ, λ¬Έμ, λ μ§.
-- ORA-00933: SQL command not properly ended
SELECT empno, ename, hiredate, deptno
FROM emp
WHERE SUBSTR( hiredate, 0, 2) = 81; -- "81" == 81 // μ€λΌν΄μ λ¬Έμμ μ«μ κ°λ€κ³ λμ΄
WHERE SUBSTR( hiredate, 0, 2) = '81';
WHERE EXTRACT( YEAR FROM hiredate ) = 1981;
WHERE TO_CHAR( hiredate, 'YYYY' ) = 1981;
WHERE hiredate BETWEEN '1981.1.1' AND '1981.12.31';
-- JAVA λ μ§-> year
-- JAVA "80/12/17".substring(0, 2); -> "80"
SELECT hiredate
, SUBSTR( hiredate, 0, 2) year
, SUBSTR( hiredate, 1, 2) year
, SUBSTR( hiredate, 7, 2) day
, SUBSTR( hiredate, 7 ) day
, SUBSTR( hiredate, -2) day
FROM emp;
-- [ RR/YY μ°¨μ΄μ ]
-- 1. EXTRACT() //87μ΄ λμ€κ³ (μ«μλ‘ κ°μ Έμ΄)
-- 2. TO_CHAR( λ μ§ , 'μμ' ) // 0087μ΄ λμ΄ (λ¬Έμλ‘ κ°μ Έμ΄)
-- DATE hiredate 컬λΌμμ λ
λ μ»μ΄μ€λ λ°©λ²
SELECT hiredate
, EXTRACT( YEAR FROM hiredate ) -- number 1980
-- , EXTRACT( MONTH FROM hiredate )
-- , EXTRACT( DAY FROM hiredate )
, TO_CHAR( hiredate, 'YYYY' ) -- '1980'
, TO_CHAR( hiredate, 'MM' )
, TO_CHAR( hiredate, 'DD' )
FROM emp
WHERE λ
λ = 1981;
μμ μ½λ©μ LIKE μ°μ°μ, REGEXP_LIKE ν¨μ μ¬μ©ν΄μ μμ
1) [NOT] LIke μ°μ°μ
2) μμκΈ°νΈ( wildcard )λ§ μ¬μ© κ°λ₯
% 0~ μ¬λ¬ κ° *
_ νκ°μ λ¬Έμ
3) wildcard( %, _ )λ₯Ό μΌλ° λ¬Έμμ²λΌ μ°κ³ μΆμ κ²½μ°μλ ESCAPE μ΅μ
μ μ¬μ©
μ) LIKE 'νκΈ\_%' ESCAPE '\';
-- λ¬Έμ ) insa ν
μ΄λΈμμ μ±μ΄ κΉ, μ΄, μ΅μ¨ μΈ μ¬μ μ‘°ν.
-- ( WHERE 쑰건μ μ LIKE μ°μ°μ μ¬μ© )
-- ( WHERE 쑰건μ μ REGEXP_LIKE ν¨μ μ¬μ© )
-- νμ ) REGEXP_LIKE(source_char, pattern [,match_param])
SELECT name, ibsadate
FROM insa
WHERE REGEXP_LIKE( name , '^[κΉμ΄μ΅]');
WHERE REGEXP_LIKE( name , '^(κΉ|μ΄)');
WHERE REGEXP_LIKE( name , '^μ'); -- WHERE name LIKE 'μ%';
WHERE REGEXP_LIKE( name , 'μ$'); -- WHERE name LIKE '%μ';
WHERE REGEXP_LIKE( name , 'μ'); -- WHERE name LIKE '%μ%';
SELECT name, ibsadate
, SUBSTR( name, 0, 1 )
FROM insa
WHERE name LIKE 'κΉ%' OR name LIKE 'μ΄%' OR name LIKE 'μ΅%';
WHERE name LIKE '__μ';
WHERE name LIKE '_μ%';
WHERE name LIKE '%μ%';
WHERE name LIKE '%κΈΈ';
WHERE name LIKE 'κΉ%'; -- κΉ????????
WHERE name LIKE 'λ¬Έμν¨ν΄'; -- μμΌλμΉ΄λ % _
WHERE SUBSTR( name, 0, 1 ) IN ( 'κΉ', 'μ΄', 'μ΅' );
WHERE SUBSTR( name, 0, 1 ) = 'κΉ' OR SUBSTR( name, 0, 1 ) = 'μ΄';
WHERE SUBSTR( name, 0, 1 ) = 'κΉ';
-- (λ¬Έμ ) emp ν
μ΄λΈ '1981' ~ '1985' μ
μ¬ν μ¬μμ 보 μ‘°ν.
SELECT ename, hiredate
FROM emp
WHERE SUBSTR( hiredate, 0, 2) BETWEEN 81 AND 85;
WHERE REGEXP_LIKE( hiredate, '^8[1-5]' ); -- '1981' ~ '1985'
WHERE REGEXP_LIKE (hiredate, '^(81|85)'); X
WHERE REGEXP_LIKE( hiredate, '^81' ); -- REGEXP_LIKEν¨μ
WHERE hiredate LIKE '81%';
-- ( λ¬Έμ ) μ¬μλͺ
μμ am, ak , ar λμλ¬Έμ ꡬλΆμμ΄ ν¬ν¨λ μ¬μ μ 보 μ‘°ν.
-- LIKE, REGEXP_LIKE, κΈ°νμ°μ°μ,ν¨μ μ¬μ©.~
SELECT ename , hiredate
FROM emp
WHERE REGEXP_LIKE( ename , 'a[mkr]' , 'i' );
WHERE REGEXP_LIKE( ename , 'am|ak|ar' , 'i' );
WHERE ename LIKE '%' || UPPER('am') || '%'; -- μ΄ κ΅¬λ¬Έ μκΈ°.
WHERE LOWER(ename) LIKE '%am%' OR LOWER(ename) LIKE '%ak%' OR LOWER(ename) LIKE '%ar%';
WHERE ename LIKE '%am%' OR ename LIKE '%ak%' OR ename LIKE '%ar%'
OR ename LIKE '%AM%' OR ename LIKE '%AK%' OR ename LIKE '%AR%'
OR ename LIKE '%Am%' OR ename LIKE '%Ak%' OR ename LIKE '%Ar%'
OR ename LIKE '%aM%' OR ename LIKE '%aK%' OR ename LIKE '%aR%';
SELCECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')
ORDER BY last_name;β
-> 무쑰건 μμ, λ κ°μμΌνκ³ v or ph
-- 37. emp ν
μ΄λΈμμ μ§μμμ¬(mgr)κ° μλ μ¬μμ μ 보λ₯Ό μ‘°ν
SELECT *
FROM emp
WHERE mgr IS NULL;
WHERE mgr = null;
-- 38. empν
μ΄λΈμμ κ° λΆμλ³λ‘ μ€λ¦μ°¨μ 1μ°¨ μ λ ¬νκ³ κΈμ¬(PAY)λ³λ‘ 2μ°¨ λ΄λ¦Όμ°¨μ μ λ ¬ν΄μ μ‘°ννλ 쿼리 μμ±
-- 39. Alias λ₯Ό μμ±νλ 3κ°μ§ λ°©λ²μ μ μΌμΈμ.
SELECT deptno, ename
, sal + comm (γ±) AS "PAY" " μλ°μ΄ν
, sal + comm (γ΄) "P AY"
, sal + comm (γ·) P_AY
FROM emp;
"" μλ΅ν μ μλ κ²½μ° ? λ³μΉμ κ³΅λ°±μ΄ μλ κ²½μ°λ μλ΅ X
-- 40. μ€λ λ°°μ΄ μ€λΌν΄μ SQL μ°μ°μλ₯Ό μ μΌμΈμ.
γ±. ||
γ΄. = != > < >= <= λΉκ΅μ°μ°μ
AND OR NOT λ
Όλ¦¬μ°μ°μ
[NOT] LIKE SQL μ°μ°μ
[NOT] BETWEEN AND "
IS [NOT] NULL "
[NOT] IN ( list ) "
40-2) μ€λΌν΄ ν¨μ
UPPER(), LOWER() , INITCAP(), SUBSTR(), CONCAT()
TO_CHAR(), EXTRACT() λ μ§ -> λ
,μ,μΌ
NVL
NVL2
-- [ LIKE wildcardλ₯Ό μΌλ° λ¬Έμμ²λΌ μ°κ³ μΆμ κ²½μ°μλ ESCAPE μ΅μ
μ μ¬μ© ]
7369 SMITH CLERK 7902 80/12/17 800 null 20
S_MITH
SELECT *
FROM emp
WHERE empno = 7369;
-- μ¬μλͺ
μμ : DML( insert, [update], delete ) + 컀λ°, λ‘€λ°±
[UPDATE]
1. μΌλ°μ μΈ update
γνμγ
UPDATE ν
μ΄λΈλͺ
SET 컬λΌλͺ
= λ³κ²½ν κ°[, 컬λΌλͺ
= λ³κ²½ν κ°,...]
[WHERE 쑰건];
SELECT SYSDATE --22/09/27 + μκ°
FROM dual;
--
UPDATE emp
SET ename = 'S_MITH' --, hiredate = SYSDATE, sal = 100;
WHERE empno = 7369;
-- 14κ° ν μ΄(κ°) μ
λ°μ΄νΈλμμ΅λλ€. (WHEREμ‘°κ±΄μ΄ μμΌλ©΄ λͺ¨λ μ¬μμ 쑰건μ λ°κΏλ²λ¦Ό)
ROLLBACK;
SELECT *
FROM emp;
-- ( λ¬Έμ ) μ¬μμ΄λ¦ 'S_' ν¬ν¨λ μ¬μμ μ 보 μ‘°ν
-- LIKE μ°μ°μ + ESCAPE μ΅μ
μ€λͺ
SELECT ename, hiredate
FROM emp
WHERE ename LIKE '%S\_%' ESCAPE '\'; -- S_MITH 80/12/17
// μμ¬λ¬μκ° λΆμ μμΌλμΉ΄λλ μμΌλμΉ΄λμμ μ μΈλλ€λλ»
-- SCOTT 87/04/19
2. μλΈμΏΌλ¦¬λ₯Ό μ¬μ©νλ update
γνμγ
UPDATE ν
μ΄λΈλͺ
1
SET (컬λΌλͺ
1, 컬λΌλͺ
2, ...) = (SELECT s_컬λΌλͺ
1, s_컬λΌλͺ
2,...
FROM ν
μ΄λΈλͺ
2
[WHERE 쑰건2])
[WHERE 쑰건];
μ°μ°μ
μ΅κ·ΌλκΈ