์๋ธ์ฟผ๋ฆฌ๋? ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ ์์ ๋ ๋ค์ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ด ํฌํจ๋์ด ์๋ ํํ
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย Group by ์ ์ ์ ์ธํ ์ฟผ๋ฆฌ๊ตฌ๋ฌธ์ ์ฌ์ฉ ๊ฐ๋ฅ
[where์ ์ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋ ๋ฌธ๋ฒ]
select ์ปฌ๋ผ1, ์ปฌ๋ผ2, ์ปฌ๋ผ3
ย ย ย ย ย ย ย ย ย from ํ
์ด๋ธ๋ช
ย ย ย ย ย ย ย ย ย where ์ปฌ๋ ด๋ช
= (select ์ปฌ๋ผ๋ช
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย from ํ
์ด๋ธ๋ช
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย where ์กฐ๊ฑด๋ฌธ);
โ employeesํ
์ด๋ธ์์ Able๋ณด๋ค ๊ธ์ฌ๋ฅผ ๋ ๋ง์ด ๋ฐ๋ ์ฌ์๋ค์
ย ย ย ย ย employee_id, last_name, salary๋ฅผ ์ถ๋ ฅํ์์ค.
select employee_id, last_name, salary
from employees
where salary > (select salary
from employees
where last_name = 'abel');
: ์๋ธ์ฟผ๋ฆฌ๋ก๋ถํฐ ์ค์ง ํ๋์ ํ์ด ๋ฐํ๋๋ ์ ํ
ย ย ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋จ์ผํ ๋น๊ต์ฐ์ฐ์ ์ฌ์ฉํ๋ฉด ๋จ.
โ 141๋ฒ ์ฌ์๊ณผ ๋์ผํ ์ ๋ฌด ๋ด๋น์๋ฅผ ์ถ๋ ฅํ์์ค.
select employee_id, last_name, job_id
from employees
where job_id = (select job_id
from employees
where employee_id =141);
โ 141๋ฒ ์ฌ์๊ณผ ๋์ผํ ์ ๋ฌด ๋ด๋น์๋ฅผ ์ถ๋ ฅํ๋, ๊ฒฐ๊ณผ์ 141๋ฒ ์ฌ์์ ์ ์ธํ์์ค.
select employee_id, last_name, job_id
from employees
where job_id = (select job_id
from employees
where employee_id =141)
and employee_id <> 141;
โ employees ํ
์ด๋ธ์ ์ ์ฒด ์ง์ ์ค ๊ธ์ฌ๋ฅผ ๊ฐ์ฅ ์ ๊ฒ ๋ฐ๋ ์ฌ์์
ย ย ย ย ย employee_id, last_name, salary,job_id, department_id๋ฅผ ์ถ๋ ฅํ์์ค
select employee_id, last_name, salary, job_id, department_id
from employees
-- where salary = (์ฐ๋ฆฌํ์ฌ ์ต์๊ธ์ฌ);
where salary = (select min(salary)
from employees);
โ 'Lee'์ ๋์ผ์ ๋ฌด๋ฅผ ๋ด๋นํ๋ฉด์ ๊ธ์ฌ๋ ๋ ๋ง์ด ๋ฐ๋ ์ฌ์์ ์ ๋ณด ์ถ๋ ฅํ์์ค.
select last_name, job_id, salary
from employees
where job_id = (select job_id
from employees
where LAST_NAME = 'Lee')
AND salary > (select salary
from employees
where last_name = 'Lee');
< Having์ ์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉ ์์ >
โ ๋ถ์๋ณ ์ต์๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋, 30๋ฒ ๋ถ์์ ์ต์๊ธ๋ณด๋ค ํฐ ๋ถ์๋ค๋ง ์ถ๋ ฅํ์์ค.
select department_id, min(salary)
from employees
where department_id is not null
group by department_id
having min(salary) > (select min(salary)
from employees
where department_id = 30);
โ ๋ถ์๋ณ ์ต์๊ธ์ฌ์ ๋์ผํ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์๋ค์ ์ถ๋ ฅํ์์ค.
select employee_id, last_name
from employees
where salary = (select min(salary) -- ๋ถ์๋ณ ์ต์๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ ์๋ธ์ฟผ๋ฆฌ
from employees
group by department_id);
โ [์ค๋ฅ์์ธ?]
: ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋จ์ผํ ๋น๊ต์ฐ์ฐ์(=)๋ฅผ ์ฌ์ฉํ์์ผ๋ฏ๋ก ์๋ธ์ฟผ๋ฆฌ๋ก๋ถํฐ ํ ํ์ด ๋ฐํ๋์ด์ผ ํ๋๋ฐ
ย ์ฌ๋ฌ ํ์ด ๋ฐํ๋์ด ์ค๋ฅ๊ฐ ๋ฐ์๋จ.
โญ [์์ ]
: ๋ถ์๋ณ ์ต์๊ธ์ฌ๋ฅผ ์ถ๋ ฅํ๋ ์๋ธ์ฟผ๋ฆฌ
select employee_id, last_name
from employees
where salary in (select min(salary)
from employees
group by department_id); //26๋ช
โ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋ ์์ธ์?
: (์๋๋ hass๋ง์ด๋ผ๋ ๋์์ผํ์ง๋ง) ํ์ฌ์ Haas๋ผ๋ ์ง์์ด ์์!!
๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ์ธ ๊ฒฝ์ฐ, ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ null์ด๋ฉด ๋ฉ์ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ null๊ฐ์ด ๋ฐํ๋จ.
select last_name, job_id
from employees
where job_id = (select job_id
from employees
where last_name ='Haas');
: ์๋ธ์ฟผ๋ฆฌ๋ก๋ถํฐ ๋ฉ์ธ์ฟผ๋ฆฌ๋ก ๋ ๊ฐ ์ด์์ ํ์ ๋ฐํ๋๋ ์ ํ
ย ย ๋ค์คํ ์๋ธ์ฟผ๋ฆฌ์ธ ๊ฒฝ์ฐ, ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋ค์คํ ๋น๊ต์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผ ํจ
=anyย ย ย => (=, or)ย ย ย ย ย (=) in => (=, or)
>anyย ย ย => (>, or) ย ย ย ย : ์ต์๊ฐ๋ณด๋ค ํฐ์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
>=any => (>=, or) ย ย : ์ต์๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
<anyย ย ย => (<, or) ย ย ย ย : ์ต๋๊ฐ๋ณด๋ค ์์์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
<=any => (<=, or) ย ย : ์ต๋๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
<>any => (<>, or)ย ย ย : ๋ค ๋ง์กฑ๋จ. ๊ฑธ๋ฌ์ฃผ๋๊ฒ ์๊ธฐ๋๋ฌธ์ ๋ณดํต ์ฌ์ฉ๋์ง ์์!
=allย ย ย ย ย => (=, and)ย ย ย : ๋ณดํต ์ฌ์ฉ๋์ง ์์!
>allย ย ย ย ย => (>, and)ย ย ย : ์ต๋๊ฐ๋ณด๋ค ํฐ์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
>=allย ย ย => (>=, and) : ์ต๋๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
<allย ย ย ย ย => (<, and)ย ย ย : ์ต์๊ฐ๋ณด๋ค ์์์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
<=allย ย ย => (<=, and) : ์ต์๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง๋ฅผ ๋น๊ตํ๋ ์ฐ์ฐ์
<>allย ย ย => (<>, and) (=) not in => (<>, and)
<IN ํ์ฉ ์์ >
SELECT employee_id, last_name, manager_id, department_id
FROM employees
WHERE manager_id IN (SELECT manager_id
FROM employees
WHERE employee_id IN (174, 141))
AND department_id IN (SELECT department_id
FROM employees
WHERE employee_id IN (174, 141))
AND employee_id NOT IN(174, 141);
<Any ํ์ฉ ์์ >
select employee_id, last_name, job_id, salary
from employees
where salary < any (select salary
from employees
where job_id='IT_PROG')
and job_id <> 'IT_PROG';
โ 'IT_PROG' ๋ด๋น์๋ค๋ณด๋ค ๊ธ์ฌ๋ฅผ ์๊ฒ ๋ฐ๋ ์ง์๋ค ์ถ๋ ฅํ๋, 'IT_PROG' ์ง์๋ค์ ๋นผ๊ณ ์ถ๋ ฅํ์์ค.
select employee_id, last_name, job_id, salary
from employees
where salary < all (select salary
from employees
where job_id ='IT_PROG')
and job_id <> 'IT_PROG'; // 44๋ช