반응형

ANSI SQL의 특징

1. 표준 SQL문이기 때문에 DBMS의 종류에 제약을 받지 않는다. (MySQL, OracleDB..)

2. 테이블간의 Join 관계가 FROM 에서 명시되기 때문에 WHERE 문에서 조건만 확인하면 된다.

즉, 가독성이 일반 Query문보다 좋다.


 대표적인 예시로 ANSI SQL의 두번째 장점인 가독성에 대해서알아보자.


* ANSI SQL

일반 SQL Query는 다음과 같다.

-- 일반적인 SQL Query 

SELECT * 

FROM table1 as t1, table2 as t2 WHERE t1.a = t2.b

즉, WHERE문에서 Table을 JOIN하는 방식이다.

단순한 Query라면 가독성에 전혀 문제가 없지만, Query가 길어지게되면 가독성이 떨어질 수 밖에 없다.


이와 다르게 ANSI SQL Query 는 FROM 절에서 JOIN을 이용하여 묶고, WHERE에는 검색 조건만 넣어 가독성이 좋다.

-- ANSI SQL Query 

SELECT * 

FROM table1 as t1 LEFT OUTER JOIN table as t2 ON t1.a = t2.b

위의 ANSI SQL에서는 LEFT OUTER JOIN을 사용하여 FROM절에 Table JOIN 하였다.

ANSI SQL에서 사용하는 INNER/OUERT JOIN 의 개념을 명확히 아는 것 또한 중요하다.


* INNER JOIN

두 테이블간 ON 조건을 만족하는 ROW만 출력된다.

-- INNER JOIN 

SELECT * 

FROM table1 as t1 INNER JOIN table2 as t2 ON t1.a = t2.b;

Query가 위와 같을 때, ON 조건인 t1.a = t2.b 를 만족하는 Row 만 출력된다.


* OUTER JOIN

대표적으로 자주 사용하는 LEFT OUTER JOIN 에 대해서 알아보면,

OUTER 명령어는 생략이 가능하다. 즉, LEFT OUTER JOIN = LEFT JOIN과 같다.

LEFT TABLE 을 기준으로 오른쪽에 덧붙이는 느낌으로 생각하면 된다.

즉, LEFT TABLE의 결과값을 가져오고 ON 조건에 해당하는 경우 오른쪽에 매칭, 데이터가 없는 경우 NULL로 출력된다.

-- OUTER JOIN 

SELECT * 

FROM table1 as t1 LEFT OUTER JOIN table2 as t2 ON t1.a = t2.b;

t1.a = t2.b 인 경우, t1의 값이 10행 이라면, 해당 쿼리의 결과도 10행이 유지되고, ON 조건에 해당하는 Row가 있다면 오른쪽에 데이터가 매칭된다.

단, 1개의 t1 행에 ON 조건을 만족하는 t2의 값이 여러개라면, Row가 증가할 수도 있다.


* 결론

ANSI SQL 에 맞춰서 Query를 짜는 습관을 가지자.

즉, WHERE 문에서는 검색조건만 넣도록, Table JOIN 은 FROM절에 묶어서 처리하자.

반응형