MySQL Join , 서브쿼리란?
MySQL Join에 대해서
1. 내부조인 ( inner join )
1. 두개 이상의 테이블을 하나의 테이블처럼 조회
2. 조건 : 두 테이블이 같은 컬럼 정보를 가지고 있어야 함
3. 보통 참조 관계에 있는 테이블 간에 join을 주로 한다.
4. 예시로는 게시글과 댓글의 관계를 들 수 있다.
게시글 테이블 : 제목 , 내용 , 작성자 , 글번호
댓글 테이블 : 댓글번호 , 내용 , 작성자 , 글번호
2. 외부조인 ( join )
외부조인은 두 테이블에 각각 결합이 되는 컬럼을 지정하고 각각의 컬럼에 같은 값이 저장되어 있는 데이터를 결합하여 받아온다.
내부 조인의 경우는 일치하지 않는 데이터를 검색하지 않았지만 외부 조인의 경우 일치하지 않는 경우도 데이터로 받아온다.
emp의 deptno 칼럼과 dept의 deptno 칼럼이 같은 것을 합쳐서 조회한 것이다.
3. 조인( join )의 예제
select * from emp e , dept d where e.deptno = d.deptno;
약어로도 사용 할 수 있다.
select empno , ename , deptno , dname from emp e , dept d where e.deptno = d.deptno;
select e.empno , e.ename , e.deptno , d.dname , d.loc from emp e , dept d where e.deptno = d.deptno;
emp의 칼럼 empno , ename , deptno dept의 칼럼 dname , loc을 조회했다.
-- emp , dept를 조인하여 empno , ename , deptno , dname , loc 조회
-- 단 , 급여가 2500 이상인 사람만 조회하고 , 조회 결과는 사원이름 기준으로 오름차순 정렬
select e.empno , e.ename , e.deptno , d.dname , d.loc
from emp e , dept d
where e.deptno = d.deptno and e.sal >= 2500
order by e.ename asc;
2. 서브쿼리( Subquery )
1. 서브쿼리란?
1. 보조 쿼리문
2. 하나의 메인 쿼리문 안에 ()를 이용하여 쿼리문을 작성하는 형태다.
3. 먼저 수행되어야 하는 쿼리문이 있는경우 서브쿼리를 사용한다.
4. 서브쿼리는 단일 행또는 복수 행 비교 연산자와 함께 사용가능하다.
5. 서브쿼리에서는 order by를 사용하지 못한다.
2. 서브쿼리가 사용가능한곳
1. select 절
2. from 절
3. where 절
4. having 절
5. order by 절
6. insert 문의 values 절
7. update 문의 set 절
3. 서브쿼리 사용 예제
-- 최저급여를 받는 사람이 누구인지?
select * from emp order by sal asc;
-- 1. 최저급여값이 얼마인지?
select min(sal) from emp;
-- 2. 최저급여 값을 받는 사람이(최저급여 값과 sal 값이 일치하는) 누구인지 조회
select * from emp where sal=800;
-- 서브쿼리 적용
select * from emp where sal=(select min(sal) from emp);
-- 최고급여를 받는 사원 정보 조회
select * from emp where sal=(select max(sal) from emp);
-- allen보다 높은 급여를 받는 사원 조회
select * from emp where sal>(select sal from emp where ename = 'allen')
order by sal asc;