DB] JOIN

2022. 5. 6. 17:47Β·DataBase/MariaDB

 

JOIN μ΄λž€?

- λ‘˜ μ΄μƒμ˜ ν…Œμ΄λΈ”μ„ μ—°κ²°ν•˜μ—¬ κ²€μƒ‰ν•˜λŠ” 방법
- 두 ν…Œμ΄λΈ”μ„ 쑰인을 ν•˜λ €λ©΄ μ΅œμ†Œ ν•˜λ‚˜μ˜ κ³΅ν†΅λœ 컬럼이 μžˆμ–΄μ•Ό ν•œλ‹€.
- κ·Έλž˜μ„œ 일반적으둜 PK 와 FK λ₯Ό μ‚¬μš©ν•˜μ—¬ 쑰인에 ν™œμš© ν•œλ‹€.

 

JOIN μ˜ λ°©λ²•

1) cross join : 거의 μ•ˆμ“΄λ‹€.
2) equi join : 제일 많이 μ‚¬μš©
3) non-equi join : μ•ˆμ“΄λ‹€.
4) self join : 거의 μ•ˆμ“΄λ‹€.
5) outer join : 많이 μ‚¬μš© ν•œλ‹€.

 

1. CROSS JOIN

- μΉ΄λ‹€μ‹œμ•ˆ 곱을 μˆ˜ν–‰ν•œλ‹€.

- 두 개의 ν…Œμ΄λΈ”μ„ κ³±ν•œ 행을 μˆ˜ν–‰ν•œλ‹€.

FROM [table A] CROSS JOIN [table B];

emp ν…Œμ΄λΈ”μ˜ ename ν–‰(row)이 11개
dept ν…Œμ΄λΈ”μ˜ deptno ν–‰(row)이 5개
11 x 5 = 55개의 행이 λ‚˜μ˜¨λ‹€.

- cross join μ—μ„œλŠ” 두 ν…Œμ΄λΈ” μ—μ„œ μ˜λ―ΈμžˆλŠ” 데이터λ₯Ό 뽑아내기가 쉽지 μ•Šλ‹€.
μ€‘λ³΅λ˜μ–΄μ„œ μ „λΆ€λ‹€ λ‚˜μ˜€κΈ° λ•Œλ¬Έμ—
κ·Έλž˜μ„œ equi join 을 μˆ˜ν–‰ν•œλ‹€.

 

 

2. Equi join

- κ°€μž₯ 일반적으둜 μ‚¬μš©ν•œλ‹€.

- 쑰건이 μ—†μœΌλ©΄ κΈ°λ³Έ cross join을 μˆ˜ν–‰ν•œλ‹€.

 

1) λ“±κ°€ 쑰인 (Equi join)

- λ“±κ°€ 쑰인은 μ–‘μͺ½ ν…Œμ΄λΈ” λͺ¨λ‘μ— 값이 μ‘΄μž¬ν•΄μ•Ό 보여쀀닀.

select e.ename, d.deptno from emp e, dept d where d.deptno = e.deptno;

where μ ˆμ— μ–΄λ–€ μ»¬λŸΌμ„ κΈ°μ€€μœΌλ‘œ ν•  것인지 쑰건을 써주어야 ν•œλ‹€.

 

deptno 3 κ³Ό 5λŠ” emp 에 μ—†λŠ” 번호기 λ•Œλ¬Έμ— 보여주지 μ•ŠλŠ”λ‹€.
deptno κ°€ 1,2,4 인 κ°’λ§Œ κ°€μ Έμ˜¨λ‹€.

 

 

2) λ‚΄λΆ€ 쑰인 (Inner join)

- λ“±κ°€ 쑰인과 같은데 μ‚¬μš©λ²•μ΄ λ‹€λ₯΄λ‹€.

- ν…Œμ΄λΈ”κ³Ό ν…Œμ΄λΈ” 사이에 inner join을 λ„£κ³  where λŒ€μ‹  on을 μ‚¬μš©ν•œλ‹€.

