7.MySql(scott)-기본문법 - Join(inner,outer)

JungSik Heo·2024년 12월 15일
1

MySQL

목록 보기
18/33

Cartesian Productd(카티시안 곱)의 이해

  • 카티션 곱(cartesian product)은 엄밀히 말하면 조인이라고 할 수 없는 조인으로, 
    WHERE 절에 조인 조건을 주지 않는 것을 말합니다.

  • 두 테이블을 기준으로 FROM 절에는 두 개의 테이블을 명시하지만 WHERE 절에서 조인 조건을 주지 않습니다.
    (WHERE 절을 추가하지 않거나 WHERE 절을 추가해도 조인 조건을 주지 않는 경우).

  • 그 결과 두 테이블의 데이터를 기준으로 가능한 모든 조합의 데이터가 조회됩니다.

조인의 종류

join 이란?

  • 하나의 테이블로 원하는 칼럼정보를 참조 할 수 없는 경우, 관련된 테이블을 논리적으로 결합하여 원하는 칼럼정보를 참조하는 방법을 JOIN 이라고 한다.

emp 테이블의 사원이름, 부서번호, 부서명을 출력해보세요

SQL> select ename,emp.deptno,dname
from emp
join dept
on emp.deptno = dept.deptno;

급여가 3000에서 5000 사이의 사원이름과 부서명을 출력해보세요

SQL> select ename,dname
from emp
join dept
on emp.deptno = dept.deptno
and sal between 3000 and 5000;

부서명이 ACCOUNTING인 사원의 이름,입사일,부서번호,부서명을 출력해보세요

SQL>select ename,hiredate,emp.deptno,dname
from emp
join dept
on emp.deptno = dept.deptno
and dname = 'ACCOUNTING';
<br>
SQL> select ename,hiredate,emp.deptno,dname
from emp,dept
where emp.deptno = dept.deptno
and dname = 'ACCOUNTING'
<br>
SQL> select e.ename,e.hiredate,e.deptno,d.dname
from emp e,dept d
where e.deptno = d.deptno
and dname = 'ACCOUNTING';

커미션이 null이 아닌 사원의 이름, 입사일, 부서명을 출력해보세요

SQL> select e.ename,e.hiredate,d.dname
from emp e
join dept d
on e.deptno = d.deptno 
and e.comm is not null;

각 사원의 이름과 매니저 이름을 출력하세요

SQL> select e1.ename,e2.ename
from emp e1
join emp e2
on e1.mgr = e2.empno;

OUTER JOIN 조인

  • 한 쪽 테이블에는 해당하는 데이터가 존재하는데 다른 테이들에는 데이터가 존재하지 않을 때에도 모든 데이터를 추출하도록 하는 JOIN 방법

  • 사원번호, 부서번호, 부서명을 출력해보세요
    단, 사원이 근무하지 않는 부서 정보도 같이 출력해보세요

SQL> select e.empno,d.deptno,d.dname
from dept d
left outer join emp e
on e.deptno = d.deptno;

[ QUIZ ]

1. emp 테이블과 dept 테이블을 조인하여 부서번호,부서명,이름,급여를 출력해보세요

SQL> select d.deptno,d.dname,e.ename,e.sal
from emp e,dept d;

2. 사원의 이름이 'ALLEN'인 사원의 부서명을 출력해보세요

SQL> select e.ename,d.dname
from emp e
join dept d
on e.deptno = d.deptno
and e.ename='ALLEN';

3. 모든 사원의 이름, 부서번호, 부서명, 급여를 출력해보세요

단,emp테이블에 없는 부서도 출력해보세요

SQL> select e.ename,d.deptno,d.dname,e.sal
from dept d
left outer join emp e
on e.deptno = d.deptno;


SQL> select e.ename,d.deptno,d.dname,e.sal
from emp e
right outer join dept d
on e.deptno = d.deptno;

4. 다음과 같이 모든 사원의 매니저를 출력해보세요

SMITH 의 매니저는 FORD 입니다
??? 의 매니저는 ??? 입니다
.
.
.
.

SQL> select e1.emp||'의 매니저는 '||e2.emp||'입니다'
from emp e1
join emp e2
on e1.mgr = e2.empno;

https://www.java4coding.com/contents/mysql/mysql-equi-join

profile
쿵스보이(얼짱뮤지션)

0개의 댓글