- 세로로 묶는거 union
- 가로로 묶는거 join
- 아무행이나 붙이는 거 : cross join
- 테이블 수 -1 만큼의 조인 조건이 있어야함.
- 두 개 이상인 테이블 하나의 결과 집합으로 만들어 냄
- 직접적인 관계가 있는 경우에 많이 씀
nc join
표준화된 규격
- 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값으로 매칭시키겠다.
- emp : 기준테이블
- 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 |