최근 MySQL 관련 글을 보다가 문득 ANSI SQL이라는 단어가 눈에 들어왔다.
DB 관련 뿐만 아니라 설정 관련해서도 ANSI라는 단어를 본 기억이 있어 이번 기회에 찾아보게 되었다.
오늘은 ANSI란 무엇인지, 그리고 ANSI SQL는 무엇인지에 대해 알아보고자 한다.
ANSI는 미국의 기술 표준 개발을 지원하는 주요 기관으로, 국제표준화기구 ISO(International Organization for Standardization)에 가입했다.
ANSI는 현대 개발의 모든 측면에 있어 국제젹인 기준을 개발함에 있어 중요하다.
표준이 존재함으로써 어디서나 사용 가능한 제품을 생산할 수 있는 것이고, 이는 Database 분야에서도 마찬가지이다.
ANSI SQL에 대해 알아보기 전에 SQL은 무엇인지 알아보자.
구조적 쿼리 언어(Structured Query Language)를 의미
데이터베이스를 조작∙접근하기 위한 표준 언어
RDBMS 조작 또는 RDSMS 처리를 위한 위한 표준 언어
💡 RDBMS란?
- 관계형 데이터베이스 관리 시스템(Relational Database Management System)을 줄여서 RDMS라 부름
- E.F. Codd에 의해 도입된 관계형 모델 기반
💡 RDSMS란?
- 관계형 데이터 스트림 관리 시스템(relational data stream management system)을 줄여서 RDSMS라 부름
- 현실 세계의 비구조화/구조화된 데이터 스트림을 처리하는 데 사용하기 위해 고안됨
- designed to use standards-compliant SQL queries to process unstructured and structured data streams in real-time
- 결과 반환하고 종료되는 RDBMS와 달리 새 데이터가 이용 가능하면 계속해서 결과를 만들어냄
DB를 조작할 수 있는 SQL은 MySQL, ORACLE, MS SQL Server 등 다양한 RDBMS가 있다.
💡 벤더(vendor)는 "공급 업체"를 의미
위에서 잠깐 언급했듯이 RDBMS의 종류는 굉장히 다양하다.
이러한 RDBMS 벤더들이 각자의 언어, 문법만 고집한다면 다중 RDBMS 사용자들은 혼란스럽고 추후 통합 과정도 여간 쉬운게 아닐 것이다.
이에 ANSI는 표준이 되는 SQL을 제정했고, 이를 ANSI SQL라 부른다.
ANSI SQL의 사용의 장점과 단점은 아래와 같다.
Database 벤더마다 차이가 존재하지만, 가장 자료가 많았던 Oracle 기준으로 차이를 가져왔다.
이번 포스팅은 ANSI와 ANSI SQL에 대한 개념을 학습하는 것임으로 구체적인 것은 참조를 통해 확인하고, 차이가 가장 두드러지는 OUTER JOIN 비교 함으로써 ANSI SQL에 대해 알아보고자 한다.
JOIN의 자세한 차이 및 OUTER JOIN 외 ANSI SQL의 나머지 특징을 알고 싶다면 ANSI ISO SQL Support In Oracle 9i - Oracle에서 확인하길 바란다.
ANSI 스타일
SELECT E.EMP_ID
, E.EMP_NAME
, E.SALARY
, D.DEPT_NAME
FROM EMPLOYEE E JOIN DEPARTMENT D
ON (E.DEPT_NO = D.DEPT_NO)
WHERE D.DEPT_NO = 2;
Oracle 스타일
SELECT E.EMP_ID
, E.EMP_NAME
, E.SALARY
, D.DEPT_NAME
FROM EMPLOYEE E,DEPARTMENT D
WHERE E.DEPT_NO = D.DEPT_NO
AND D.DEPT_NO = 2;
ANSI는 JOIN 시 JOIN을 명시적으로 표기하며, ON 절을 통해 두 테이블 연결한다.
하지만 Oracle의 경우, JOIN을 WHERE절을 통해 두 테이블을 연결한다.
Oracle을 사용한다면 JOIN절에 대한 구문이 짧고, WHERE 절을 통해 연결한다는게 편해 보이기는 하지만, 나중에 유지보수 및 가독성을 생각한다면 명시적으로 JOIN을 표시하는 ANSI가 더 좋지 않을까 하는게 개인적인 생각이다.