[ inner join - on ]
select
e.ename, d.deptno from emp e inner join dept d on d.deptno = e.deptno;

 

- on λŒ€μ‹  USING 으둜 쑰건을 쀄 μˆ˜λ„ μžˆλ‹€.

- USING μ•ˆμ—λŠ” 쑰인에 μ‚¬μš©ν•  μ»¬λŸΌμ΄λ‚˜ μ„œλΈŒμΏΌλ¦¬ 등을 μ‚¬μš©ν•  수 μžˆλ‹€.

[ inner join - using ]
select e.ename, d.deptno from emp e join dept d using (deptno);

inner join μ—μ„œ innerλŠ” μƒλž΅ κ°€λŠ₯ν•˜λ‹€.

 

결과값은 μœ„μ— 등가쑰인 κ²°κ³Όκ°’κ³Ό κ°™λ‹€.

 

 

3) λ‚΄μΈ„λŸ΄ 쑰인 (Natural join)

- μžμ—°μŠ€λŸ½κ²Œ 쑰건없이 두 ν…Œμ΄λΈ”μ— 같은 컬럼의 값이 있으면 μ‘°μΈν•œλ‹€.

- 두 ν…Œμ΄λΈ” 간에 λ™μΌν•œ 이름을 κ°–λŠ” λͺ¨λ“  μ»¬λŸΌμ— λŒ€ν•΄ 등가쑰인을 ν•œλ‹€.

- using / where / on μ ˆμ—μ„œμ˜ join μ‘°κ±΄μ ˆμ„ μ •μ˜ν•  수 μ—†λ‹€.

select e.ename, d.deptno from emp e natural join dept d;

 

 

SELF JOIN

자기쑰인

- 자기 슀슀둜 μ‘°μΈν•œλ‹€.

- 자기 쑰인을 ν•˜λ©΄ ν…Œμ΄λΈ” μ•ˆμ—μ„œ μΉ΄λ‹€μ‹œμ•ˆ 곱을 μˆ˜ν–‰ν•œλ‹€.

 

emp ν…Œμ΄λΈ”μ„ self join ν•˜λ©΄ emp x emp

emp ν…Œμ΄λΈ”μ˜ ename
emp X emp ..

 

 

OUTER JOIN

μ™ΈλΆ€ 쑰인

- λ“±κ°€ 쑰인은 두 ν…Œμ΄λΈ” λͺ¨λ‘μ— 값이 μžˆμ–΄μ•Ό λ³΄μ—¬μ£ΌλŠ” 반면

- μ™ΈλΆ€ 쑰인은 μ–΄λŠ ν•œ μͺ½μ—λ§Œ 데이터가 μžˆμ–΄λ„ 보여쀀닀.

 

SELECT * FROM [table A] [LEFT|RIGHT] OUTER JOIN [table B] ON 쑰건절;

 

λ“±κ°€ 쑰인 쿼리문
등가쑰인 κ²°κ³Όκ°’

 

1) LEFT OUTER JOIN

- μ™Όμͺ½ ν…Œμ΄λΈ”(dept)을 κΈ°μ€€μœΌλ‘œ 더 μžˆλŠ” 값을 보여쀀닀.

- μ—†λŠ” 값은 null μ²˜λ¦¬ν•œλ‹€.

dept ν…Œμ΄λΈ”μ˜ deptno λŠ” 1,2,3,4,5
emp ν…Œμ΄λΈ”μ˜ deptno λŠ” 1,2,4
λ”°λΌμ„œ emp에 3,5 κ°€ 없어도 null κ°’μœΌλ‘œ μ²˜λ¦¬ν•˜μ—¬ 보여쀀닀.

 

2) RIGHT OUTER JOIN

- 였λ₯Έμͺ½ ν…Œμ΄λΈ” (emp)을 κΈ°μ€€μœΌλ‘œ 값이 있으면 보여쀀닀.

- λ§ˆμ°¬κ°€μ§€λ‘œ μ—†λŠ” 건 null

