[DB] ORACLE - 3์ผ


ORACLE



์˜ค๋ผํด 3์ผ

โ€ป select (ํ•ด์„์ˆœ์„œ 1 โ†’ 2 โ†’ 3 โ†’ 4 โ†’ 5)

select [distinct] [์ปฌ๋Ÿผ1,์ปฌ๋Ÿผ2,.....][as ๋ณ„๋ช…][ || ์—ฐ์‚ฐ์ž][*] --- 6
from ํ…Œ์ด๋ธ”๋ช…   --- 1
[where ์กฐ๊ฑด์ ˆ]  --- 2
[group by์ปฌ๋Ÿผ๋ช…] --- 3
[having ์กฐ๊ฑด์ ˆ]  --- 4
[order by ์ปฌ๋Ÿผ๋ช… asc|desc ] --- 5


group by : ๊ทธ๋ฃนํ•จ์ˆ˜(max,min,sum,avg,count..)์™€ ๊ฐ™์ด ์‚ฌ์šฉ

having : ๋ฌถ์–ด๋†“์€ ๊ทธ๋ฃน์˜ ์กฐ๊ฑด์ ˆ



ex1) ์‚ฌ์›ํ…Œ์ด๋ธ”์—์„œ ๊ธ‰์—ฌ์˜ ํ‰๊ท ์„ ๊ตฌํ•˜์‹œ์˜ค

์กฐ๊ฑด)์†Œ์ˆ˜์ดํ•˜๋Š” ์ ˆ์‚ญ, ์„ธ์ž๋ฆฌ๋งˆ๋‹ค ์ฝค๋งˆ(,)

 ์‚ฌ์›๊ธ‰์—ฌํ‰๊ท 
------------
   6,461

select to_char(trunc(avg(salary),0), '99,999') as ์‚ฌ์›๊ธ‰์—ฌํ‰๊ท  from employees;


ex2)๋ถ€์„œ๋ณ„ ๊ธ‰์—ฌํ‰๊ท ์„ ๊ตฌํ•˜์‹œ์˜ค

์กฐ๊ฑด1) ์†Œ์ˆ˜์ดํ•˜๋Š” ๋ฐ˜์˜ฌ๋ฆผ
์กฐ๊ฑด2) ์„ธ์ž๋ฆฌ๋งˆ๋‹ค์ฝค๋งˆ, ํ™”ํŽ˜๋‹จ์œ„ \๋ฅผ ํ‘œ์‹œ
์กฐ๊ฑด3) ๋ถ€์„œ์ฝ”๋“œ    ํ‰๊ท ๊ธ‰์—ฌ
  ---------------------------
       10         8,600
์กฐ๊ฑด4) ๋ถ€์„œ๋ณ„๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ •๋ ฌํ•˜์‹œ์˜ค 
์กฐ๊ฑด5) ํ‰๊ท ๊ธ‰์—ฌ๊ฐ€ 5000์ด์ƒ์ธ ๋ถ€์„œ๋งŒ ํ‘œ์‹œํ•˜์‹œ์˜ค
  
select department_id as ๋ถ€์„œ์ฝ”๋“œ, 
to_char(round(avg(salary),0),'L99,999,999') as ํ‰๊ท ๊ธ‰์—ฌ
from employees
group by department_id   
having avg(salary)>=5000
order by department_id asc; 


ex3) ๋ถ€์„œ๋ณ„ ๊ธ‰์—ฌํ‰๊ท ์„ ๊ตฌํ•ด์„œ ์‚ฌ์›๋ช…(last_name),๋ถ€์„œ๋ณ„ ๊ธ‰์—ฌํ‰๊ท ์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค - X

select last_name, avg(salary)
from employees
group by department_id;

โ˜… last_name ๋•Œ๋ฌธ์— error
group by์ ˆ์— ์—†๋Š”๊ฒƒ์„ select์— ์กฐํšŒํ•˜๋ฉด error


[๋ฌธ์ œ1] ์—…๋ฌดID๋ณ„ ๊ธ‰์—ฌ์˜ ํ•ฉ๊ณ„๋ฅผ ๊ตฌํ•ด์„œ ์—…๋ฌดID, ๊ธ‰์—ฌํ•ฉ๊ณ„๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค


ex4) ๋น„ํšจ์œจ์ ์ธ having์ ˆ

