본문 바로가기

IT

ANSI 표준

ANSI SQL

DBMS(Oracle, My-SQL, DB2 등등)들에서 각기 다른 SQL를 사용하므로, 
미국 표준 협회(American National Standards Institute)에서 이를 표준화하여 표준 SQL문을 정립 시켜 놓은 것이다.

어디서나 통용될 수 있는 공통적인 기준 " 이라고 볼 수 있다. 이러한 ANSI는 SQL에서도 찾아볼 수 있으며, 대표적으로 JOIN 구문에서 확인할 수 있다.

 

 

ANSI의 뜻

미국 국립 표준 협회(American National Standards Institute, ANSI) 미국의 산업 표준을 제정하는 민간단체이며, 국제표준화기구 ISO에 가입되어 있다. ANSI에서 제정된 표준을 ANSI라고 부르기도 한다. 1918년 AESC란 이름으로 창설되었으나,1928년 ASA(American Standards Association)로 이름이 변경되다가 1969년 현재 이름인 ANSI로 변경되었다.

(출처: 나무위키)


ANSI SQL 특징

표준 SQL문이기 때문에 DBMS의 종류에 제약을 받지 않는다. (MySQL, Oracle 등등)
즉, 특정 벤더에 종속적이지 않아 다른 벤더의 DBMS로 교체하더라도 빠르게 다른 벤더사를 이동할 수 있다.
특정 DBMS의 이탈이 가속되는 것도 ANSI SQL의 영향이 크다고 할 수 있다.

테이블간의 Join 관계가 FROM 에서 명시되기 때문에 WHERE 문에서 조건만 확인하면 된다.
즉, 가독성이 일반 Query문보다 좋다.

단, 각각 DBMS 내부의 함수를 사용하는 경우 ANSI 문법만으로는 쿼리 작성이 불가능한 경우가 있다.

 


ANSI가 표준이지만, ANSI가 자주 쓰이지 않는 이유

기본적인 데이터 조회 구문(JOIN)은 ANSI SQL로 작성 가능하나, ANSI를 벗어나게 되는 경우는 DBMS에서 제공하는 함수를 사용할 때 이다. 
대부분 테이블에 저장된 데이터를 그대로 보지 않고 가공(문자열 잘라내기, 숫자 계산, 포맷 지정, 데이터 암 복호화 등)해서 보는 경우가 많다. 이러한 경우 내장된 함수 또는 별도로 개발한 함수 등을 이용해서 데이터를 가공하여 보여준다.
 자주 사용되는 것은 윈도우 함수(분석 함수)이며 ORACLE에서 제일 많이 제공하고 있다.

대표적인 윈도우 함수
RANK, SUM, ROWNUM, MAX, MIN

 


INNER JOIN

 
기존의 오라클에서는 단순히 WHERE 절에서 조인조건을 표현하면 되지만, ANSI에서는 이를 조금 더 명시적으로 표현한다.  결과 값은 동일하다. ANSI표준에서 INNER JOIN을 할때 INNER를 생략하고 JOIN만 써도 INNER JOIN으로 실행된다.

오라클
결과 값
ANSI 표준

 

결과 값

OUTER JOIN

Outer Join은 오라클 고유의 outer join을 쓰는것보다는 ,ANSI표준을 쓰는것을 추천한다.

 

오라클
결과 값

 

ANSI 표준
결과 값

 

ANSI 아우터조인에는 방향이 붙는다. 왼쪽과 오른쪽을 정할 수 있으며, LEFT 의 경우 OUTER JOIN 뒤의 테이블에 (+) 가 붙는다고 생각하고 RIGHT의 경우 FROM 에 명시된 테이블에 (+)가 붙는다고 생각하면, 조금 이해가 쉬울 것이다.

 

FULL OUTER JOIN

LEFT 와 RIGHT를 모두 포함하는 FULL OUTER JOIN도 존재하며, 이는 말그대로 양쪽 테이블 모두 NULL값에 상관없이 조인시켜 모든 컬럼을 보여준다.

오라클은 양쪽에 (+)를 붙일수 없으므로, union으로 강제로 full outer join을 만들수는 있지만 선호되지는 않는다. 

ANSI 표준
결과 값
오라클

 

결과 값

 

'IT' 카테고리의 다른 글

[SQL] Union과 Union all 차이  (0) 2022.07.01
[Oracle] 형 변환  (0) 2022.06.29
DBMS(DataBase Management System)란?  (0) 2022.06.28
SQL(Structured Query Language)이란?  (0) 2022.06.28
32bit와 64bit의 차이?  (0) 2020.06.16