아직 SQL을 모르는 분들을 위한 안내서

⚠️
비개발자가 SQL을 맨땅에서부터 배워가며 얻은 지식을 바탕으로 다른 비개발자 분들께 최대한 쉽게 설명하고 배운 것을 공유하고자 작성한 글입니다.

SQL 초보자분들께서는 참고하시되 다른 자료들과 함께 보시면서 비판적으로 받아들여주시면 좋습니다. 이해가 안되는 부분을 알려주시면 보강하고, 더불어 틀린 내용을 말씀해주시면 수정하도록 하겠습니다. 감사합니다.

SQL이란?

SQL은 Structured Query Language 의 약어로, 직역하면 '구조화된 질문 언어'입니다. 정의만 보면 이해하기가 참 어렵습니다.

저는 이해가 안될 때는 다른 설명이나 예시를 살펴보다가 그래도 안되면 일단 넘어가긴 했습니다.😅

SQL은 컴퓨터 언어 중 하나입니다. 그리고 데이터베이스를 관리하는 언어입니다. 그렇다면 데이터베이스는 무엇일까요?

데이터베이스란?

단순하게 생각하면 '데이터를 모은 장소'라고 볼 수 있습니다.

데이터베이스는 '어떻게' 모으고 관리하는지도 중요한데요. 그 방법이 규칙적이라면 새로운 사람이 이해하기도 쉽고 관리도 잘 되겠죠?

데이터를 기록하는 양식은 다양합니다. 그 중에서 우리는 SQL 언어로 조작이 가능한 표 형태의 데이터베이스를 배울 것입니다.

이는 주로 '관계형 데이터베이스'(이하 데이터베이스로 통칭)라고 하는데요. 우리가 엑셀이나 구글시트에 업무 데이터를 기록하는 방식과 비슷합니다.

예시

우선 비품 관리를 예로 들어 SQL이 실제로 어떻게 작동하는지 보여드리겠습니다.

<비품 관리>

"여기서 공기청정기 구매일 2021-11-01 이전 건이 몇 개인지 찾아주세요."라는 요청을 받았다고 합시다. 사람은 '여기'가 '비품 관리'라고 추측할 수 있고, '공기청정기'만을 찾으려면 '비품 구분' 항목에서 찾아야한다는 것을 알 수 있습니다.

하지만 컴퓨터는 그렇지 않죠. 모든 상황과 조건을 정확하게 알려줘야하는데요.

엑셀이나 구글시트(이하 엑셀)에서는 COUNTIFS 라는 함수를 사용해서 찾는 구간(B2:B6)과 찾는 내용("공기청정기")을 입력해주면 알 수 있습니다.

=COUNTIFS(B2:B6,"공기청정기",C2:C6,"<2021-11-01")

SQL도 엑셀처럼 COUNT라는 함수가 있는데요. 어떤 표(비품 관리)에서 확인하는지도 적어줘야하고, 조건을 적는 방식이 조금 다릅니다.

SELECT COUNT('비품 구분')
FROM '비품 관리'
WHERE '비품 구분' = '공기청정기'
AND '구매일' < '2021-11-01'

이렇게 비교해보니 엑셀이 더 편한거같기도하고, SQL이 꼭 필요한가 싶지 않으신가요?

아마 SQL이 익숙하지 않아서기도 하시겠지만, 실제로 일을 할 때 엑셀이 더 편리한 상황들이 분명히 있습니다. 하지만 마찬가지로 SQL이 더 편리한 상황도 있죠.

어떤게 좋은지는 배워가다보면 알게될거에요! 처음부터 너무 신경쓰지 맙시다 :)

기본 단어와 문법

혹시 위의 SQL 문장을 보시고 바로 이해가 되셨나요? 그렇다면 천재... 아직 이해가 안되실 수 있으니 단어들을 뽀개서 설명해드릴게요.

SQL도 언어이기 때문에 영어처럼 '문법'이 있는데요.

사실 비개발자 입장에서는 SQL은 주로 데이터를 '조회'할 때 사용합니다. 때문에 여기서는 '조회'에만 집중해서 작성하겠습니다.

SQL로 데이터 조회할 때 사용하는 기본 언어는 5가지입니다.

