SQL을 왜 구조적, 집합적, 선언적이라고 정의할까?

Su Bak
4 min readJun 7, 2022

--

Photo by Sunder Muthukumaran on Unsplash

SQL은 Structured Query Language의 약자입니다. 우리말로 하면 “구조적 질의 언어” 라고 합니다.

위키피디아에서 SQL의 정의를 찾아보면 아래와 같이 소개하고 있는데요.

SQL is a set-based, declarative programming language, not an imperative programming language like C or BASIC.

즉, SQL은 구조적(structured)이고, 집합적(set-based)이고, 선언적(declarative) 질의(Query) 언어입니다.

단어 하나하나가 낮설게 느껴지지 않으신가요? 구조적이라느니, 질의, 집합적, 선언적 어쩌구 저쩌구…

쉽게 하나씩 단어들을 설명해보겠습니다.

먼저 구조적(Structured)이란 단어는 왜 들어간 걸까요?

사실 여기엔 재밌는 사실이 하나 있는데요. SQL의 원래 이름은 SEQUEL(Structured English QUEry Language) 이였습니다.

후에 상표 문제로 SQL로 이름을 바꾼 것이죠.

눈치채셨나요? 네. 원래 이름에 Structured English 라는 부분이 들어갔었습니다.

즉, 문법이 영어와 같다 라는 사실을 강조해서 언어를 광고 하고 싶었던 것이죠.

실제 SQL 문법은 아래와 같은데요.

SELECT col1, col2 FROM t1;

이런식으로 영어 문법과 매우 흡사한 것을 보면 강조할만 했다는 생각도 좀 듭니다.

다음으로 왜 질의(Query)집합적(set-based)이란 정의가 SQL에 들어갔는지 알아봅시다.

우리가 SQL을 사용하는 이유는 결과적으론 하나입니다. 저장되어 있던 수많은 데이터들 중에서 원하는 집합(데이터 뭉치)을 뽑아내기 위함이죠.

그래서 “질의(Query)”“집합적(set-based)” 이라는 단어가 들어간 것입니다.

우리는 SQL이라는 언어를 사용해서 Database에게 “이러이러한 데이터를 줄 수 있어?” 라고 “물으면(질의하면)”
DBMS(데이터베이스 관리 시스템) 내부에 있는 “엔진”이 SQL을 분석해서 알맞은 “집합(데이터 뭉치)”을 주거나 SQL 문법이 틀리면 에러를 발생시키는 것이죠.

그래서 SQL을 정의할 때 “질의”, “집합적” 이라는 단어가 들어간 것입니다.

마지막으로 선언적(declarative)이란 정의는 왜 들어갔는지 알아볼까요?

선언적(declarative)란 간단히 말하면 어떻게 수행할지가 아닌 어떤 작업들로 수행할지에 초점을 맞춘 것이라고 할 수 있는데요.

더 깊게 들어가면 글이 너무 길어질 수 있으므로 저의 다른 글로 자세한 설명은 대체하겠습니다.

SQL이 왜 선언적인지 예시를 하나 들어보겠습니다.

t1 테이블에서 food 컬럼의 값이 rice인 집합을 뽑아내야한다고 가정하겠습니다.

예시의 결과를 SQL로 조회할 때 이렇게 사용하신 적이 있으신가요?

  1. t1이란 테이블에서 반복문을 사용해서 t1의 row를 처음부터 끝까지 조회하면서
  2. 그 중 food 컬럼의 값이 rice인 row를 분리해서 별도의 배열 메모리에 담고
  3. 반복문이 끝나면 이 배열 집합을 보여준다.

이렇게 예시의 결과를 뽑아내기 위해 일일이 방법을 선언해서 SQL을 사용하시나요? 사실 그렇지 않죠.

실제 SQL을 사용하면 아래와 같이 사용할 것입니다.

SELECT * FROM t1 WHERE food=“rice”;

이렇듯 SQL은 결과집합을 얻기 위해 어떻게 명령을 수행할지가 아닌 필요한 명령어(SELECT, FROM, WHERE 등)를 사용해 명령을 수행하기 때문에 “선언적(declarative)” 이라고 정의하는 것입니다.

SQL이란 이름은 간단하고 정의도 길지 않지만 그 안에 함축적인 내용이 굉장히 많음을 알 수 있습니다.

--

--

Su Bak

Backend Developer. Mainly use JavaScript but try not to have language constraints. Always trying to acquire new knowledge