brunch

You can make anything
by writing

C.S.Lewis

by 김유환 Oct 09. 2019

11. SQL이란 무엇인가

데이터베이스는 어떻게 SQL을 읽고 해석하는지 알아보기

배경

이제 드디어 기다리던 SQL 을 다뤄볼 시간입니다. SQL은 데이터베이스가 이해할 수 있는 언어입니다. SQL을 본격적으로 배우기 전에 지금까지 배웠던 데이터베이스 환경에 대해서 다시 한번 정리해보고, 컴퓨터가 어떻게 SQL 을 해석하는지 알아보도록 합시다.


지금까지 우리는 TablePlus를 통해서 데이터베이스에 테이블 생성, 데이터 삽입, 데이터 삭제, 데이터 수정, 데이터 추출 등의 작업 요청을 보냈습니다. TablePlus는 우리가 GUI 형태로 데이터베이스에 요청을 보낼 수 있게 도와주는 역할을 합니다. 우리가 TablePlus를 통해 요청을 보낼때, TablePlus 내부적으로는 각 요청을 SQL로 만들어서 DBMS에 전달합니다.

TablePlus 를 이용해서 GUI 형태로 데이터를 다루는 것은 사용자 입장에서 간편합니다. 하지만, 데이터베이스가 제공하는 모든 기능을 TablePlus에서 GUI 형태로 만들어서 제공하는 것은 매우 어렵습니다. TablePlus는 데이터베이스가 제공하는 기능중에서 아주 자주 사용하는 기능들만 GUI 형태로 만들어서 제공하는 것입니다. 그중 대표적인 예시가 지금까지 우리가 살펴본 데이터를 불러오고, 수정하고, 임포트하는 기능들입니다. 데이터베이스를 이용해 데이터 분석을 깊이 있게 진행하기 위해서는 결국 GUI로 만들어진 메뉴를 거치지 않고 직접 DBMS와 소통할 수 있는 방법을 터득해야합니다. DBMS와 소통할 수 있는 언어가 바로 SQL 입니다


데이터베이스가 이해하는 언어

SQL은 Structured Query Language의 약자로 데이터베이스가 이해할 수 있는 질의 언어 입니다. 여기에서 질의라는 것은 Query의 번역으로, 우리가 원하고자 하는 데이터를 데이터베이스에 요청한다는 의미입니다. 


영어를 배울 때, 문법을 배우고 이 문법에 맞춰서 말을 해야 상대방이 내가 하는 이야기를 이해할 수 있습니다. SQL 역시 SQL 문법에 맞춰 요청을 전달해야 데이터베이스가 이해할 수 있습니다. 영어나 한국어와 같은 인간의 언어는 오랜 시간 발전을 해왔기 때문에, 매우 복잡할 뿐더러 예외가 많이 존재합니다. 반면, SQL 은 컴퓨터가 이해할 수 있도록 누군가 규칙을 만들어낸 언어이기 때문에, 우리가 사용하는 언어에 비해 매우 간단하며 예외가 존재하지 않습니다. 아직 익숙하지 않기에 어려워보이는 것이지, 간단하고 명료한 규칙을 따릅니다.

오른쪽 영어로 써져있는 문장은 사용자 테이블에서 이름, 주민등록번호 정보를 가져오라는 질의를 SQL 문법에 맞춰 작성한 SQL의 한 예시입니다. 데이터베이스는 이 문장 혹은 질의를 어떻게 해석하는 걸까요?


데이터베이스는 어떻게 SQL을 이해할까

1. 띄어쓰기 단위로 구분

데이터베이스가 SQL을 이해할때에는 한국어나 영어와 비슷하게 컴퓨터는 띄어쓰기를 기준으로 단어를 구분합니다. 위의 SQL문을 예제로 생각해보면, 문장 맨앞에 위치한 SELECT의 첫번째 글자 'S'부터 컴퓨터는 하나씩 읽어가면서 사용자의 요청을 분석하는 것입니다. S, E, L, E, C, T 까지 읽고 나면 띄어쓰기를 만나게되고 데이터베이스는 띄어쓰기가 나왔으니 이전까지 알파벳을 합쳐봐야지라고 생각합니다. 지금까지 읽은 알파벳을 합치면 SELECT라는 단어를 사용자가 입력했다는 것을 판단하게 됩니다.


2. 예약어 매칭

SQL 문법은 SQL 질의 요청에서 특별한 의미를 가지는 단어들을 미리 정의해두고 있습니다. 이를 예약어라고 부릅니다. SELECT 는 데이터를 가져오라는 의미로 미리 정의된 예약어입니다. SELECT 예약어로 문장이 시작되면 데이터베이스에서 데이터를 추출해오라는 의미라는 것이 미리 정의되어있습니다. 만약, 미리 예약되어있지 않은 단어를 사용하면 데이터베이스는 SQL 질의를 이해하지 못합니다. 예를 들어, 데이터베이스에서 데이터를 선택하라는 의미에서 SELECT가 아니라 CHOOSE를 사용하면 에러가 발생하게 됩니다. SQL을 사용하는 우리 입장에서는 '데이터를 선택할때는 SELECT를 사용하면 되는구나' 라고 외우면 됩니다. 


