인사이트콘텐츠

SQL 공부 순서, 이렇게 따라해보세요
K-디지털 기초역량훈련: 인사이트 콘텐츠

#SQL 순서 #S sql 변수 사용 #mysql 데이터 분석 #SQL무료강의


글 미리보기

1. SQL 개발자가 되기 위한 공부 순서
2. SQL 숙련도 향상
3. SQL 실무 사용 팁 및 노하우


출처: Pexels

최근 IT 제품의 규모가 증가하면서 데이터 관련 직무가 각광받고 있습니다. 혹시 데이터의 세계에서 가장 중요하다고 해도 과언이 아닌 SQL을 알고 계신가요? SQL이란 Structured Query Language의 약자로, 데이터베이스에 저장되어 있는 데이터를 구조화된(Structured) 방식으로 추출 및 가공하는 언어입니다.

SQL은 데이터 분석가, 데이터 엔지니어, 백엔드 엔지니어 등 데이터를 다뤄야하는 직무라면 반드시 필요한 스킬 중 하나입니다. 데이터를 다루는 사람이 SQL에 익숙하지 않다면 데이터를 추출하거나 가공할 수가 없기 때문입니다.

그렇다면, SQL에 능숙한 개발자가 되기 위해서는 무엇을 어떤 순서로 공부해야 할지 알아보도록 하겠습니다.

출처: Unsplash

1. SQL 개발자가 되기 위한 공부 순서

1) 우선 RDB가 무엇인지 이해하자

RDB란 Relational Database의 약자로, 여러 데이터 테이블을 통해 데이터 간의 관계성을 표현하기 위한 데이터베이스입니다. SQL은 이러한 RDB를 제어하기 위한 언어라고 볼 수 있습니다. 이 때, 테이블이란 특정 사물을 설명할 수 있는 행과 열 형태의 데이터 구조를 말합니다. 쉽게 말해서, ‘표’ 형태로 데이터를 저장하는 방식입니다.

2) 기본 쿼리 : SELECT 컬럼명 FROM 테이블명

RDB에서 SQL을 사용하여 데이터를 추출하는 작업을 ‘쿼리(Query)’한다고 합니다. 이 때, “SELECT” 절, 그리고 “FROM” 절을 아는 것이 쿼리의 가장 기본적인 지식입니다. SELECT는 테이블에 저장된 특정 컬럼을 불러오는 것이고, FROM은 어느 테이블에서 해당 컬럼을 추출할 것인지를 정의하기 위해 사용합니다.

예를 들어, “동물" 이라는 테이블이 있다고 할 때 컬럼은 [“동물코드", “동물이름", “나이"]와 같은 컬럼이 3개 존재한다고 해보겠습니다. 이 때, 모든 동물의 이름을 출력하는 SQL 쿼리는 다음과 같습니다.

SELECT 동물이름 FROM 동물

2. SQL 숙련도 향상

1) 조건절의 사용 (WHERE)

우리가 어떤 데이터를 추출할 때에는 기본적으로 특정 조건을 사용합니다. 위 동일한 예시를 기준으로 조건만 추가하여 새로운 쿼리를 작성해보겠습니다.

“동물" 테이블에 저장된 모든 동물 중에서 나이가 10세 미만인 동물만 추출하고 싶다면 어떤 문법을 사용해야 할까요? SQL의 세계에서는 “WHERE” 절을 사용하여 특정 데이터의 조건을 필터링할 수 있습니다. WHERE을 추가하여 위 쿼리를 재작성하면 다음과 같습니다.

SELECT “동물이름" FROM “동물" WHERE “나이" < 10

2) 함수의 사용

우리가 엑셀에서 효율적인 데이터 연산을 하기 위해 주로 사용하는 것이 있습니다. 바로 함수(function)입니다. SQL 역시 데이터 제어용 언어이기 때문에 다양한 함수들을 제공하고 있습니다. 가장 많이 사용되는 함수는 아무래도 데이터 집계용 함수일 것 같은데요. 엑셀과 마찬가지로 COUNT(), SUM(), AVG(), MIN(), MAX() 등 기본적인 데이터 집계 목적의 함수를 제공하고 있습니다.

마찬가지로, 위 테이블을 기준으로 “모든 동물의 평균 나이를 계산해줘"라는 요청이 들어왔다면 아래와 같이 쿼리를 작성할 수 있습니다.

SELECT AVG(“나이") FROM “동물"

3) 서브 쿼리

서브 쿼리란 말 그대로 “쿼리 안의 쿼리"를 의미합니다. 특정 테이블 안의 값을 직접 가공해서 조건을 만들고 싶을 때 많이 사용하곤 합니다.

위 동물 테이블을 기준으로 서브 쿼리를 작성해보겠습니다. 쿼리의 조건은 “전체 동물의 평균 나이보다 높은 나이를 가지고 있는 동물의 이름을 출력시킨다"입니다. 이 때, WHERE 절에 특정 문자나 숫자를 사용하지 않고, 아래와 같이 쿼리의 결과를 사용할 수 있습니다. (서브 쿼리는 대괄호를 사용하여 작성합니다)

