코딩알파
DB/Mysql JOIN문 + 문제 본문
JOIN문은 데이터베이스 내의 여러 테이블에서 가져온 레코드를 조합하여 하나의 테이블로 표현.
JOIN은 SELECT문과 함께 사용합니다.
INNER JOIN
문법 1번
SELECT 컬럼 FROM 1번테이블 INNER JOIN 2번테이블 ON 조건 |
문법 2번
SELECT 컬럼 FROM 1번테이블 JOIN 2번테이블 ON 조건 |
예제는 EMP테이블의 DEPTNO 필드와 DEPT테이블의 DEPTNO 필드가 서로 일치하는 레코드만 INNER JOIN한 예제
SELECT * FROM EMP INNER JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO; |
SELECT * FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO; |
두 쿼리 모두 같은테이블이 나옵니다.

테이블의 이름이 길 경우 별칭을 사용하여 간략화해줍니다.
EMP E, DEPT D 로 별칭으로 바꿔줍니다.
SELECT * FROM EMP E JOIN DEPT D ON E.DEPTNO=D.DEPTNO; |
LEFT JOIN
1번 테이블을 기준으로, 2번 테이블을 조합하는 JOIN문입니다.
ON절을 만족하지 못하면 1번 테이블 값은 그대로 가져오지만 2번테이블의 필드 값은 모두 NULL표시됩니다.
문법
SELECT * FROM 1번테이블 LEFT JOIN 2번테이블 ON 조건 |
EMP테이블과 DEPT테이블 LEFT JOIN
SELECT * FROM EMP LEFT JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO; |

RIGHT JOIN
LEFT조인과는 반대로 2번테이블 기준으로 1번테이블을 조합하는 JOIN문
ON절을 만족하지 못하면 2번 테이블 값은 그대로 가져오지만 1번테이블의 필드 값은 모두 NULL표시됩니다.
문법
SELECT * FROM 1번테이블 RIGHT JOIN 2번테이블 ON 조건 |
EMP테이블과 DEPT테이블 RIGHT JOIN
SELECT * FROM EMP RIGHT JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO; |

JOIN문 문제------------------------------------------------------------------------
1. EMP와 DEPT TABLE을 JOIN하여 부서번호, 부서명, 이름, 급여를 출력하라.
select e.deptno, d.dname,e.ename,e.sal from emp e join dept d on e.deptno=d.deptno; |
2 .EMP Table에 있는 EMPNO와 MGR을 이용하여 서로의 관계를 다음과
같이 출력하라. ‘SMTH의 매니저는 FORD이다’
select e.ename ,m.ename from emp e join emp m on e.mgr=m.empno; |
3. ‘SMITH:의 직무와 같은 사람의 이름, 부서명, 급여, 직무를
출력하라.
select e.ename, d.dname,e.sal,e.job from emp e join dept d on e.deptno=d.deptno where job in(select job from emp where ename = 'smith'); |
4. ‘JONES’가 속해있는 부서의 모든 사람의 사원번호, 이름, 입사
일, 급여를 출력하라.
select empno,ename,hiredate,sal from emp where deptno in(select deptno from emp where ename ='jones'); |
5. 전체 사원의 평균 임금보다 많은 사원의 사원번호, 이름,
부서명, 입사일, 지역, 급여를 출력하라.
select e.empno,e.ename,d.dname,e.hiredate,d.loc,e.sal from emp e join dept d on e.deptno =d.deptno where sal > (select avg(sal) from emp); |
6. 10번 부서 사람들 중에서 20번 부서의 사원과 같은 업무를 하는
사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라.
select e.empno,e.ename,d.dname,e.hiredate,d.loc from emp e join dept d on e.deptno=d.deptno where job in(select job from emp where deptno =20 and e.deptno =10); |
7. 10번 부서 중에서 30번 부서에는 없는 업무를 하는 사원의
사원번호, 이름, 부서명, 입사일, 지역을 출력하라.
select e.empno, e.ename, d.dname, e.hiredate, d.loc from emp e join dept d on e.deptno=d.deptno where job not in (select job from emp where deptno=30) and e.deptno =10; |
8. 10번 부서와 같은 일을 하는 사원의 사원번호, 이름, 부서명,
지역, 급여를 급여가 많은 순으로 출력하라.
select e.empno, e.ename,d.dname,d.loc,e.sal from emp e join dept d on e.deptno=d.deptno where job in (select job from emp where deptno =10) order by sal desc; |
'Database' 카테고리의 다른 글
DB/Mysql 조건문 CASE 문 (0) | 2021.09.05 |
---|---|
DB/Mysql 서브쿼리(subquery) (0) | 2021.09.03 |
DB/Mysql SELECT WHERE절 (0) | 2021.08.31 |
DB/mysql 테이블 SELECT ,UPDATE,DELETE문 공부 (0) | 2021.08.29 |
DB/mysql SELECT 연습문제 연습하기 (0) | 2021.08.29 |