10๊ณผ 20 ๋ถ€์„œ์—์„œ ์ตœ๋Œ€๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š”์‚ฌ๋žŒ์˜ ์ตœ๋Œ€๊ธ‰์—ฌ๋ฅผ ๊ตฌํ•˜์—ฌ ์ •๋ ฌํ•˜์‹œ์˜ค



department_id   max_salary
---------------------------
    10             4400
    20            13000 



select department_id, max(salary) as max_salary
from employees
group by department_id
having department_id in(10,20)
order by department_id;

์ „์ฒด ๋ถ€์„œ์— ๋Œ€ํ•ด ๊ทธ๋ฃน์„ ์žก์•„์„œ ์ตœ๋Œ€๊ธ‰์—ฌ๋ฅผ ๊ตฌํ•œํ›„์— ๋ถ€์„œ๊ฐ€ 10 ๊ณผ 20์ธ๊ฒƒ์„ ์ถ”๋ ค๋‚ด๊ธฐ ๋•Œ๋ฌธ์ธ๊ฒƒ 

 


select department_id, max(salary) as max_salary
from employees
where department_id in(10,20)
group by department_id
order by department_id;

๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ 10๊ณผ 20์ธ ๊ฒƒ๋งŒ ๊ณจ๋ผ๋‚ด์„œ ๊ทธ๋ฃน์žก๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ์ข€ ๋น ๋ฅด๋‹ค


[์กฐ์ธ(join)]

(employees)  (departments)   (join)

์‚ฌ    ๋ถ€      ๋ถ€    ๋ถ€      ์‚ฌ   ๋ถ€  ๋ถ€

์›    ์„œ   +  ์„œ    ์„œ   =  ์›   ์„œ  ์„œ

์ด    ๋ฒˆ      ๋ฒˆ    ์ด      ์ด   ๋ฒˆ  ์ด

๋ฆ„    ํ˜ธ      ํ˜ธ    ๋ฆ„      ๋ฆ„   ํ˜ธ  ๋ฆ„

 

โ€ป ์ข…๋ฅ˜
1. Inner join : ๊ฐ™์€๊ฒƒ ๋ผ๋ฆฌ๋งŒ ์—ฐ๊ฒฐ
2. Outer join : ํ•œ์ชฝ์„ ๊ธฐ์ค€(๋ชจ๋‘ํฌํ•จ)ํ•ด์„œ ์—ฐ๊ฒฐ

       left join : ์™ผ์ชฝ์ปฌ๋Ÿผ ๋ชจ๋‘ํฌํ•จ
       right join : ์˜ค๋ฅธ์ชฝ์ปฌ๋Ÿฌ ๋ชจ๋‘ํฌํ•จ
       
3. full join : ์™ผ์ชฝ,์˜ค๋ฅธ์ชฝ ๋ชจ๋‘ ํฌํ•จ
4. self join : ์ž๊ธฐ์ž์‹  ํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐ
5. cross join : ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋กœ ์—ฐ๊ฒฐ
6. non equijoin : ๋ฒ”์œ„์— ์†ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ
7. n๊ฐœ ํ…Œ์ด๋ธ” ์กฐ์ธ : ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ…Œ์ด๋ธ” ์กฐ์ธ


โ€ป ๋ฐฉ๋ฒ•
1. ์˜ค๋ผํด ๊ตฌ๋ฌธ์ „์šฉ
2. Ansi ํ‘œ์ค€๊ตฌ๋ฌธ

ex5) inner join : ๊ฐ™์€๊ฒƒ๋ผ๋ฆฌ๋งŒ ์กฐ์ธ

์‚ฌ์›ํ…Œ์ด๋ธ”๊ณผ ๋ถ€์„œํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ๊ฐ€ ๊ฐ™์„๊ฒฝ์šฐ ์‚ฌ์›๋ฒˆํ˜ธ,๋ถ€์„œ๋ฒˆํ˜ธ,๋ถ€์„œ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค

๋ฐฉ๋ฒ•1(์˜ค๋ผํด์ „์šฉ๊ตฌ๋ฌธ)

select employee_id, 
   employees.department_id,
   department_name
from employees, departments
where employees.department_id = departments.department_id;  

๋ฐฉ๋ฒ•2(์˜ค๋ผํด์ „์šฉ๊ตฌ๋ฌธ)

select e.employee_id, 
   e.department_id,
   d.department_name
from employees e, departments d
where e.department_id = d.department_id; 

๋ฐฉ๋ฒ•3(Ansiํ‘œ์ค€)

