[DB] MySQL - 서브쿼리, union, 뷰

양희연·2020년 9월 5일
0

database

목록 보기
6/8
post-thumbnail

MySQL 공식 문서에 있는 employees.sql DB를 이용하여 연습




📎 서브쿼리

쿼리문 안에 포함되어 있는 또 하나의 쿼리문을 말한다.

--현재 받는 급여의 평균보다 많이 받는 사원들의 사원번호와 급여액을 조회
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' 부서에 근무하고 있는 사원의 사원번호와 이름을 조회
select emp_no, first_name
from employees
where emp_no in (select emp_no from dept_emp where dept_no = 'd001');

--위 예시는 join으로도 조회 가능
select e.emp_no, e.first_name
from employees as e, dept_emp as d
where e.emp_no = d.emp_no and d.dept_no = 'd001';



🗞 union

두 select문의 결과를 모두 포함하는 최종 결과를 반환한다.
이때 선택된 필드의 개수와 타입은 같아야 하며, 필드의 순서 또한 같아야 한다.
중복되는 데이터는 하나만 가져온다.

--문법
select *
from A_Table
union
select *
from B_Table

select name from customer
union
select name from reservation;
+--------+
| name   |
+--------+
| Ruby   |
| Dawn   |
| Ryan   |
| Eden   |
| Corey  |
| Sam    |
| Aurora |
| boss   |
+--------+

+ union all

중복되는 데이터 모두를 가져온다.

--문법
select *
from A_Table
union all
select *
from B_Table
select name from customer
union all
select name from reservation;
+--------+
| name   |
+--------+
| Ruby   |
| Dawn   |
| Ryan   |
| Eden   |
| Corey  |
| Sam    |
| Aurora |
| Ruby   |
| Dawn   |
| Ryan   |
| Eden   |
| Corey  |
| Ruby   |
| Ryan   |
| boss   |
+--------+



두 개 이상의 테이블을 join하거나 서브쿼리를 사용하는 select 문을 매번 사용하게 되면 불편함이 따른다.
이 때 뷰를 사용하게 되면 그 쿼리문을 저장해 필요할 때마다 쉽게 조회 할 수 있다.
뷰는 select 문을 통해 얻어진 결과를 가지고 있는게 아니라 select 문 자체를 가지고 있어 뷰를 조회하면 해당 쿼리문이 실행되어 결과를 가져오게 된다.

👀 뷰

뷰는 가상의 테이블을 의미한다.

--생성
CREATE VIEW 뷰이름 AS
SELECT 쿼리문;

--조회
SELECT * FROM 뷰이름;

--삭제
DROP VIEW 뷰이름;


참고자료: 소프트캠퍼스

profile
꾸준히 나아가자!

0개의 댓글