๐ ๊ณต๋ถ ๊ธฐ๊ฐ : 07. 25(๋ชฉ)
-- [์ฐ์ต] ์ฌ์๋ฒํธ๊ฐ 162๋ฒ์ธ ์ฌ์์ ๊ธ์ฌ์ ๊ฐ์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์์ ์ด๋ฆ, ๊ธ์ฌ, ๋ถ์๋ฒํธ
-- 1) ์ฐพ์ ๊ฐ : 10,500
SELECT salary
FROM hr.employees e
WHERE employee_id = 162;
-- 2) ์ฐพ์ ๊ฐ์ ๊ฐ์ง๊ณ ๋ค์ ์กฐํ
SELECT first_name, salary, department_id
FROM hr.employees e
WHERE salary = 10500;
-- 3) ๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ๋ก ํฉ์น๊ธฐ
SELECT first_name, salary, department_id
FROM hr.employees e
WHERE salary = (SELECT salary
FROM hr.employees e
WHERE employee_id = 162);
/* [์ฐ์ต] 30๋ฒ ๋ถ์์ ์ง๊ธ๋ค๊ณผ ๋์ผํ ์ง๊ธ์ด
๋ค๋ฅธ ํ์๋ ์๋์ง ์กฐ์ฌํ๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์์ค */
SELECT * FROM hr.employees e
WHERE job_id IN (SELECT DISTINCT job_id
FROM hr.employees e
WHERE department_id = 30);
< any> any= any-- [์ฐ์ต] hr๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์กด์ฌํ๋ employees ํ
์ด๋ธ์ 'ST_MAN'์ด๋ผ๋ ์ง๊ตฐ์ด ์๋ค.
-- 'ST_MAN'์ด๋ผ๋ ์ง๊ตฐ์ด ๋ฐ๋ ๊ธ์ฌ๋ณด๋ค ์ ์ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์์ ์ ๋ณด๋ฅผ ์กฐํ
-- ์ ์ฒด ๋ฐ์ดํฐ ์ค ๊ฐ์ฅ ํฐ ๊ฐ๋ณด๋ค ์์ ๊ฐ
SELECT salary
FROM hr.employees e
WHERE job_id = 'ST_MAN'
ORDER BY 1;
-- [์ ๋ต]
SELECT first_name, salary
FROM hr.employees e
WHERE salary > ANY (SELECT salary
FROM hr.employees e
WHERE job_id = 'ST_MAN'
ORDER BY 1
)
ORDER BY 2;
/* [์ฐ์ต2] job_title์ด 'Manager'์ธ ์ง์๊ณผ ๋์ผํ ๊ธ์ฌ๋ฅผ ๋ฐ๋ ์ง์์
์ฌ๋ฒ, ์ด๋ฆ, job_id, ๊ธ์ฌ์ ์ ๋ณด๋ฅผ ๊ธ์ฌ์์ผ๋ก ์กฐํํ์์ค */
-- [์ ๋ต]
SELECT employee_id, first_name, job_id, salary
FROM hr.employees e
WHERE salary = ANY (SELECT salary
FROM hr.employees e INNER JOIN hr.jobs j
USING (job_id)
WHERE job_title LIKE '%Manager')
ORDER BY 4;
< all> allSELECT first_name, salary
FROM hr.employees e
WHERE salary < ALL (SELECT salary
FROM hr.employees e
WHERE job_id = 'ST_MAN'
ORDER BY salary
)
ORDER BY 2;
-- [์ฐ์ต] ๊ฐ ๋ถ์๋ณ ์ต๊ณ ๊ธ์ก์ ์๋ นํ๋ ์ง์์ ์ ๋ณด(์ฌ์๋ฒํธ, ์ด๋ฆ, ๊ธ์ฌ, ๋ถ์๋ช
, ์ง๊ธ๋ช
)
-- ์ปฌ๋ผ์ด 2๊ฐ ์กฐํ๋จ
SELECT department_id, max(salary), min(salary) -- ๊ทธ๋ฃนํํ ์ ์๋ ์ ๋ณด๋ค๋ง select์ ์ ์ฌ ์ ์์
FROM hr.employees e
GROUP BY department_id;
-- ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
SELECT e.employee_id, e.first_name, e.salary, d.department_name, j.job_title
FROM hr.employees e
INNER JOIN hr.departments d
on e.department_id = d.department_id
INNER JOIN hr.jobs j
ON e.job_id = j.job_id
WHERE (e.department_id, e.salary) IN(SELECT department_id, max(salary)
FROM hr.employees e
GROUP BY department_id
);
์ฑ๋ฅ ๋ฌธ์ ๋๋ฌธ์ Scalar ์๋ธ์ฟผ๋ฆฌ๋ณด๋ค JOIN์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์
SELECT
(SELECT last_name FROM hr.employees e2 WHERE first_name='Bruce') AS "Bruce์ ์ฑ",
(SELECT last_name FROM hr.employees e2 WHERE first_name='Daniel') AS "Daniel์ ์ฑ"
FROM hr.employees e
WHERE first_name = 'David';
์ํธ์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ์์ ๋๊ฐ์ ์ ์ฐจ๋ฅผ ๊ณ์ ๋ฐ๋ณตํ๋ ๊ฒ์ ๋นํจ์จ์ => Inline View๋ฅผ ์ฌ์ฉ
-- [์ฐ์ต] ๊ฐ ๋ถ์๋ณ๋ก ํด๋น ๋ถ์์ ๊ธ์ฌ ํ๊ท ๋ฏธ๋ง์ ๊ธ์ฌ๋ฅผ ์๋ นํ๋ ์ง์ ๋ช
๋จ ์กฐํ
-- (๋ถ์๋ฒํธ, ์ฌ์๋ฒํธ, ์ด๋ฆ, ๊ธ์ฌ, ๋ถ์๋ณ ํ๊ท ๊ธ์ฌ)
SELECT department_id, employee_id, first_name, salary
FROM hr.employees e
WHERE salary <
(SELECT avg(salary)
FROM hr.employees e
WHERE department_id = e.department_id);
ORDER BY 1,2;
๋ง์ด ์ฌ์ฉ๋จ
-- ์ํธ์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ ์ฝ๋๋ฅผ ์ธ๋ผ์ธ๋ทฐ๋ก ์์
SELECT e.department_id, e.employee_id, e.first_name, e.salary, round(๊ธ์ฌํ๊ท )
FROM (SELECT department_id "๋ถ์๋ฒํธ", avg(salary) AS "๊ธ์ฌํ๊ท "
FROM hr.employees e
GROUP BY department_id) tbl, hr.employees e -- INNER JOINํ ๊ฒ
WHERE tbl.๋ถ์๋ฒํธ = e.department_id
AND e.salary < tbl.๊ธ์ฌํ๊ท
ORDER BY 1,2;