SELECT

  • 표 데이터를 조회할 때, 어떤 열(세로줄, column)을 조회할지 선택합니다.
  • 전체를 조회하고 싶을 때는 SELECT * (all 이라는 의미) 사용
  • 특정 열만 조회하고 싶을 때는 해당 열의 이름을 적으면 됩니다.
  • 여러 열을 선택하고 싶을 때는 콤마(,)로 구분하여 작성하시면 됩니다.

FROM

  • 어떤 테이블을 조회할지 선택합니다.

WHERE

  • 특정 조건을 만족하는 데이터만을 조회하고 싶을 때 사용합니다.
  • 조건을 적는 공간입니다.

AND/OR

  • WHERE 가 특정 조건을 적는 '최초의 구분선'이라면 AND 와 OR 는 추가하는 곳입니다.
  • 사실상 WHERE 와 거의 같은 역할을 하지만 '언어'로서 사람들이 좀 더 이해하기 쉽게 구분한게 아닌가 합니다.
  • 괄호()를 사용하면 수학적 논리와 같게 작동합니다.
  • (1+1) * (2+2) = 2 * 4 = 8

문법에만 너무 치중하면 언어를 배우기 어렵겠죠? 예시를 보면서 읽어보겠습니다.

SELECT *
FROM '비품 관리'
WHERE '비품 구분' = '공기청정기'
AND '구매일' > '2021-01-01'
Select all from '비품 관리' table where '비품 구분' is '공기청정기' and '구매일' is after '2021-01-01'.

수학적인 기호들을 사람의 언어로 바꿨지만, 영어로 읽으니까 거의 달라진게 없는 느낌이지 않나요?

SQL은 영미권 사람이 만든 언어이기 때문에 (대부분의 컴퓨터 언어가 그렇긴해요.) 영어의 문법과 비슷해서 한국인 입장에서 처음에는 헷갈릴 수 있습니다.

실제로 원래 SQL은 Structured 'English' Query Language 였다고 하네요.

<한국어로 직역 시>전체를 조회해라. 비품 관리에서. 비품 구분이 공기청정기인 애들만. 그리고 구매일이 2021-01-01 이후인 애들만.
<의역 시>비품 관리에서, 비품 구분이 공기청정기이고 구매일이 2021-01-01 이후인 건들의 모든 항목을 조회해라.

다시 SQL 문장을 보니 이해가 잘 되시나요? 생각보다 별거없지 않나요?

저는 기초적인 걸 배운 다음에는 예제를 보고 쭉 읽으면서 익숙해지려고 하거나 직접 문장을 작성해서 조회해보고 그랬었는데요. 만약 재직중인 회사에서 서비스 데이터베이스를 조회할 수 있는 권한을 받으실 수 있다면, 요청해보시고 실제 환경에서 직접 연습해보는게 가장 좋습니다.

데이터 조회나 분석을 위해 SQL을 배울 때 가장 중요한 건 당장 써먹을 수 있느냐, 내가 의지가 있느냐가 제일 중요하지 않을까 합니다. 그래서 조회하고 싶은 정보를 표(table) 형태로 먼저 생각하거나 엑셀에 작성해보고 SQL 문장을 작성해보면 훨씬 도움이 많이 됩니다.

물론 배우다보면 막히는 부분들이 있을 수 있습니다. 하지만 주변분들에게 물어보시거나, 구글에 검색하면 충분히 잘 배우실 수 있을거에요.

"근데 Select 는 '선택하라'라는 뜻인데 '보여줘라(show)'라고는 안해도 되나요?"

이런 생각까지 하신다니.. 탐정의 소질이 있으시군요. 뇌피셜이지만 아마 SELECT AND SHOW 라고 하면 번거로워서 그런게 아닐까요? 네.. 언어는 가끔은 그냥 받아들이셔도 좋습니다.

SELECT, FROM, WHERE, AND 의 순서를 바꿔도 될까요?

문법은 '약속'이기 때문에 바꾸면 오류가 발생할 수 있습니다. 특히 컴퓨터 언어는 대부분 제약이 많은데요. 사람의 언어처럼 유연하진 않지만, 그대신 해석이 갈려서 커뮤니케이션에 문제가 생기는 일을 막을 수 있습니다. 컴퓨터에게는 약속대로 말 안하면 이해를 못하는 점도 있지만요!