MySQL
1.join
=>2개 이상의 테이블을 이용해서 작업을 수행하고자 할 때 사용하는 기술
1)Join 의 종류
- Cross Join:두 테이블의 모든 조합
- Equi join:동일한 의미를 갖는 두 컬럼의 값이 같은 경우만 조합
- Non Equi join:동일한 의미를 갖는 2개의 컬럼값이 일치하는 경우가 아닌 형태의 조합
- Outer Join:한쪽에만 존재하는 데이터도 참여하는 조인 양쪽 모두에 존재하는 데이터만 조인에 참여하는 것을 Inner Join이라고 한다. Equi Join과 Inner Join이 같은 의미로 많이 사용됨
- Self Join:하나의 테이블을 가지고 Join
- Semi Join:Sub Query를 가지고 Join
2)Join 주의 사항
- 테이블에서 동일한 의미를 갖는 컬럼을 찾는다
- 컬럼 자료형이 일치해야한다
3)CROSS JOIN
- Cartesian Product라고 하는데 From절에 두 테이블 이름이 JOIN조건 없이 기재된 경우로 두 테이블의 모든 조합이 생성됨
- 컬럼의 개수는 두 테이블의 컬럼 개수 합이고 행의 개수는 두 테이블의 행 개수의 곱으로 만들어짐
- 특별한 경우가 아니면 수행하지 않는 것이 좋음 why? 너무 많은 데이터가 생성되서 메모리 부담이 크고 수행속도가 느림
4)EQUI JOIN
- 두 테이블에 동일한 의미를 갖는 컬럼이 존재 할 때 두 컬럼의 값이 일치하는 경우에만 조합해 달라고 요청. 일반적으로 FOREIGN KEY를 이용해서 많이 수행한다. 이 경우는 테이블 이름(from 절 뒤에 오는)의 순서가 중요.
- EMP 테이블과 DEPT테이블에는 DEPTON라는 공통 컬럼이있다. 동일한 의미를 갖는 컬럼이 존재하는 경우는 WHERE절에서 조건을 추가해 JOIN을 수행
- EMP테이블과 DEPT테이블을 조인해서 모든 컬럼을 조회
select
*
from emp,dept
where emp.deptno=dept.deptno;
- 컬럼 이름을 기재할 때는 테이블 이름을 같이 기재해야하 하는데 동일한 이름의 컬럼이 없을 떄는 테이블 이름을 생략해도된다. 동일한 이름의 컬럼이 다른 테이블에 존재할 떄는 이름이 모호하지 않도록 테이블 이름을 기재해야한다
5) NON EQUI JOIN
- 조인 조건을 작성할 때 = 이외의 연산자를 사용하는 것
- EMP 테이블에는 급여를 의미하는 SAL이라는 컬럼이 존재하고 SALGRADE 테이블은 등급을 의미하는 GRADE와 등급의 최저 급여를 의미하는 LOSAL 그리고 최대 급여를 의미하는 HISAL이 존재
- EMP 테이블에서 자신의 SAL을 가지고 SALGRADE의 GRADE를 조회하기
select
ENAME,SAL,GRADE
from
EMP e, SALGRADE s
where
sal between losal and hisal;
6) SELF JOIN
- 1개 테이블 JOIN
- 하나의 테이블에 동일한 의미를 갖는 컬럼이 2개 이상 존재하는 경우에 가능 EMP 테이블 경우는 EMPNO가 사원번호이고 MGR이 관리자 사원번호 SNS경우면 자신의 ID와 친구 ID를 갖는 친구 테이블을 만들 수 있음 이 경우도 SELF JOIN이 가능한 케이스
- EMP 테이블에서 사원 이름과 관리자 이름 조회
select
employee.ename as 사원이름, manager.ENAME as 관리자이름
from
emp employee,emp manager
where employee.mgr=manager .empno;
- EMP테이블에서 사원의 급여와 관리자의 급여를 조회
7)ANSI CROSS JOIN
- ANSI: 미국 표준 협회
8)ANSI INNER JOIN
- EQUI JOIN을 다른 방식으로 기재해서 수행
select
*
from
emp,dept
where emp.DEPTNO =dept.DEPTNO;
--결과같음--
select
*
from
emp inner join dept
on emp.DEPTNO = dept.DEPTNO ;
- 조인 조건에 사용되는 컬럼의 이름이 같은 경우는 on 절 대신 using(컬럼)을 기재하는 형태 가능함 이 경우는 조인에 사용된 칼럼이 한 번만 조회됨
select
*
from emp inner join dept
using(deptno);
728x90
'Database > MySQL' 카테고리의 다른 글
조인이란? 유니온과 조인의 차이점 (0) | 2022.11.12 |
---|---|
JOIN2 (0) | 2022.10.12 |
MySQL 기본 코드 복습 2 (0) | 2022.10.11 |
MySQL 기본 코드 복습 (0) | 2022.10.11 |
MariaDB 상태 확인 하는 법 *** \status (0) | 2022.09.22 |
댓글