Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

Today I Learned

조인(Join) 본문

DB

조인(Join)

꾸주니12 2022. 5. 1. 19:55

조인이란?

  • 둘 이상의 테이블을 연결하여 검색하는 방법. a 와 b의 내용을 합쳐서 보여준다. 
  • 두 테이블을 조인을 하려면 최소 하나의 공통된 컬럼이 있어야 한다.
  • 그래서 일반적으로 pk와 fk를 사용하여 조인에 활용한다.
  • pk fk아닌 공통된 컬럼을 사용할 수도 있다 = 부모자식관계가 아니더라도 조인할 수 있음 

 

- JOIN을 활용하는 이유 - 

서브 쿼리문만 사용한다면 괄호가 엄청 많아지고 쿼리가 굉장히 복잡해진다. 

 

 

- JOIN의 방법 -

  1. cross join : 거의 안쓴다.
  2. *equi join : 제일 많이 사용
  3. non-equi join : 안쓴다
  4. self join : 거의 안쓴다.
  5. *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에는 없다.)

12345 가 나오고 emp테이블에 3,5, 부분은 null처리

+ 부모- 자식관계 + 

  • 부모 자식관계가 있는 테이블 중 자식테이블에 데이터를 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