| 내부 및 외부 조인 |
|---|
| ON 조건이 두 테이블 모두에서 일치하는 행만 반환합니다. 어느 쪽이든 일치하지 않는 행은 버려집니다. | SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id; |
| 왼쪽 테이블의 모든 행. 일치가 없으면 오른쪽 열은 NULL이 됩니다. | SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id; |
| 오른쪽 테이블의 모든 행. 일치가 없으면 왼쪽 열은 NULL이 됩니다. | SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id; |
| 두 테이블의 모든 행. 일치하지 않는 쪽은 NULL로 채워집니다. | SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id; |
| 교차 및 셀프 조인 |
|---|
| 데카르트 곱. 왼쪽의 각 행이 오른쪽의 모든 행과 짝을 이룹니다. ON 절이 없습니다. | SELECT u.name, o.total FROM users u CROSS JOIN orders o; |
| 별칭을 사용해 테이블을 자기 자신과 결합합니다. 한 테이블 안의 행끼리 비교합니다. | SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id; |
| 고급 조인 |
|---|
| FROM 안의 서브쿼리를 외부 행마다 평가합니다. 서브쿼리는 외부 테이블의 열을 참조할 수 있습니다. | SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o; |
| 이름이 같은 열끼리 결합합니다. ON 절이 없습니다. 의도하지 않은 키 충돌에 주의하세요. | SELECT u.name, o.total FROM users u NATURAL JOIN orders o; |