[DB] ORACLE - 2μΌ
in DB
ORACLE
μ€λΌν΄ 2μΌ
[μ°μ°μ]
= : κ°λ€
!=, ^=, <> : κ°μ§μλ€
\>=, <=, >, < : ν¬κ±°λκ°λ€, μκ±°λκ°λ€, ν¬λ€, μλ€
and, or, between and, in, like, is null/ is not null
β» select
select [distinct] [컬λΌ1, 컬λΌ2.......][*]
from ν
μ΄λΈλͺ
[where 쑰건μ ]
[order by 컬λΌλͺ
asc|desc ]
order by : μ λ ¬
β asc - μ€λ¦μ°¨μ(μλ΅κ°λ₯)
β desc - λ΄λ¦Όμ°¨μ
컬λΌλͺ : μ«μλ‘λ κ°λ₯
ex1 ) μ¬μλͺ ,λΆμID,μ μ¬μΌμ λΆμλ³λ‘ λ΄λ¦Όμ°¨μ μ λ ¬νμμ€
```` select last_name, department_id, hire_date from employees order by 2 desc;
````
ex2 ) μ¬μλͺ , λΆμID, μ μ¬μΌμ λΆμλ³λ‘ λ΄λ¦Όμ°¨μ μ λ ¬νμμ€
β κ°μλΆμκ° μμλλ μ μ¬μΌμμΌλ‘ μ λ ¬νμμ€
select last_name, department_id, hire_date
from employees
order by 2 desc, 3 asc;
[λ¬Έμ 1] μ¬μλ€μ μ°λ΄μ ꡬνν μ°λ΄μμΌλ‘ λ΄λ¦Όμ°¨μμ λ ¬νμμ€
μ΄ λ¦ μ° λ΄
King 28800
[λ¨μΌν ν¨μ]
μ«μν¨μ : mod, round, trunc, ceil
λ¬Έμν¨μ : lower, upper, length, substr, ltrim, rtrim, trim
β Dataλ λ,μλ¬Έμ κ°λ¦Ό μΌ,μ€λ₯Έμͺ½ 곡백μ κ±°
λ μ§ν¨μ : sysdate, add_month, month_between
β μμ€ν μμλλ μ§, μ§κΈλΆν° 3λ¬ λ€,λͺλ¬λΆν° λͺλ¬μ¬μ΄
λ³νν¨μ
* μμμ (implict)λ³ν:μλ VARCHAR2 λλ CHAR ------> NUMBER VARCHAR2 λλ CHAR ------> DATE NUMBER ------> VARCHAR2 DATE ------> VARCHAR2 * λͺ μμ (explict)λ³ν:κ°μ TO_NUMBER TO_DATE <------ ------> NUMBER CHARACTER DATE ------> <------ TO_CHAR TO_CHARλ μ§ νμ
YYYY : λ€μ리μ°λ(μ«μ) (ex. 2005) YEAR : μ°λ(λ¬Έμ) MM : λμ리 κ°μΌλ‘ λνλΈ λ¬ (ex. 01, 08, 12) MONTH : λ¬ μ 체μ΄λ¦ (ex. January) MON : μΈμ리 μ½μ΄λ‘ λνλΈ λ¬ (ex. Jan) DY : μΈμ리 μ½μ΄λ‘ λνλΈ μμΌ (ex. Mon) DAY : μμΌμ 체 (ex. Monday) DD : μ«μλ‘ λνλΈ λ¬μ μΌ (ex. 31, 01) HH, HH24(24μκ°μ ) MI(λΆ) SS(μ΄)μ«μ νμ
9 : μ«μλ₯Ό νμ 9,999.99 9.999.00<->JAVA #,###.## #.###.00
0 : 0μ κ°μ λ‘ νμ
$ : λΆλ$κΈ°νΈλ₯Ό νμ
L : λΆλ μ§μν΅νκΈ°νΈ νμ
. : μμμ μΆλ ₯
, : μ²λ¨μ ꡬλΆμ μΆλ ₯
κ·Έλ£Ή(μ§ν©)ν¨μ : avg, sum, max, min, count
κΈ°νν¨μ : nvl, dcode, case
ex1 ) μ΄λ¦μ μλ¬Έμλ‘ λ°κΎΌν κ²μ
βHigginsβμ¬μμ μ¬μλ²νΈ, μ΄λ¦, λΆμλ²νΈλ₯Ό κ²μνμμ€
select employee_id, last_name, department_id
from employees
where lower(last_name)='higgins';
ex2 ) 10μ 3μΌλ‘ λλ λλ¨Έμ§κ΅¬νμμ€(mod)
select mod(10,3) from dual; β κ°μμ ν
μ΄λΈ
ex3 ) 35765.357μ λ°μ¬λ¦Ό(round)
μμΉκ° nμΌ λ nμ΄ μμμ΄λ©΄ (n+1)μμ λ°μ¬λ¦Όμ΄ λκ³
nμ΄ μμμ΄λ©΄ nμ μμΉμμ λ°μ¬λ¦Ό λλ€
select round(35765.357, 2) from dual; //35765.36
select round(35765.357, 0) from dual; //35765
select round(35765.357, -3) from dual; //36000
ex4 ) 35765.357μ λ΄λ¦Ό(trunc)
μμΉκ° nμΌ λ nμ΄ μμμ΄λ©΄ (n+1)μμ λ°μ¬λ¦Όμ΄ λκ³
nμ΄ μμμ΄λ©΄ nμ μμΉμμ λ°μ¬λ¦Ό λλ€
select trunc(35765.357, 2) from dual; //35765.35
select trunc(35765.357, 0) from dual; //35765
select trunc(35765.357, -3) from dual; //35000
ex5 ) concat(βλ¬Έμμ΄1β,βλ¬Έμμ΄2) : λ¬Έμμ΄μ κ²°ν©(λ¬Έμμ΄1+λ¬Έμμ΄2)
select concat('Hello', ' World') from dual;
ex6 ) length(βλ¬Έμμ΄β) : λ¬Έμμ΄μ κΈΈμ΄
β lengthb(βλ¬Έμμ΄β) : λ¬Έμμ΄μ κΈΈμ΄
create table text (
str1 char(20),
str2 varchar2(20));
char : κ³ μ λ¬ΈμκΈΈμ΄
varchar2 : κ°λ³λ¬ΈμκΈΈμ΄
insert into text(str1,str2) values('μ¬μ²μ¬','μ¬μ²μ¬');
insert into text(str1,str2) values('angel','angel');
commit;
select length(str1), length(str2) from text;
14 3
20 5
select lengthb(str1), lengthb(str2) from text;
20 9
20 5
ex7 )
select length('korea') from dual;
select length('μ½λ¦¬μ') from dual;
select lengthb('korea') from dual;
select lengthb('μ½λ¦¬μ') from dual;
ex8 ) μ§μ ν λ¬Έμμ΄ μ°ΎκΈ° : instr(ννμ, μ°Ύλλ¬Έμ, [μμΉ]) 1:μ(μλ΅κ°λ₯), -1:λ€
select instr('HelloWorld', 'W') from dual; //6
123456789
select instr('HelloWorld', 'o',-5) from dual; //5
<---μμ μμ--->
select instr('HelloWorld', 'o',-1) from dual; //7
ex9 ) μ§μ ν κΈΈμ΄μ λ¬Έμμ΄μ μΆμΆ : substr(ννμ,μμ,[κ°―μ])
select substr('I am very happy', 6, 4) from dual;//very
6λ²μ§Έ λΆν° 4κ°λ₯Ό κΊΌλ΄μλΌ
select substr('I am very happy', 6) from dual;//very happy
6λ²μ§Έ λΆν° λ½μμλΌ.
[λ¬Έμ 2] μ¬μμ λ μ½λλ₯Ό κ²μνμμ€(concat, length)
쑰건1) μ΄λ¦κ³Ό μ±μ μ°κ²°νμμ€(concat)
쑰건2) ꡬν΄μ§ μ΄λ¦μ κΈΈμ΄λ₯Ό ꡬνμμ€(length)
쑰건3) μ±μ΄ nμΌλ‘ λλλ μ¬μ(substr)
employee_id name length
--------------------------------
102 LexDe Haan 10
ex10 ) μμμ κ°μ΄ μ§μ λλ²μλ΄μ μ΄λ μμΉ : width_bucket(ννμ,μ΅μκ°,μ΅λκ°,ꡬκ°)
μ΅μ-μ΅λκ°μ μ€μ νκ³ 10κ°μ ꡬκ°μ μ€μ ν μμΉμ°ΎκΈ°
0-100κΉμ§μ ꡬκ°μ λλν 74κ° ν¬ν¨λμ΄μλꡬκ°μ νμνμμ€
select width_bucket(74, 0, 100, 10) from dual; //8
ex11 ) 곡백μ κ±° : ltrim(μΌ), rtrim(μ€λ₯Έ), trim(μμͺ½)
select rtrim('test ')||'exam' from dual;
ex12 ) sysdate : μμ€ν μ μ€μ λ μκ°νμ
select sysdate from dual;
select to_char(sysdate, 'YYYY"λ
" MM"μ" DD"μΌ"') as μ€λλ μ§ from dual;
select to_char(sysdate, 'HH"μ" MI"λΆ" SS"μ΄"') as μ€λλ μ§ from dual;
select to_char(sysdate, 'HH24"μ" MI"λΆ" SS"μ΄"') as μ€λλ μ§ from dual;
ex13 ) add_months(date, λ¬μ):λ μ§μ λ¬μ λνκΈ°
νμ¬ λ¬μ + 7month
select add_months(sysdate, 7) from dual;
ex14 ) last_day(date) : ν΄λΉλ¬μ λ§μ§λ§λ
select last_day(sysdate) from dual;
select last_day('2004-02-01') from dual;
select last_day('2005-02-01') from dual;
[λ¬Έμ 3] μ€λλΆν° μ΄λ²λ¬ λ§κΉμ§ μ΄ λ¨μ λ μλ₯Ό ꡬνμμ€
ex15 ) months_between(date1,date2) : λ λ μ§μ¬μ΄μ λ¬μ
μ΄ λ¨μ κ³μ°,μμ«μ μ΄νκΉμ§ λ€ κ³μ° -> Round(λ°μ¬λ¦Ό)μμ«μ μ΄ν λ€ μλΌλΌ
select round(months_between('95-10-21', '94-10-20'), 0) from dual; β μλ νλ³ν
λͺ
μμ μΈ λ³ν(κ°μ )
select last_name, to_char(salary, 'L99,999.00')
from employees
where last_name='King';
ex16 )
νμ¬λ
λ νμ¬λ
λ
select to_char(to_date('97/9/30', 'YY-MM-DD') , 'YYYY-MON-DD') from dual;β 2097 λ°νμΌ μ΄μ μΈκΈ°
select to_char(to_date('97/9/30', 'RR-MM-DD') , 'RRRR-MON-DD') from dual;β 1997
select to_char(to_date('17/9/30', 'YY-MM-DD') , 'YYYY-MON-DD') from dual;β 2017
select to_char(to_date('17/9/30', 'RR-MM-DD') , 'RRRR-MON-DD') from dual;β 2017
1997 2017 2097
20 80 --> κ°κΉμ΄λ
λλ₯Ό κ°μ Έμ¨λ€.