결과값이 등가쑰인 결과와 κ°™λ‹€.
emp μ— μžˆλŠ” deptnoλŠ” dept μ— μžˆλŠ” deptno λ³΄λ‹€ μ’…λ₯˜κ°€ λ§Žμ§€ μ•Šμ•„μ„œ λ“±κ°€μ‘°μΈ μ΄μƒμœΌλ‘œ λ” λ³΄μ—¬μ€„κ²Œ μ—†λ‹€.
κ·Έλž˜μ„œ right outer join을 해도 데이터가 차이가 λ‚˜μ§€ μ•ŠλŠ”λ‹€.

emp ν…Œμ΄λΈ”μ— deptno = 6 인 데이터λ₯Ό λ„£κ³  λ‹€μ‹œ μ‹€ν–‰ν•œ κ²½μš°λŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

 

3) FULL OUTER JOIN

- μ–‘μͺ½μ— μžˆλŠ” 값듀을 λͺ¨λ‘ 보여쀀닀.

- maria db μ—μ„œλŠ” μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— UNION을 ν™œμš© ν•΄μ•Ό ν•œλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
λ°˜μ‘ν˜•
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)

'DataBase > MariaDB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

DB] IN / EXSITS / ANY / ALL / limit  (0) 2022.05.06
DB] μ„œλΈŒμΏΌλ¦¬ , μƒν•˜κ΄€κ³„μΏΌλ¦¬  (0) 2022.05.06
DB] μ œμ•½ 쑰건(constraint) 2 - μ°Έμ‘° μ œμ•½ 쑰건 / 연계 μ°Έμ‘° 무결성 μ œμ•½ 쑰건 / μœ λ‹ˆν¬ μ œμ•½ 쑰건 / 체크 μ œμ•½ 쑰건  (0) 2022.05.06
DB] νŠΈλžœμ μ…˜(TRANSACTION)  (0) 2022.05.02
DB] μ œμ•½ 쑰건(constraint) 1 - κΈ°λ³Έ ν‚€ μ œμ•½ 쑰건 / NOT NULL  (0) 2022.04.28
'DataBase/MariaDB' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • DB] IN / EXSITS / ANY / ALL / limit
  • DB] μ„œλΈŒμΏΌλ¦¬ , μƒν•˜κ΄€κ³„μΏΌλ¦¬
  • DB] μ œμ•½ 쑰건(constraint) 2 - μ°Έμ‘° μ œμ•½ 쑰건 / 연계 μ°Έμ‘° 무결성 μ œμ•½ 쑰건 / μœ λ‹ˆν¬ μ œμ•½ 쑰건 / 체크 μ œμ•½ 쑰건
  • DB] νŠΈλžœμ μ…˜(TRANSACTION)
bamDal
bamDal
κ΄€μ‹¬μžˆλŠ” λΆ„μ•Ό κ³΅λΆ€ν•˜λŠ” λΈ”λ‘œκ·Έ
  • bamDal
    πŸŒ™πŸŒ°λ‹¬λ°€μ— μ½”λ”©β˜€οΈ
    bamDal
  • 전체
    였늘
    μ–΄μ œ
    • λΆ„λ₯˜ 전체보기
      • TIL
      • Back-End
        • JAVA
        • SPRING
        • 파이썬
        • Linux
      • DataBase
        • MariaDB
      • CS
        • 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜
      • Infra
      • Tool
        • Git
        • IntelliJ
      • Etc
      • μ•Œκ³ λ¦¬μ¦˜ ν•™μŠ΅
      • Front-End
        • jQuery
        • AJAX
  • λΈ”λ‘œκ·Έ 메뉴

    • ν™ˆ
    • μΉ΄ν…Œκ³ λ¦¬
    • νƒœκ·Έ
  • 링크

    • Github
  • 곡지사항

  • 인기 κΈ€

  • 졜근 κΈ€

  • λ°˜μ‘ν˜•
    250x250
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
bamDal
DB] JOIN
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”