Search

WITH

WITH

๊ณตํ†ต ํ…Œ์ด๋ธ” (Common Table) ์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ SQL ํ‚ค์›Œ๋“œ
๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ฃผ๊ณ , ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.
๊ธด ์ฟผ๋ฆฌ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”๋กœ ์„ ์–ธํ•˜๊ณ , ์ฐธ์กฐํ•˜๋Š”๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

WITH ๋ฌธ๋ฒ• ๊ตฌ์กฐ

WITH ๊ณตํ†ตํ…Œ์ด๋ธ”๋ช… AS ( SELECT * FROM ํ…Œ์ด๋ธ” WHERE ... ) SELECT * FROM ํ…Œ์ด๋ธ” ,๊ณตํ†ตํ…Œ์ด๋ธ”๋ช… WHERE ...
SQL
๋ณต์‚ฌ

์˜ˆ์‹œ์ฝ”๋“œ

โ€ข
๋ถ€์„œ๋ณ„ ์‚ฌ์›์ˆ˜์™€ ์ตœ๊ณ  ๊ธ‰์—ฌ ์ง์› ์กฐํšŒ
โ€ข
์ƒ์‚ฌ-์‚ฌ์› ๊ด€๊ณ„ ์กฐํšŒ
โ€ข
์ž…์‚ฌ ๋‚ ์งœ๋ณ„ ์‚ฌ์› ์ˆ˜ ์กฐํšŒ

๋ถ€์„œ๋ณ„ ์‚ฌ์›์ˆ˜์™€ ์ตœ๊ณ  ๊ธ‰์—ฌ ์ง์› ์กฐํšŒ

-- ๋ถ€์„œ๋ณ„ ์‚ฌ์›์ˆ˜์™€ ์ตœ๊ณ  ๊ธ‰์—ฌ ์ง์› ์กฐํšŒ -- 1. ๋ถ€์„œ๋ณ„ ์‚ฌ์›์ˆ˜ SELECT de.dept_no, COUNT(*) FROM dept_emp de WHERE de.from_date <= CURRENT_DATE AND de.to_date >= CURRENT_DATE GROUP BY de.dept_no ; -- 2. ๋ถ€์„œ๋ณ„ ์ตœ๊ณ  ๊ธ‰์—ฌ SELECT de.dept_no, MAX(s.salary) AS '์ตœ๊ณ ๊ธ‰์—ฌ' FROM dept_emp de JOIN salaries S ON de.emp_no = s.emp_no WHERE de.from_date <= CURRENT_DATE AND de.to_date >= CURRENT_DATE GROUP BY de.dept_no ;
SQL
๋ณต์‚ฌ
-- 1,2 ๋ฅผ ์ž„์‹œํ…Œ์ด๋ธ”๋กœ ์กฐํšŒํ•˜์—ฌ, -- ๋ถ€์„œ๋ณ„๋กœ ์ตœ๊ณ ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์‚ฌ์›์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค. -- ์ด๋ฆ„, ์„ฑ, ๊ธ‰์—ฌ, ๋ถ€์„œ๋ช…, ์‚ฌ์›์ˆ˜ WITH dept_count AS ( SELECT de.dept_no, COUNT(*) emp_count FROM dept_emp de WHERE de.from_date <= CURRENT_DATE AND de.to_date >= CURRENT_DATE GROUP BY de.dept_no ), dept_salary AS ( SELECT de.dept_no, MAX(s.salary) max_salary FROM dept_emp de JOIN salaries S ON de.emp_no = s.emp_no WHERE de.from_date <= CURRENT_DATE AND de.to_date >= CURRENT_DATE GROUP BY de.dept_no ) SELECT e.emp_no, e.first_name, e.last_name, s.salary, d.dept_name, dc.emp_count FROM employees e JOIN salaries s ON e.emp_no = s.emp_no JOIN dept_emp de ON e.emp_no = de.emp_no JOIN departments d ON d.dept_no = de.dept_no JOIN dept_count dc ON d.dept_no = dc.dept_no JOIN dept_salary ds ON d.dept_no = ds.dept_no WHERE s.salary = ds.max_salary ;
SQL
๋ณต์‚ฌ

์ƒ์‚ฌ-์‚ฌ์› ๊ด€๊ณ„ ์กฐํšŒ

--1. ์ƒ์‚ฌ ์ •๋ณด ์กฐํšŒ SELECT * FROM employees e JOIN dept_manager dm ON e.emp_no = dm.emp_no ; -- 2. ๋ถ€ํ•˜ ์ •๋ณด ์กฐํšŒ SELECT * FROM employees e WHERE e.emp_no NOT IN (SELECT emp_no FROM dept_manager) ;
SQL
๋ณต์‚ฌ
WITH emp_mgr AS ( SELECT de.dept_no, e.emp_no, e.first_name, e.last_name, e.gender, m.emp_no mgr_emp_no, m.first_name mgr_first_name, m.last_name mgr_last_name, m.gender mgr_gender FROM dept_emp de JOIN employees e ON de.emp_no = e.emp_no JOIN dept_manager dm ON de.dept_no = dm.dept_no JOIN employees m ON dm.emp_no = m.emp_no WHERE de.from_date <= CURDATE() AND de.to_date >= CURDATE() AND dm.from_date <= CURDATE() AND dm.to_date >= CURDATE() ) SELECT * FROM emp_mgr ;
SQL
๋ณต์‚ฌ

์ž…์‚ฌ ๋‚ ์งœ๋ณ„ ์‚ฌ์› ์ˆ˜ ์กฐํšŒ

WITH hire_count AS ( SELECT hire_date, COUNT(*) AS emp_count FROM employees GROUP BY hire_date ) SELECT hire_date, emp_count FROM hire_count ORDER BY emp_count DESC;
SQL
๋ณต์‚ฌ