1.. Compare ANSI and Conventional(non-ANSI)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- Compare ANSI and Conventional
-- 1. ANSI Syntax
SELECT COUNT(*)
  FROM t1 a
 INNER JOIN t2 b
    ON a.cmpn_no = b.cmpn_no
 INNER JOIN t3 c
    ON b.cmpn_no = c.cmpn_no
 WHERE b.rgstr_id = 'abc'
   AND c.pimg_file_nm IS NOT NULL
;
-- 2. Conventional syntax
SELECT COUNT(*
  FROM t1 a
     , t2 b
     , t3 c
 WHERE a.cmpn_no = b.cmpn_no
   AND b.cmpn_no = c.cmpn_no
   AND b.rgstr_id = 'abc'
   AND c.pimg_file_nm IS NOT NULL
;
-- returns same results
cs



2. ANSI inner join 안 조건, 밖 조건


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 조건의 위치가 달라질때
-- 1. inner join 안 조건
SELECT COUNT(*)
  FROM t1 a
 INNER JOIN t2 b
    ON a.cmpn_no = b.cmpn_no
   AND b.rgstr_id = 'abc'       -- a,b inner join 다음 조건1
 INNER JOIN t3 c
    ON b.cmpn_no = c.cmpn_no  -- b,c inner join 다음 조건2
   AND c.pimg_file_nm IS NOT NULL
;
-- 2. inner join 밖 조건
SELECT COUNT(*)
  FROM t1 a
 INNER JOIN t2 b
    ON a.cmpn_no = b.cmpn_no
 INNER JOIN t3 c
    ON b.cmpn_no = c.cmpn_no
 WHERE b.rgstr_id = 'abc'          -- a,b b,c inner join 다음 조건1
   AND c.pimg_file_nm IS NOT NULL -- 다음 조건2
;
-- returns same results
cs



ANSI 조인과 non-ANSI 조인의 결과는 같았다.


ANSI조인을 사용하는 이유는 


1. JOIN 절을 사용하면 관계 논리가 필터 논리 (WHERE)와 분리되므로 더 명확하고 이해하기 쉽다.

2. 외부 조인 구문 (+ 사용)이 모호하고 쿼리 결과가 구현에 따라 달라 지거나 쿼리를 전혀 해석 할 수없는 경우가 있다.

3. 우발적 인 교차 결합을 피할 수 있다.


ANSI JOIN 사용하는 것이 그렇지 않은 syntax를 사용하는 것 보다 안전하다.



+ Recent posts