SELECT “동물이름" FROM “동물" WHERE “나이" > (SELECT AVG(“나이") FROM “동물")

출처: Pexels

4) 조인(JOIN)

JOIN은 SQL을 공부할 때 가장 난이도가 높은 영역 중 하나인데요. JOIN은 서로 다른 테이블을 하나로 합칠 때 사용합니다.

데이터에 익숙한 분들이면 발견하셨겠지만, 위 테이블에서 “동물코드"라는 식별자(ID 또는 키)가 있었습니다. 이는 각 동물을 식별할 수 있는 고유의(unique) 값으로, 다른 테이블에도 동일하게 존재할 수 있습니다. 예를 들어, “보호자” 테이블이 있다고 합시다. 이 테이블은 [“동물코드", “보호자명"]으로 구성되어 있다고 가정하겠습니다.

그렇다면, “동물" 테이블과 “보호자" 테이블을 합쳐서 하나의 테이블로 보고싶다면 어떻게 해야 할까요? 이 때 사용하는 것이 JOIN 문입니다. 특정 키 값을 기준으로 서로 다른 테이블을 연결한다는 측면에서, 엑셀의 Vlookup과 유사한 기능이라고 생각하시면 됩니다.

JOIN에도 유형이 여러가지가 있는데, 대표적인 것은 두 테이블이 특정 키 값을 동일하게 공유하고 있는 부분을 합치는 방식입니다. 그냥 Join으로도 부르고, Inner Join(교집합)으로도 부릅니다. “동물코드"를 공유하는 부분을 합치고 모든 컬럼을 조회하고 싶다면 아래와 같이 Join 문을 사용할 수 있습니다. (모든 컬럼을 조회하려면 “SELECT *”을 사용합니다)

SELECT * FROM “동물" JOIN “보호자" ON “동물".”동물코드" = “보호자".”동물코드"

다른 구문에 비해 많이 복잡해보이지만, “Join 테이블 On 테이블.키” 구조는 결국 서로 다른 테이블을 동일한 키를 기준으로 합치겠다는 것을 의미합니다.

출처: Pexels

3. SQL 실무 사용 팁 및 노하우

실무에서 자주 사용하는 SQL 쿼리는 무엇이 있을까요? SQL 활용의 목적이 데이터 분석인지, 백엔드 엔지니어링인지 등 직무 유형에 따라 다를 수 있습니다만, 개인적인 경험으로 비추어보면 집계 함수와 WHERE 절, JOIN 절의 활용 빈도가 매우 높습니다. 특히, JOIN 절의 경우 쉽게 와닿지 않기 때문에 모든 SQL 문법 중에서 가장 난이도가 높다고 알려져 있기도 합니다.

JOIN 문을 상대적으로 쉽게 이해하고 사용할 수 있는 방법은 테이블 간의 관계를 표현하고 있는 다이어그램인 ERD(Entity-Relationship Diagram)을 수시로 살펴보는 것입니다. ERD란 서로 다른 테이블끼리 어떤 키 값(ID)을 공유하고 있는지, 서로 차이가 나는 컬럼은 무엇인지 등을 한 눈에 살펴볼 수 있는 RDB 정의서의 일종이라고 볼 수 있습니다.

DBdiagram 등의 툴을 사용해서 직접 테이블 간 관계를 정의하면서 여러 개의 테이블을 생성해보시는 것도 권장합니다.

데이터 엔지니어, 백엔드 엔지니어 등 SQL을 사용하는 개발자가 되기 위해서는 꾸준한 노력을 통해 SQL 스킬을 높여야 합니다. 오늘 말씀드린 SQL의 기본적인 공부 순서를 찾아보고, 자신에게 맞는 방법을 찾아 나가야 하는데요. 혼자서 헤쳐 나가기 어렵다면 국비지원 교육 등을 수료하는 것도 좋은 방법입니다.

이와 관련해, 패스트캠퍼스에서 제공하는 SQL 입문 강의에서는 이 콘텐츠에서 소개해드린 모든 SQL 구문에 대한 교육을 자세하게 제공하고 있을 뿐만 아니라, 실무적 관점에서 SQL을 사용하는 방법을 교육하고 있습니다.

1~3주차 동안에는 기본부터 심화까지의 SQL 문법을 숙달한 후, 4주차부터 Retention, DAU 등 실제 비즈니스 데이터를 정의 및 계산하는 프로젝트를 진행할 수 있습니다. 나아가, Hackerrank의 SQL 테스트를 다양하게 풀어보면서 코딩 테스트까지 대비할 수 있다고 하니 SQL 입문자라면 해당 과정에 참여해 보시기를 추천드리겠습니다.


다른 인사이트가 더 궁금하다면

이 글과 연관된 주제의 추천 강의