3. 예약어 규칙

데이터베이스는 SQL 질의를 이해하기 위해서 각 예약어가 나오면 그 뒤에 어떤 단어들이 나와야하는지도 정의해두고 있습니다. 예를 들어, SELECT의 경우 SELECT 다음에는 언젠가 반드시 FROM 이 오게 되어있고, FROM 바로 뒤에는 데이터를 가져오고 싶은 테이블의 이름이 오도록 정의되어 있습니다. 데이터를 선택하기 위해서는 어떤 테이블에서 선택해야하는지가 반드시 존재해야하기 때문입니다. 그리고 SELECT 와 FROM 사이에는 테이블 열의 이름이 쉼표(,)로 구분되어 나열되도록 되어있습니다. 


다시 한번, 위에서 보여드렸던 SQL문을 예시로 들어봅시다. 데이터베이스 입장에서 이야기해보자면 SELECT 명령어 뒤의 띄어쓰기를 만나면, n,a,m,e, 쉼표까지 읽고 name 을 기억해둡니다. 그리고 r,r,n, 띄어쓰기까지 읽고 rrn 을 기억해두죠. FROM 명령어를 만나면, 지금까지 기억해두었던 name과 rrn 이라는 열을 사용자가 원하고 있구나를 이해하게 됩니다. FROM 다음을 읽어보면 u, s, e, r, s 까지 읽게 되고 FROM 다음에는 테이블 이름이 오기 때문에, 사용자가 users라는 테이블에서 데이터를 가져오는 것을 원한다는 것을 이해하게 됩니다.


이처럼 DBMS는 앞에서부터 한글자 한글자씩 읽어가면서 미리 정의된 예약어가 나타났는지 확인하고 예약어를 이해하면 각 예약어의 규칙을 기반으로 문장을 이해해나가는 것입니다. 앞으로 하나씩 배워나가겠지만, 데이터베이스에 데이터를 삽입, 수정, 삭제, 추출하는 작업들마다 이 작업들을 의미하는 예약어들이 존재하고 각 예약어마다 정의되어있는 예약어 규칙들이 있습니다. SQL을 배운다는 것은 이 예약어들에 익숙해지고 각 예약어의 규칙에 익숙해지는 것을 의미하는 것입니다.

참고로 SQL 은 대소문자 구분이 없습니다. 위에서 SELECT와 FROM을 소문자로 작성해도 상관없습니다. 하지만, 키워드와 사용자가 정의한 데이터를 구분하기위해 보통 키워드를 대문자, 사용자가 정의한 것을 소문자로 작성합니다.



TablePlus에서 SQL 작성

TablePlus는 자주 사용하는 데이터베이스 명령어들을 GUI 형태로 제공하기도 하지만, 추가로 SQL 문을 쉽게 작성할 수 있는 도구도 함께 제공하고 있습니다. 이제 TablePlus에서 SQL을 입력하는 화면으로 들어가봅시다. 아래 그림과 같이, 데이터베이스를 선택하는 메뉴 우측에 SQL이라고 써져있는 버튼을 눌러봅시다. 이 버튼을 누르면 우측 패널에 아래 그림과 같이 비어있는 화면이 보일것입니다. 이 화면에서 SQL 문을 작성하고 데이터베이스에 요청을 보낼 수 있습니다.


화면에 접속한 김에 우측패널 중간에 위치한 버튼들에 대해서 간단히 살펴봅시다. 


먼저, Limit 버튼은 테이블을 다룰때와 마찬가지로 몇개의 행을 추출할지 선택하는 버튼입니다. SQL 문에 LIMIT 이라는 키워드를 사용해 이 작업을 할 수 있지만, 워낙 자주 사용하는 옵션이나 보니 TablePlus 는 이처럼 버튼으로 빼두었습니다. 

다음으로, Beautify 버튼은 사용자가 작성한 SQL 을 예쁘게 바꿔주는 역할을 합니다. 간단하게 우측 SQL문을 복사해서 화면에 넣어보고, Beautify 버튼을 눌러봅시다.


마지막으로, Run Current 버튼은 현재 작성된 SQL문을 DBMS에 보내는 버튼입니다. 버튼을 통해 우리가 작성한 SQL 문을 DBMS로 보내면, DBMS는 users 테이블에서 name과 rrn 열에 해당하는 데이터를 선택해서 화면에 보여주게 됩니다. 


마치며

오늘 글에서는 SQL이 무엇인지, 데이터베이스는 이를 어떻게 해석하게 되는지, 그리고 TablePlus에서 SQL은 어떻게 작성하는지를 살펴보았습니다. 다음 글에서는 본격적으로 SQL 에서 필수적으로 알아야하는 예약어들과 각 예약어의 규칙을 배워보도록 하겠습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari