티스토리 뷰
서브쿼리
- 쿼리문 내에 쿼리문이 있는 것을 서브 쿼리라고 한다.
- 조건문 등을 만들 때 값을 직접 지정하지 못하고 쿼리문을 통해 구해 와야할 경우 서브쿼리를 통해 값을 구해서
조건문을 완성할 수 있다. - EX. 급여액의 평균이상의 사원을 가져온다고 하면 평균을 구해야 쿼리문을 짤수가 있다.
서버쿼리를 짤때 당황하지말고 일단 서브쿼리로 만들어야 할 부분, 즉 알 수 없는 조건값을 배제하고 먼저 일반 쿼리문을 짠다.
이 후 해당 조건값에 대한 부분을 가져오기 위한 쿼리문을 짜고 두 쿼리문을 합쳐서 하나로 만든다.
현재받는 급여의 평균보다 많이 받는 사원들의 사원번호, 급여액을 가져온다.
-- 현재받는 급여의 평균보다 많이 받는 사원들의 사원번호, 급여액을 가져온다.
select emp_no, salary
from salaries
where salary > (select avg(salary) from salaries where to_date = '9999-01-01')
and to_date = '9999-01-01';
d001부서에 근무하고 있는 사원들의 사원번호와 first_name을 가져온다.
-- d001부서에 근무하고 있는 사원들의 사원번호와 first_name을 가져온다.
select * from dept_emp;
select emp_no, first_name
from employees
where emp_no in (
select emp_no
from dept_emp
where dept_emp.dept_no = 'd001'
);
-- 동등 join으로 가져오기
select e.emp_no, e.first_name
from employees e, dept_emp d
where e.emp_no = d.emp_no and d.dept_no = 'd001';
-- inner join으로 가져오기
select e.emp_no, e.first_name
from employees e
inner join dept_emp d
on e.emp_no = d.emp_no
where d.dept_no = 'd001';
1960년 이후에 태어난 사원들이 현재 근무하는 사원들의 사원번호, 근무 부서 번호를 가져온다.
-- 1960년 이후에 태어난 사원들이 현재 근무하는 사원들의 사원번호, 근무 부서 번호를 가져온다.
select emp_no, dept_no
from dept_emp
where emp_no in (
select emp_no
from employees
where birth_date >= '1960-01-01');
반응형
'CS > MySql 정리' 카테고리의 다른 글
mysql 학습정리 : CREATE문을 이용하여 DB, TABLE 생성 (0) | 2021.10.12 |
---|---|
mysql 학습정리 : set _ 집합연산 (0) | 2021.10.11 |
mysql 학습정리 : Join (카티전 프로덕트, 동등조인) (0) | 2021.10.07 |
mysql 학습정리 : select + Group by, having (0) | 2021.10.04 |
mysql 학습정리 : select + 그룹함수 (0) | 2021.10.01 |
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday