표준 SQL 및 데이터베이스 입문
백커스-노어 표기법(Backus-Naur Form)은 읽을 수 있으면 편리하며 매뉴얼 서식이라고 볼 수 있습니다.
지금까지 다양한 구문들을 살펴보았으며 어느정도 감이 잡힌 상태라고 생각되는데 좀더 자세히 알고 싶다면 BNF 기법의 읽는 방법을 알아두면 좋기에 설명합니다.
예를 들어, SELECT 구문의 구조나 어떤 키워드를 사용할 수 있는지, 어떤 순서로 작성하는지등의 내용은 BNF 기법이라는 정해진 스타일로 작성되는 경우가 많아 교재나 매뉴얼을 읽을 때 필요합니다.
SQL에는 다양한 구문들이 있으며, 어느 위치에서 어떤 키워드를 사용할 수 있는지, 열명이나 테이블명은 어디에서 지정할 수 있는지 등은 구문마다 정해져 있습니다. SQL구문은 표준 SQL 규격 문서나 각 DBMS 매뉴얼등에서 확인할 수 있습니다. 다음은 SELECT문의 구문(ISO/IEC 9075-2:2023)입니다. 이런 기술방식을 백커스-노어 표기법(BNF 기법)이라고 합니다.
관련 URL: https://www.iso.org/obp/ui/#iso:std:iso-iec:9075:-2:ed-6:v1:en
대문자 부분은 SQL 키워드로 그대로 기재합니다. <소문자>로 표시된 부분은 다른 곳에서 정의되어 있으므로 적절히 참조합니다. [~](대괄호) 부분은 그 안에 포함된 내용이 생략 가능함을 낱타냅니다. 따라서 ①의 부분은,
사양서에서 query specification이라고 기재된 부분의 형식은, SELECT 다음에 set quantifier(생략가능)와 <select list> 및 <table expression>을 지정하는 것입니다.
이와 같이 읽을 수 있습니다. 다음 블록에서 사용된 |는 '또는'이라는 의미의 기호입니다. 따라서, ②의 부분은,
<set quantifier> 부분에는, DISTINCT 또는 ALL을 작성합니다.
이와 같은 의미입니다. 반복해서 작성할 수 있는 부분은 { } (중괄호)로 표시되어 있습니다. 따라서, ③의 부분은,
<select list> 부분에는, <asterisk>(다른 곳에서 '*'으로 정의됨) 또는 <select sublist>를 작성하여 <select sublist>는 <comma>(',')로 구분하여 반복해서 작성할 수 있습니다.
이와 같이 읽을 수 있습니다. MySQL, MariaDB, PostgreSQL 매뉴얼의 경우, '<>'는 사용되지 않지만, 같은 방식으로 읽을 수 있습니다. 다음은 MariaDB의 SELECT문입니다.
관련 URL: https://mariadb.com/kb/en/select/
'SELECT'에 이어서 'ALL 또는 DISTINCT 또는 DISTINCTROW 중 하나 (생략가능)', 'HIGH_PRIORITY(생략가능)', 'STRAIGHT_JOIN(생략가능)'등의 키워드와 그리고 'select_expr'를 쉼표(,)로 구분하여 여러 개(여기서 select_expr부분에는 가져올 열을 기재한다는 내용이 별도로 설명되어 있음)와 같이 작성되어 있습니다. 참고로 'DISTINCTROW', HIGH_PRIORITY', 'STRAIGHT_JOIN'은 표준 SQL에는 정의되어 있지 않고, MySQL/MariabDB고유의 키워드입니다.
천천히 읽으면 이해할 수 있습니다. 물론 이 부분을 갑자기 읽어야할 필요는 없고 샘플을 따라하면서 익히면서 살펴보면 좋습니다. 예를 들어, 교재나 웹사이트의 예제를 보고 따라했다가 문법적 오류가 발생했다면 자신이 사용하는 DBMS버전에서 해당 구문이 사용가능한지 확인이 필요하게 됩니다. 지원여부뿐만 아니라, 키워드가 기재되어 있는지로 대략 판단할 수 있으며, 그 이후에는 점차 익숙해지면 그것으로 충분합니다.
©2024-2025 GAEBAL AI, Hand-crafted & made with Damon JW Kim.
GAEBAL AI 개발사: https://gaebalai.com
AI 강의 및 개발, 컨설팅 문의: https://talk.naver.com/ct/w5umt5