• 세로로 묶는거 union
  • 가로로 묶는거 join
    • 아무행이나 붙이는 거 : cross join
  • 테이블 수 -1 만큼의 조인 조건이 있어야함.
  • 두 개 이상인 테이블 하나의 결과 집합으로 만들어 냄
  • 직접적인 관계가 있는 경우에 많이 씀
nc join
표준화된 규격
  1. from table1 join table2 -> 표준화된 규격

 

on 

  • 조인 조건 자유롭게 줄 수 있다.
  • 동일한 얘들끼리 : 등가조인

using

  • 등가조인을 할 경우, 그 때 사용하는 테이블이 똑같을 때
  • 조인 조건하는 컬럼명이 똑같을 때

inner join

  • 일치하는 것 만 
  • 일치하는게 없으면 빼는 것
  • 기본이라서 생략 많이 함

outer join

  • 일치하지 않아도 포함하고 싶을 때, 
  • left, right, full
    • left [outer] join
    • mysql -> full outer join 지원 X
      • left outer join, right outer join union해야함
      • left, rigth적으면 자동으로 outer 조인이라고 생각함
    • 왼쪽 테이블 기준 - left join
    • 오른쪽 테이블 기준 - rigth join
select ename, emp.deptno, dname
from emp
left join dept
on emp.DEPTNO = dept.DEPTNO;
select ename, emp.deptno, dname
from emp
right join dept
on emp.DEPTNO = dept.DEPTNO;

 

full outer join 지원 안 되니깐.

select ename, emp.deptno, dname
from emp
left join dept
on emp.DEPTNO = dept.DEPTNO
UNION
select ename, emp.deptno, dname
from emp
right join dept
on emp.DEPTNO = dept.DEPTNO;

union사용하면 된다. 

 


cross join 

다 만나는 것


select * from emp join dept on emp.deptno = dept.deptno;

emp 테이블 14명이 deptno의 값을 dept값으로 매칭시키겠다. 

  1. emp : 기준테이블
  2. dept : 조인 테이블

  • dept 테이블 친구들이 emp에 붙는다
  • dept 열이 null인 친구 제외 - inner join
  • 사용할 때, 어느 테이블에 있는 DEPTNO인지 명시해줘야한다. (DEPTNO가 두 개
    • 테이블 별로 각자 들어가는 것

 

SELECT * FROM emp JOIN dept USING (deptno);

DEPNO 열이 하나만 나온다. 

 


on

SELECT ename, emp.deptno, dname
FROM emp
JOIN dept
ON emp.deptno = dept.deptno;

어느것에 있는 deptno인지 명시해줘야한다. 

SELECT ename, deptno, dname	--에러난다.
FROM emp
JOIN dept
ON emp.deptno = dept.deptno;

 

using

SELECT ename, deptno, dname
FROM emp
JOIN dept
USING (deptno);

 


직원들이 근무하는 부서명과 지역(도시) 정보 출력

using

select ename, dname, city
from emp
join dept
using (deptno)
join locations
using (loc_code);

on

SELECT ename, dname, city
FROM emp e
JOIN dept d
ON e.deptno = d.deptno
JOIN locations l
ON d.loc_code = l.loc_code;

테이블 별칭써도 됨. 

 


직원들이 근무하는 지역(도시) 정보 출력

SELECT ename, city
FROM emp e
JOIN dept
USING (deptno)
JOIN locations
using(loc_code);
SELECT ename, city
FROM emp e
JOIN dept d
ON e.DEPTNO = d.DEPTNO
JOIN locations l
ON d.LOC_CODE = l.LOC_CODE;

 


on절만 사용 가능 -> between 사용 (and)

SELECT ename, sal, grade 
FROM emp e
JOIN salgrade s
ON e.sal BETWEEN s.losal and s.hisal;

어떤 범위에 속하는가

SELECT ename, sal, concat(grade,"등급") 등급 
FROM emp e
JOIN salgrade s
ON e.sal >= s.losal AND e.sal <= s.hisal;

 


 

'study > JAVA 전문가' 카테고리의 다른 글

mysql 4 - 연습문제  (0) 2021.12.20
Mysql 1 - 연습문제  (0) 2021.12.18
mysql 3 - 연습문제  (0) 2021.12.17
mysql 3  (0) 2021.12.17
DBMS  (0) 2021.12.15

+ Recent posts