πλ€λ‘κ°κΈ°
- λ΄λΆ μ‘°μΈ(INNER JOIN):
- κ°μ₯ μΌλ°μ μΈ μ‘°μΈ λ°©μ
- λ ν
μ΄λΈμ κ΅μ§ν©μ λ°ν
- λ μν°ν° κ°μ μΌμΉνλ λ°μ΄ν°κ° μλ κ²½μ°μλ§ κ²°κ³Όμ ν¬ν¨
- ν€μλ INNERλ μλ΅ κ°λ₯
- μ£Όλ‘ κ΄λ ¨ μλ λ°μ΄ν°λ₯Ό νν°λ§νκ±°λ λ°μ΄ν°λ₯Ό ν©μΉλ λ° μ¬μ©
SELECT m FROM Member m [INNER] JOIN m.team t
//νμκ³Ό ν μν°ν°λ₯Ό μ‘°μΈνλ©°, νμμ΄ μν νμ΄ μλ κ²½μ°μλ§ κ²°κ³Όμ ν¬ν¨
- μΈλΆ μ‘°μΈ(LEFT OUTER JOIN, RIGHT OUTER JOIN):
- μΌμΉνμ§ μλ λ°μ΄ν°λ ν¬ν¨νμ¬ κ²°κ³Ό λ°ν
- LEFT OUTER JOINμ μΌμͺ½ ν
μ΄λΈμ λͺ¨λ λ°μ΄ν°μ μΌμΉνλ μ€λ₯Έμͺ½ ν
μ΄λΈμ λ°μ΄ν° λ°ν, μΌμΉνμ§ μλ κ²½μ° NULL λ°ν
- μ£Όλ‘ κ΄λ ¨λ λ°μ΄ν°κ° μλ κ²½μ°μλ λ°μ΄ν°λ₯Ό ν¬ν¨νκ³ μ ν λ μ¬μ©
SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
/*νμκ³Ό ν μν°ν°λ₯Ό μ‘°μΈνλ©°, νμμ΄ μν νμ΄ μλ κ²½μ°μλ κ²°κ³Όμ ν¬ν¨
μ΄λ ν μ 보λ NULLλ‘ λ°νλ */
- μΈν μ‘°μΈ(CROSS JOIN):
- λ μν°ν°μ λͺ¨λ κ°λ₯ν μ‘°ν© λ°ν
- μ‘°μΈ μ‘°κ±΄μ΄ λͺ
μλμ§ μμ κ²½μ° μ¬μ©
- κ²°κ³Ό λ°μ΄ν°μ μμ΄ λ§μμ§ μ μμΌλ―λ‘ μ¬μ©μ μ£Όμ νμ
- λ μν°ν° κ°μ κ΄κ³κ° μλ κ²½μ° μ¬μ© λΆ
select count(m) from Member m, Team t where m.username = t.name
/*νμ μν°ν°μ ν μν°ν°μ λͺ¨λ μ‘°ν©μ μμ±ν ν,
νμμ μ΄λ¦μ΄ ν μ΄λ¦κ³Ό μΌμΉνλ κ²½μ°λ§ κ²°κ³Όμ ν¬ν¨*/
μ‘°μΈ - ON μ
ONμ μ νμ©ν μ‘°μΈ(JPA 2.1λΆν° μ§μ)
- μ‘°μΈ λμ νν°λ§
- μ°κ΄κ΄κ³ μλ μν°ν° μΈλΆ μ‘°μΈ(νμ΄λ²λ€μ΄νΈ 5.1λΆν°)
1. μ‘°μΈ λμ νν°λ§
μ) νμκ³Ό νμ μ‘°μΈνλ©΄μ, ν μ΄λ¦μ΄ AμΈ νλ§ μ‘°
//JPQL
SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A'
//SQL
SELECT m.*, t.* FROM
Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A'
2. μ°κ΄κ΄κ³κ° μλ μν°ν° μΈλΆ μ‘°μΈ
μ) νμμ μ΄λ¦κ³Ό νμ μ΄λ¦μ΄ κ°μ λμ μΈλΆ μ‘°μΈ