SUB QUERY
WHERE 절에 사용하는 서브쿼리
doo1부서장의 사원 정보 출력
SELECT *
FROM employees
WHERE
emp_no = (
SELECT emp_no
FROM dept_manager
WHERE
dept_no = 'd001'
AND to_date >= NOW()
);
SELECT
emp_no
FROM dept_manager
WHERE
dept_no = 'd001'
AND to_date >= NOW();
SELECT *
FROM employees
WHERE
emp_no IN (
SELECT emp_no
FROM dept_manager
WHERE to_date >= NOW()
);
SELECT
emp_no
,CONCAT_WS('',last_name,first_name) full_name
FROM employees
WHERE
emp_no IN (
SELECT emp_no
FROM dept_emp
WHERE dept_no = 'd001'
);
SELECT
emp_no
,birth_date
FROM employees
WHERE
emp_no IN (
SELECT emp_no
FROM titles
WHERE title = 'Senior Engineer'
AND to_date >= NOW()
);
다중열 서브쿼리
SELECT
dpe.*
FROM dept_emp dpe
WHERE (dpe.dept_no, dpe.emp_no) IN (
SELECT
dpm.dept_no
,dpm.emp_no
FROM dept_manager dpm
WHERE dpe.emp_no = dpm.emp_no
);
SELECT절에서 사용하는 서브쿼리
사원의 사원번호, 평균급여, 사원명
SELECT
employees.emp_no
,(
SELECT AVG(salaries.salary)
FROM salaries
where salaries.emp_no = employees.emp_no
) avg_sal
, employees.first_name
FROM employees;
FROM절에서 사용하는 서브쿼리
SELECT tmp.*
FROM (
SELECT emp_no, birth_date
FROM employees
) tmp
;
INSERT문에서 서브쿼리 사용
INSERT INTO employees (
emp_no
, birth_date
, first_name
, last_name
, gender
, hire_date
)
VALUES (
(SELECT MAX(emp.emp_no) + 1 FROM employees emp)
,20000131
,'seolin'
,'lee'
,'F'
,20240306
);
UPDATE문에서 서브쿼리 사용
UPDATE employees
SET
first_name = (
SELECT LEFT(title,10)
FROM titles
WHERE emp_no = 10001
AND to_date >= NOW()
)
WHERE emp_no = 500000;