SQL에서 두 개 이상의 테이블을 조인할 때, 우리는 명시적 조인(explicit join) 과 비명시적 조인(implicit join) 두 가지 방식 중 하나를 선택할 수 있습니다. 이번 글에서는 이 두 방식의 차이와, 예제를 통해 어떻게 전환하는지도 함께 정리해보겠습니다.
1. 명시적 조인 (Explicit Join)
명시적 조인은 SQL 표준(ANSI SQL-92 이후)에서 권장하는 방식으로, INNER JOIN ... ON 형태로 조인 조건을 명확하게 기술합니다. 가독성이 좋고, 조인 조건이 명확하게 구분되기 때문에 유지보수에도 유리합니다.
-- 명시적 조인 예제
SELECT t1.shop_id, t1.shop_nm, t1.shop_size,
t2.ord_no, t2.ord_dtm, t2.shop_id, t2.ord_amt
FROM startdbmy.ms_shop t1
INNER JOIN startdbmy.tr_ord t2
ON t2.shop_id = t1.shop_id
WHERE t2.shop_id = 'S271'
AND t2.ord_dtm >= STR_TO_DATE('20230302','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20230303','%Y%m%d');
2.비명시적 조인 (Implicit Join)
비명시적 조인은 초기 SQL 표준(SQL-89)에서 사용되던 방식으로, JOIN 키워드를 쓰지 않고 단순히 FROM 절에서 콤마(,)로 테이블을 나열한 뒤, WHERE 절에서 조인 조건을 작성합니다.
Oracle과 같이 오래된 시스템에서는 여전히 이 방식을 자주 볼 수 있으며, 일부 상황에서는 성능상의 이점이 있을 수도 있습니다.
-- 비명시적 조인 예제
SELECT t1.shop_id, t1.shop_nm, t1.shop_size,
t2.ord_no, t2.ord_dtm, t2.shop_id, t2.ord_amt
FROM startdbmy.ms_shop t1, startdbmy.tr_ord t2
WHERE t2.shop_id = 'S271'
AND t2.ord_dtm >= STR_TO_DATE('20230302','%Y%m%d')
AND t2.ord_dtm < STR_TO_DATE('20230303','%Y%m%d')
AND t2.shop_id = t1.shop_id;
3. 전환 규칙 요약
명시적 조인을 비명시적 조인으로 바꾸려면 아래 두 가지를 기억하세요:
- INNER JOIN 구문을 제거하고, FROM 절에서 테이블을 콤마(,)로 나열합니다.
- ON 절을 제거하고 그 안에 있던 조건을 WHERE 절에 추가합니다.
4. 명시적 조인 vs 비명시적 조인 비교
항목 | 명시적 조인 | 비명시적 조인 |
가독성 | ✅ 좋음 | ❌ 떨어짐 |
유지보수 | ✅ 유리 | ❌ 불리 |
표준 준수 | ✅ ANSI SQL | ❌ 오래된 방식 |
실무 사용 빈도 | ✅ 높음 | ⚠ Oracle 등 일부 사용 |
'SQL' 카테고리의 다른 글
DBeaver SQL 한글 마지막 글자 없어짐 현상 해결 방법 (0) | 2025.04.16 |
---|---|
관계형 데이터베이스(RDB)와 NoSQL 데이터베이스의 차이 (0) | 2025.04.13 |
MySQL Public Key Retrieval 오류 해결법 (DataGrip, Workbench 모두 적용 가능) (0) | 2025.04.03 |
(MYSQL) Primary Key & Index 지정하는 방법 (3) | 2024.10.10 |
MYSQL - 다른 열 사용하여 UNION 하기 (0) | 2024.10.04 |