[λ¬Έμ 4] 2005λ μ΄μ μ κ³ μ©λ μ¬μμ μ°ΎμΌμμ€
last_name hire_date
--------------------------
King 17-6μ -2003
De Haan 13-1μ -2001
Greenberg 17-8μ -2002
(μμ 0μ λΆμΈλ€.)
ex17 ) fmνμ:νμκ³Ό λ°μ΄ν°κ° λ°λμ μΌμΉν΄μΌν¨(fm - fmμ¬μ΄κ°λ§ μΌμΉ)
fmλ₯Ό νμνλ©΄ μ«μμμ 0μ λνλμ§ μλλ€.
select last_name, hire_date from employees where hire_date='05/09/30';
select last_name, hire_date from employees where hire_date='05/9/30';
select to_char(sysdate, 'YYYY-MM-DD') from dual;
select to_char(sysdate, 'YYYY-fmMM-DD') from dual;
select to_char(to_date('2011-03-01','YYYY-MM-DD'), 'YYYY-MM-DD') from dual;β 2011-03-01
select to_char(to_date('2011-03-01','YYYY-MM-DD'), 'YYYY-fmMM-DD') from dual;β 2011-3-1 --fm1κ° λλ€λΉ μ§
select to_char(to_date('2011-03-01','YYYY-MM-DD'), 'YYYY-fmMM-fmDD') from dual;β 2011-3-01 --fm2κ° 1κ°λΉ μ§κ³ λ€μλΆμ
ex18 ) count(컬λΌλͺ ), max(컬λΌλͺ ), min(컬λΌλͺ ), avg(컬λΌλͺ ), sum(컬λΌλͺ ) ν¨μ
employeesν
μ΄λΈμμ κΈμ¬μ μ΅λ, μ΅μ, νκ· , ν©μ ꡬνμμ€
쑰건) νκ· μ μμμ΄νμ μ, ν©μ μΈμ리λ§λ€ μ½€λ§μ°κ³ \νμ
select max(salary),
min(salary),
trunc(avg(salary),0),
to_char(sum(salary), 'L9,999,999') from employees;
[λ¬Έμ 5] 컀미μ (commission_pct)μ λ°μ§ μμ μ¬μμ μΈμμλ₯Ό ꡬνμμ€
ex19 ) employeesν μ΄λΈμμ μλλΆμν¬ν¨ν΄μ,μ΄ λΆμμ μλ₯Ό ꡬνμμ€(λ΅ : 12κ°)
(nvlμ¬μ©)--λΉμ΄μλ λΆμIDμ NULL->0μ κ°μ λ‘ μ±μ΄λ€.
select department_id from employees; β 107
select count(department_id) from employees; β 106
select count(*) from employees;
select count(distinct department_id) from employees; β 11
select count(distinct nvl(department_id, 0)) from employees; β 12
select distinct nvl(department_id, 0) from employees;β nvlμ nullκ°μ 0μΌλ‘ λμΉ
ex20 ) β decode(ννμ, κ²μ1,κ²°κ³Ό1, κ²μ2,κ²°κ³Ό2β¦.[default])
ννμκ³Ό κ²μμ λΉκ΅νμ¬ κ²°κ³Ό κ°μ λ°ν λ€λ₯΄λ©΄ default
decode(a, 'A',1, 'B',2 , 'C',3 ,7)
β‘ case value when ννμ then ꡬ문1
when ννμ then ꡬ문2
else ꡬ문3
end case
μ
무 idκ° 'SA_MAN' λλ βSA_REP'μ΄λ©΄ 'Sales Dept' κ·Έ μΈ λΆμμ΄λ©΄ 'Another'λ‘ νμ
쑰건) λΆλ₯λ³λ‘ μ€λ¦μ°¨μμ λ ¬
select job_id, decode(job_id,
'SA_MAN', 'Sales Dept',
'SA_REP', 'Sales Dept',
'Another') "λΆλ₯" --asμμ΄λ ""μ€λ©΄ λ¨
from employees
order by 2;
if(job_id == 'SA_MAN') 'Sales Dept'
else if(job_id == 'SA_REP')'Sale Dept'
else 'Another'
-------------------------------------------
select job_id, case job_id
when 'SA_MAN' then 'Sales Dept'
when 'SA_REP' then 'Sales Dept'
else 'Another'
end "λΆλ₯"
from employees
order by 2;
select job_id, case
when job_id='SA_MAN' then 'Sales Dept'
when job_id='SA_REP' then 'Sales Dept'
else 'Another'
end "λΆλ₯"
from employees
order by 2;
[λ¬Έμ 6] κΈμ¬κ° 10000λ―Έλ§μ΄λ©΄ μ΄κΈ, 20000λ―Έλ§μ΄λ©΄ μ€κΈ κ·Έ μΈλ©΄ κ³ κΈμ μΆλ ₯νμμ€ (case μ¬μ©)
쑰건1) 컬λΌλͺ μ βꡬλΆβμΌλ‘ νμμ€
쑰건2) μ λͺ©μ μ¬μλ²νΈ, μ¬μλͺ , ꡬ λΆ
쑰건3) ꡬλΆ(μ€λ¦μ°¨μ)μΌλ‘ μ λ ¬νκ³ , κ°μΌλ©΄ μ¬μλͺ (μ€λ¦μ°¨μ)μΌλ‘ μ λ ¬νμμ€
λ°μ΄ν°κ° λ§μλλ μ μ
ex21 ) rankν¨μ : μ 체κ°μ λμμΌλ‘ μμλ₯Ό ꡬν¨
rank(ννμ) within group(order by ννμ)
rank() over(쿼리νν°μ
) β μ 체μμλ₯Ό νμ
κΈμ¬κ° 3000μΈ μ¬λμ μμ κΈμ¬μμλ₯Ό ꡬνμμ€
select rank(3000) within group(order by salary desc) "rank" from employees; --Sortλ₯Ό λ¨Όμ μν¨λ€.(μκ°μ΄μ€λκ±Έλ¦Ό)
μ 체μ¬μμ κΈμ¬μμλ₯Ό ꡬνμμ€
select employee_id, salary, rank() over(order by salary desc)"rank" from employees;
ex22 ) first_valueν¨μ : μ λ ¬λ κ°μ€μμ 첫λ²μ§Έκ° λ°ν
first_value(ννμ) over(쿼리νν°μ
)
μ 체μ¬μμ κΈμ¬μ ν¨κ» κ°λΆμμ μ΅κ³ κΈμ¬λ₯Ό λνλ΄κ³ λΉκ΅νμμ€
select employee_id,
salary,
department_id, --κ°μλΆμλ‘ κ·Έλ£Ήμ μ‘μ.Sort(λΆμλ³sort)
first_value(salary) over(partition by department_id order by salary desc) "highsal_deptID"
from employees;
β PARTITION BY μ μ GROUP BY μ κ³Ό λμΌν μν μ μ§ν ν©λλ€.
λ¨, GROUP BY μ μ μ¬μ©νμ§ μκ³ νμν μ§ν©μΌλ‘ (WINDOW) νλ€μ κ·Έλ£Ήν μν΄
Partition by μ μ μ¬μ© ν¨μΌλ‘ GROUP BY μ μμ΄ λ€μν GROUPING μ§ν©μ μ§κ³ κ²°κ³Όλ€μ ν¨κ» μΆλ ₯ ν μ μμ΅λλ€.
ORDER BY μ μ Partition by λ‘ μ μλ WINDOW λ΄μμμ νλ€μ μ λ ¬ μμλ₯Ό μ μ νλ€.
select employee_id,
last_name,
salary,
department_id,row_number( ) over ( PARTITION BY department_id ORDER BY salary DESC ) rnum
from employees ;
λΆμλ³ κΈμ¬λ₯Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬ νμ κ²½μ° Row Number
EMPLOYEE_ID LAST_NAME SALARY DEPARTMENT_ID RNUM
------------ --------- -------- ------------- -----
200 Whalen 4400 10 1
201 Hartstein 13000 20 1
202 Fay 6000 20 2
114 Raphaely 11000 30 1
115 Khoo 3100 30 2
116 Baida 2900 30 3
117 Tobias 2800 30 4
118 Himuro 2600 30 5
λΆμ λ²νΈκ° λ°λ λ Row Number λ μλ‘ μμ λλ κ²μ νμΈ ν μ μμ΅λλ€.
NULL κ°μ μ λ ¬ μ κ°μ₯ ν° κ°μΌλ‘ μΈμ (κΈ°λ³Έμ€μ )
[λ¬Έμ 7] μ¬μν μ΄λΈμμ μ¬μλ²νΈ, μ΄λ¦, κΈμ¬, 컀미μ , μ°λ΄μ μΆλ ₯νμμ€
쑰건1) μ°λ΄μ $ νμμ μΈμ리λ§λ€ μ½€λ§λ₯Ό μ¬μ©νμμ€
쑰건2) μ°λ΄ = κΈμ¬ * 12 + (κΈμ¬ * 12 * 컀미μ
)
쑰건3) 컀미μ
μ λ°μ§ μλ μ¬μλ ν¬ν¨ν΄μ μΆλ ₯νμμ€
[λ¬Έμ 8] λ§€λμ κ° μλ μ¬μμ λ§€λμ idλ₯Ό, 1000λ²μΌλ‘ νμ
쑰건1) μ λͺ©μ μ¬μλ²νΈ,μ΄λ¦,λ§€λμ ID
쑰건2) λͺ¨λ μ¬μμ νμνμμ€
μ¬μλ²νΈ μ΄λ¦ λ§€λμ ID
-----------------------
100 King 1000
