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를 사용하는 것 보다 안전하다.
'전체 > MySQL' 카테고리의 다른 글
MySQL 계층형 쿼리 구현하기 (13) | 2019.07.16 |
---|---|
SQL EXPLAIN 정리 (0) | 2018.11.19 |
group by 이해하기 (0) | 2018.10.24 |
where case문, or문 사용하기 (1) | 2018.06.20 |
쿼리에서 select해서 update하기, 쿼리에서 select한 값을 list로 받아와서 update하기 (0) | 2018.06.07 |