select employee_id, department_id, department_name
from employees
join departments using(department_id); 


[๋ฌธ์ œ2] ๋ถ€์„œํ…Œ์ด๋ธ”(departments d)๊ณผ ์œ„์น˜ํ…Œ์ด๋ธ”(Locations l)์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ถ€์„œ๊ฐ€ ์œ„์น˜ํ•œ ๋„์‹œ๋ฅผ ์•Œ์•„๋‚ด์‹œ์˜ค

department_id   city
----------------------
     10     Seattle

๋ฐฉ๋ฒ•2(์˜ค๋ผํด์ „์šฉ๊ตฌ๋ฌธ)

๋ฐฉ๋ฒ•3(Ansiํ‘œ์ค€)


ex6) outer join(left) : ์™ผ์ชฝ ํ…Œ์ด๋ธ”์€ ๋ชจ๋‘ํฌํ•จํ•˜์—ฌ ์กฐ์ธ

์‚ฌ์›ํ…Œ์ด๋ธ”๊ณผ ๋ถ€์„œํ…Œ์ด๋ธ”์—์„œ ๋ถ€์„œ๋ฒˆํ˜ธ๊ฐ€ ๊ฐ™์€ ์‚ฌ์›์„ ์กฐ์ธํ•˜์‹œ์˜ค ===> 107๋ ˆ์ฝ”๋“œ

๋ฐฉ๋ฒ•1(์˜ค๋ผํด์ „์šฉ๊ตฌ๋ฌธ)

select e.last_name, d.department_id, d.department_name
from employees e, departments d
where e.department_id=d.department_id(+);

๋ฐฉ๋ฒ•2(Ansiํ‘œ์ค€)

select last_name, department_id, department_name
from employees
left join departments using(department_id);


ex7) outer join(right) : ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์€ ๋ชจ๋‘ํฌํ•จํ•˜์—ฌ ์กฐ์ธ

๋ฐฉ๋ฒ•1(์˜ค๋ผํด์ „์šฉ๊ตฌ๋ฌธ)

select e.last_name, d.department_id, d.department_name
from employees e, departments d
where e.department_id(+)=d.department_id;

๋ฐฉ๋ฒ•2(Ansiํ‘œ์ค€)

select last_name, department_id, department_name
from employees
right join departments using(department_id);

๋ฐฉ๋ฒ•1(์˜ค๋ผํด์ „์šฉ๊ตฌ๋ฌธ)

select d.department_id, l.city
from departments d, locations2 l
where d.location_id=l.loc_id;

๋ฐฉ๋ฒ•2(Ansiํ‘œ์ค€)

select department_id, city
from departments
join locations2 on(location_id=loc_id); 

๋ฐฉ๋ฒ•3(Ansiํ‘œ์ค€)

select department_id, city
from departments d
join locations2 l on(d.location_id=l.loc_id); 


ex11) self ์กฐ์ธ : ์ž๊ธฐ์ž์‹ ์˜ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธํ•˜๋Š”๊ฒฝ์šฐ ์‚ฌ์›๊ณผ ๊ด€๋ฆฌ์ž๋ฅผ ์—ฐ๊ฒฐํ•˜์‹œ์˜ค

์‚ฌ์›๋ฒˆํ˜ธ  ์‚ฌ์›์ด๋ฆ„   ๊ด€๋ฆฌ์ž
-------------------------
  101   Kochhar    King  
       employees                    employees

employee_id, last_name(์‚ฌ์›์ด๋ฆ„)   last_name(๊ด€๋ฆฌ์ž)

์กฐ๊ฑด employee_id = manager_id

 
select employee_id,manager_id, last_name from employees; โ†’ e
select employee_id, last_name from employees; โ†’ m


[๋ฐฉ๋ฒ• 1]

select e.employee_id as ์‚ฌ์›๋ฒˆํ˜ธ, e.last_name as ์‚ฌ์›์ด๋ฆ„, m.last_name as ๊ด€๋ฆฌ์ž
from employees e, employees m
where m.employee_id=e.manager_id; 

[๋ฐฉ๋ฒ• 2]

select e.employee_id as ์‚ฌ์›๋ฒˆํ˜ธ, e.last_name as ์‚ฌ์›์ด๋ฆ„, m.last_name as ๊ด€๋ฆฌ์ž
from employees e
join employees m on(m.employee_id=e.manager_id); 


