ON절과 WHERE절의 차이 0 6 1,733

by 김대식 [Oracle 기초] ON WHERE [2017.09.10 22:01:51]


JOIN에 대해 공부하다가 의문이 생겼는데요

ON절과 WHERE절의 차이가 있을까요??

여러 쿼리문을 작성해봐도 둘의 결과가 같게 나와서요!!

혹은 성능상의 차이가 있나요?!

 

by jkson [2017.09.11 08:38:11]

ansi sql의 on 절을 통한 조인기법과 오라클의 where 절 조인기법의 차이를 말씀하시는 건지

아니면 ansi sql에서 on절과 where절의 차이를 말씀하시는 건지 애매하네요.

전자를 말씀하시는 것이라면 표현 방법만 다를 뿐 내부적으로 동일하구요.

후자를 말씀하시는 것이라면 on절은 조인 조건에 대한 기술을 하는 부분이고

where 절은 데이터 탐색(acceess or filter) 에 대한 조건을 기술하는 부분입니다.

어떻게 sql을 작성하시고 테스트하셨는지요?


by 김대식 [2017.09.11 11:40:55]

저는 SELECT * FROM job J JOIN job_history H ON (J.job_id = H.job_id) AND (J.max_salary > 10000); 이것과

SELECT * FROM job J JOIN job_history H ON (J.job_id = H.job_id) WHERE J.max_salary > 10000; 이렇게 테스트 해봤었습니다!! 결과가 동일하게 나와서 의문이 들었었습니다!


by 마농 [2017.09.11 08:50:21]

ON 절에는 조인 조건을 / WHERE 절에는 검색 조건을 줍니다.
INNER JOIN 의 경우에는 이 규칙을 철저히 지키지 않고 혼용하여 사용하더라도 큰 무리는 없습니다.
OUTER JOIN 의 경우에는 이 규칙을 어길 경우 결과가 다르게 출력 될 수 있습니다.
 


by 김대식 [2017.09.11 11:41:45]

INNER JOIN으로만 비교해봐서 결과가 비슷했던것이군요 ㅠㅠ 감사합니다 ㅠㅠ


by 우리집아찌 [2017.09.11 10:06:12]
/*예전거..*/
-- 퀴즈
-- 다음중 결과값이 다른 쿼리는?
WITH T1 (idx , col1 , col2 ) AS (
SELECT '1','10','100' FROM DUAL UNION ALL
SELECT '2','20','200' FROM DUAL UNION ALL
SELECT '3','30','300' FROM DUAL UNION ALL
SELECT '4','40','400' FROM DUAL UNION ALL
SELECT '5','50','500' FROM DUAL 
) , T2 ( idx , col1 , co2 ) AS (
SELECT '1','10','100' FROM DUAL UNION ALL
SELECT '2','20','200' FROM DUAL UNION ALL
SELECT '3','30','300' FROM DUAL
)

/*-- 1번쿼리
SELECT * 
  FROM T1 a LEFT OUTER JOIN T2 b
    ON a.idx = b.idx
   AND a.idx IN (1,2)
   AND b.col1 = 10 */ 
-----------------------------
/*-- 2번쿼리
SELECT * 
  FROM T1 a LEFT OUTER JOIN T2 b
    ON a.idx = b.idx
  WHERE a.idx IN (1,2)
    AND b.col1 = 10 */
-----------------------------
/*-- 3번쿼리
SELECT * 
  FROM T1 a LEFT OUTER JOIN T2 b
    ON a.idx = b.idx
   AND a.idx IN (1,2)
 WHERE b.col1 = 10 */
-----------------------------
/*-- 4번 쿼리
SELECT  * 
  FROM T1 a , T2 b
WHERE a.idx = b.idx(+)
  AND a.idx in (1,2)
  AND b.col1 = 10  */ 
-------------------------------

 


by 김대식 [2017.09.11 11:48:10]

1번 쿼리가 다르지 않나요??

b.col1 = 10인 값들로 LEFT OUTER JOIN을 하기 때문에요!!

아직 제가 너무 미숙합니다 ㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입