티스토리 뷰

CS/MySql 정리

mysql 학습정리 : 서브 쿼리

구름뭉치 2021. 10. 9. 14:38

서브쿼리

  • 쿼리문 내에 쿼리문이 있는 것을 서브 쿼리라고 한다.
  • 조건문 등을 만들 때 값을 직접 지정하지 못하고 쿼리문을 통해 구해 와야할 경우 서브쿼리를 통해 값을 구해서
    조건문을 완성할 수 있다.
  • 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');
반응형
Comments
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday