[DB] ANSI SQL

iamhyunji·2022년 5월 15일
1
post-thumbnail

🔍 들어가기 전에


최근 MySQL 관련 글을 보다가 문득 ANSI SQL이라는 단어가 눈에 들어왔다.
DB 관련 뿐만 아니라 설정 관련해서도 ANSI라는 단어를 본 기억이 있어 이번 기회에 찾아보게 되었다.

오늘은 ANSI란 무엇인지, 그리고 ANSI SQL는 무엇인지에 대해 알아보고자 한다.

📌 ANSI


  • 미국 국가 표준 협회 (ANSI : American National Standards Institute)
  • 자발적으로 미국 제품/프로세스/시스템을 위한 표준 제정을 담당하는 민간 비영리 단체
  • 미국 제품이 세계에서 통용되기 위해 국제적인 기준에 부합하는 기준을 제정

ANSI는 미국의 기술 표준 개발을 지원하는 주요 기관으로, 국제표준화기구 ISO(International Organization for Standardization)에 가입했다.

ANSI는 현대 개발의 모든 측면에 있어 국제젹인 기준을 개발함에 있어 중요하다.
표준이 존재함으로써 어디서나 사용 가능한 제품을 생산할 수 있는 것이고, 이는 Database 분야에서도 마찬가지이다.

ANSI SQL에 대해 알아보기 전에 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가 있다.

📌 ANSI SQL


  • 미국 국가 표준 협회 (ANSI : American National Standards Institute)에서 개발한 SQL 표준 기준
  • 대부분의 벤더 데이터베이스에서 동작할 수 있는 표준

    💡 벤더(vendor)는 "공급 업체"를 의미

위에서 잠깐 언급했듯이 RDBMS의 종류는 굉장히 다양하다.
이러한 RDBMS 벤더들이 각자의 언어, 문법만 고집한다면 다중 RDBMS 사용자들은 혼란스럽고 추후 통합 과정도 여간 쉬운게 아닐 것이다.

이에 ANSI는 표준이 되는 SQL을 제정했고, 이를 ANSI SQL라 부른다.
ANSI SQL의 사용의 장점과 단점은 아래와 같다.

장점

  • 현대 대부분의 데이터베이스에서 작동
  • 다른 벤더에서도 이용 가능함 (MySQL, Oracle 등)
  • 교차 학습을 할 때의 러닝 커브 또는 학습 시간을 줄여줌
  • 적은 유지보수 비용

단점

  • 벤더에서 개발한 SQL과 비교해 비교적 복잡한 문법
  • 높은 개발 비용

📌 ANSI SQL의 특징


  • Joins
    • CROSS JOIN
    • NATURAL JOIN
    • [INNER] JOIN ... USING
    • [INNER] JOIN ... ON
    • Multiple Joins
    • {LEFT | RIGHT | FULL} [OUTER] JOIN
  • CASE
  • NULLIF 함수
  • COALESCE 함수
  • Scalar 서브쿼리
  • 명시적 기본값

Database 벤더마다 차이가 존재하지만, 가장 자료가 많았던 Oracle 기준으로 차이를 가져왔다.

이번 포스팅은 ANSI와 ANSI SQL에 대한 개념을 학습하는 것임으로 구체적인 것은 참조를 통해 확인하고, 차이가 가장 두드러지는 OUTER JOIN 비교 함으로써 ANSI SQL에 대해 알아보고자 한다.

JOIN의 자세한 차이 및 OUTER JOIN 외 ANSI SQL의 나머지 특징을 알고 싶다면 ANSI ISO SQL Support In Oracle 9i - Oracle에서 확인하길 바란다.

OUTER JOIN

  • LEFT JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN

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가 더 좋지 않을까 하는게 개인적인 생각이다.

✏️ 오늘의 정리


  • ANSI는 미국 국가 표준 협회 (ANSI : American National Standards Institute)의 약자
  • ANSI SQL은 ANSI가 제정

🔗 참고자료


profile
Lv0. 웹 개발 (❤️❤️❤️🤍)

0개의 댓글