Today I Learned
조인(Join) 본문
조인이란?
- 둘 이상의 테이블을 연결하여 검색하는 방법. a 와 b의 내용을 합쳐서 보여준다.
- 두 테이블을 조인을 하려면 최소 하나의 공통된 컬럼이 있어야 한다.
- 그래서 일반적으로 pk와 fk를 사용하여 조인에 활용한다.
- pk fk아닌 공통된 컬럼을 사용할 수도 있다 = 부모자식관계가 아니더라도 조인할 수 있음
- JOIN을 활용하는 이유 -
서브 쿼리문만 사용한다면 괄호가 엄청 많아지고 쿼리가 굉장히 복잡해진다.
- JOIN의 방법 -
- cross join : 거의 안쓴다.
- *equi join : 제일 많이 사용
- non-equi join : 안쓴다
- self join : 거의 안쓴다.
- *outer join : 많이 사용 한다.
1. cross join
- 두개의 테이블 컬럼의 행과 행을 곱함 / 카다시안 곱을 수행 (ex) 경우의 수)
- FROM [table A] CROSS JOIN [table B]
- cross join에서는 두 테이블에서 의미있는 데이터를 뽑아내기가 쉽지 않다.
2. equi join
- 그래서 많이 쓰는게 equi join
- 가장 일반적으로 사용한다
- 조건이 붙는다 (조건이 없으면 그냥 cross join / 데이터가 많을 때 cross join을 하면 큰일나)
- 1. 등가 조인 2. 내부조인 3. 네츄럴 조인
(1) 등가조인
- 양쪽의 값이 모두 똑같은 값이 있어야 보여준다 어느 한쪽에 없으면 보여주지 않는다.
(2)내부조인
- FROM [table A] (INNER) JOIN [table B] where/on/using 조건
- where 대신 on 가능/ on이나 using 사용하면 equi join의 내부조인이구나 알수있음
- on대신 using 도 가능/ using 옆엔 사용할 컬럼이나 서브쿼리가 들어갈 수 있다.
(3)네츄럴 조인
- FROM [table A] natural join [table B]
- 자연스럽게/ 조건 없이 두 테이블에 같은 컬럼의 값이 있으면 조인한다.
- 단점 : 같은 컬럼이 여러개면 다 조인시켜버림 / 어떤 특정한 컬럼을 지정할수 없다는 단점이 있음
- 같은 걸 구하는데 왜 사용법이 다양해? -
디비마다 쿼리문이 다달랐는데 안씨? 하나로 통일하게 되면서 각각의 특징을 살림 그래서 조인이 여러개
3. non-equi join
너무 안써서 안배움
4. self join
자기자신과 스스로 조인한다.
자기자신을 조인하면 테이블안에서 카다시안곱을 수행한다.
5. outer join (외부조인)
- equi join은 두 테이블에 값이 모두 있어야 보여준다. / 모두 있는걸 보여준다
- outer join은 어느 한쪽에만 데이터가 있어도 보여준다. / 표시 안되는건 (없는건) null처리
- FROM [table A] [LEFT|RIGHT] OUTER JOIN [table b] on 조건절
- LEFT OUTER JOIN : 왼쪽을 기준으로 더 있는 값을 보여준다.
- RIGHT OUTER JOIN : 오른쪽을 기준으로 더 있는 값을 보여준다.
- FULL OUTER JOIN : 양쪽에 있는 값들을 모두 보여준다. (maria db에는 없다.)
+ 부모- 자식관계 +
- 부모 자식관계가 있는 테이블 중 자식테이블에 데이터를 insert하면 에러 발생( a foreign key constraint fails )
- : 부모한테 없는 값이 자식한테 있을 수 없다.
- 꼭 자식테이블에 데이터를 넣어야한다면 부모 - 자식 관계를 끊어야 한다.
- 부모 자식관계를 끊는 방법 : 외래키를 없앤다
- 부모테이블에 데이터를 넣을땐 에러 안남!
+ FULL OUTER JOIN : left outer조인과 right outer조인을 합쳐서 중복빼고 보여줘
-- maria db에서는 지원하지않는다
-- 그래서 union을 활용해야 한다. 합집합 intersect 교집합 minus 차집합
- 등가조인과 inner join의 차이점 -
내부조인은 (inner) join이 쓰이고 조건절에 where 대신 on을 쓸수있다.
using 도 사용할 수 있는데 그뒤엔 사용할 컬럼이나 서브쿼리가 들어갈 수 있다.
그냥 where을 쓰는 등가조인은 조인을 위한 절인지 한번에 확인하기 어려울수있음. inner join은 딱 보면 알 수 있음
09_JOIN
'DB' 카테고리의 다른 글
뷰(View) (0) | 2022.05.06 |
---|---|
인덱스 (0) | 2022.05.06 |
in & exists 그리고 any & all (0) | 2022.05.02 |
집합 (0) | 2022.05.01 |
서브쿼리, count함수, 상하관계쿼리 (0) | 2022.05.01 |