250x250
Recent Posts
Notice
Today
Total
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
관리 메뉴

코딩알파

DB/Mysql JOIN문 + 문제 본문

Database

DB/Mysql JOIN문 + 문제

코딩알파 2021. 9. 2. 10:00
728x90

테이블.txt
0.00MB

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;

 

728x90

'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
Comments