ex12) cross join : ๋ชจ๋“ ํ–‰์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜๋Š” ์กฐ์ธ

select * from countries, locations;โ† 575๋ ˆ์ฝ”๋“œ
select * from countries cross join locations;


ex13) Non Equijoin (๋„Œ ์ดํ์กฐ์ธ)

โ€‹ : ์ปฌ๋Ÿผ๊ฐ’์ด ๊ฐ™์€๊ฒฝ์šฐ๊ฐ€ ์•„๋‹Œ ๋ฒ”์œ„์— ์†ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ• ๋•Œ

โ€‹ on ( ์ปฌ๋Ÿผ๋ช… between ์ปฌ๋Ÿผ๋ช…1 and ์ปฌ๋Ÿผ๋ช…2)

create table salgrade(
salvel varchar2(2),
lowst number,
highst number); 

insert into salgrade values('A', 20000, 29999);
insert into salgrade values('B', 10000, 19999);
insert into salgrade values('C', 0, 9999);
commit;

select * from salgrade;
select last_name, salary, salvel
from employees
join salgrade on(salary between lowst and highst)
order by salary desc;


ex14) n(์—ฌ๋Ÿฌ)๊ฐœ์˜ ํ…Œ์ด๋ธ”์€ ์กฐ์ธ

์—…๋ฌดID๊ฐ™์€ ์‚ฌ์›๋“ค์˜ ์‚ฌ์›์ด๋ฆ„, ์—…๋ฌด๋‚ด์šฉ, ๋ถ€์„œ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค

(employees, jobs, departmentsํ…Œ์ด๋ธ”์„ ์กฐ์ธ)

<๋ถ„์„>
  employees      jobs    departments
--------------------------------
department_id   job_id   department_id
job_id
<์ถœ๋ ฅ>

last_name   job_title    department_name
-----------------------------------------
select last_name, job_title, department_name
from employees
join departments using(department_id)
join jobs using(job_id);


[๋ฌธ์ œ3] ์œ„์น˜ID, ๋ถ€์„œID๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ์‚ฌ์›์ด๋ฆ„,๋„์‹œ,๋ถ€์„œ์ด๋ฆ„์„ ์ถœ๋ ฅํ•˜์‹œ์˜ค

โ€‹ (๊ด€๋ จํ…Œ์ด๋ธ” : employees, locations2, departments)

์กฐ๊ฑด1 : ์‚ฌ์›์ด๋ฆ„ ,๋„์‹œ,๋ถ€์„œ์ด๋ฆ„๋กœ ์ œ๋ชฉ์„ ํ‘œ์‹œํ•˜์‹œ์˜ค

์กฐ๊ฑด2 : Seattle ๋˜๋Š” Oxford ์—์„œ ๊ทผ๋ฌดํ•˜๋Š” ์‚ฌ์›

์กฐ๊ฑด3 : ๋„์‹œ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ •๋ ฌํ•˜์‹œ์˜ค

์‚ฌ์›์ด๋ฆ„   ๋„  ์‹œ   ๋ถ€์„œ์ด๋ฆ„
-------------------------
Hall     Oxford    Sales


[๋ฌธ์ œ4] ๋ถ€์„œID, ์œ„์น˜ID, ๊ตญ๊ฐ€ID๋ฅผ ์—ฐ๊ฒฐํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์™„์„ฑํ•˜์‹œ์˜ค

(๊ด€๋ จํ…Œ์ด๋ธ” : employees,locations2, departments,countries)

์กฐ๊ฑด1 : ์‚ฌ์›๋ฒˆํ˜ธ,์‚ฌ์›์ด๋ฆ„,๋ถ€์„œ์ด๋ฆ„,๋„์‹œ,๋„์‹œ์ฃผ์†Œ,๋‚˜๋ผ๋ช…๋กœ ์ œ๋ชฉ์„ ํ‘œ์‹œํ•˜์‹œ์˜ค

์กฐ๊ฑด2 : ๋„์‹œ์ฃผ์†Œ์— Ch ๋˜๋Š” Sh ๋˜๋Š” Rd๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ํ‘œ์‹œํ•˜์‹œ์˜ค

์กฐ๊ฑด3 : ๋‚˜๋ผ๋ช…, ๋„์‹œ๋ณ„๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์ •๋ ฌํ•˜์‹œ์˜ค

์กฐ๊ฑด4 : ๋ชจ๋“ ์‚ฌ์›์„ ํฌํ•จํ•œ๋‹ค