SQL - SELECT 문법 차근차근 이해하기
지난 글 INSERT, UPDATE, DELETE 에서 데이터 삽입, 수정, 삭제를 위한 SQL 문을 다뤘다면, 이번 글에서는 SQL 핵심이라고 할 수 있는 SELECT 문을 배워보도록 하겠습니다.
사실, 데이터 분석을 위해 SQL 을 배우려고 하는 대부분의 사람들은 INSERT, UPDATE, DELETE 문을 사용하는 경우는 많이 없습니다. 대부분 분석을 위해서는 데이터베이스에 이미 쌓여있는 데이터를 가지고 결과값을 뽑아내는 작업을 하기 때문입니다. 데이터를 삽입, 수정, 삭제하는 작업은 데이터 엔지니어들이 하는 작업인 경우가 대다수입니다. 하지만, 데이터가 어떻게 쌓이고, 어떤 이유에서 이런 형태로 저장되어있는지를 알아야지만, 효과적인 된 데이터 분석을 진행할 수 있습니다. 지금까지 배운 것들을 이를 위한 기반 작업이라고 할 수 있습니다. 지금부터는 본격적으로 데이터 분석에 자주 활용하는 SQL 을 배워보도록 합시다.
SELECT 문은 데이터를 데이터베이스에서 가져오는 요청에 사용됩니다. 기본 SQL 문법은 아래와 같이 구성되어있습니다.
SELECT 다음에 오는 이름들은 선택한 테이블 중 가져오고 싶은 열을 명시하는 것입니다. 예를 들어, 사용자 테이블에서 이름, 주민등록번호 만 가져온다고 가정합시다. 여기에 해당하는 SELECT 문은 다음과 같습니다.
만약, 테이블에 있는 모든 열의 데이터를 가져오고 싶다면 어떻게 해야할까요? SQL 에서는 모든 것을 뜻하는 특별한 문자가 있습니다. 바로 별표(*) 입니다. 모든 열을 하나씩 나열하는 대신에 * 로 대체해서 SQL 을 작성하면 테이블 모든 열의 정보가 선택되어 돌아옵니다.
SELECT 문 역시 UPDATE 와 마찬가지로 조건을 넣을 수 있습니다. SELECT 문 뒤에서 어떤 열의 정보를 가져올지 선택했다면, WHERE 문에서는 어떤 행을 선택할지 결정합니다.
예를 들어, 사용자 테이블에서 키가 180 이상인 사용자의 모든 정보를 가져오고 싶다고 가정합니다. 이때 필요한 SELECT 문은 아래와 같습니다.
TablePlus 를 이용해서 데이터를 살펴볼때, LIMIT 버튼을 이용해 가져오고 싶은 행의 갯수를 제한했던 것을 기억하실 겁니다. SQL 은 SELECT 문 마지막에 LIMIT 키워드를 추가함으로써, 행 개수를 제한하는 요청을 DBMS 에 보낼 수 있습니다. 문법은 아래와 같습니다.
예를 들어, 사용자 테이블에서 모든 열의 정보를 10개만 가져오고 싶다고 가정합시다. 이때 SELECT 문은 다음과 같습니다.
물론, 여기에 조건문을 걸어서 함께 요청을 할 수도 있습니다. 예를 들면, 사용자 테이블에서 키가 180 인 사용자의 모든 열의 정보를 10개만 가져오고 싶을때는 아래와 같은 SELECT 문을 작성하면 됩니다.
SELECT 문을 통해 데이터를 뽑았을때, 어떤 순서대로 데이터가 나열되는 걸까요? 또, LIMIT 을 활용해서 10개의 행만 선택했을때는 어떤 기준에서 선택된 걸까요? 기본적으로는 테이블에 삽입된 순서를 기반으로 합니다. 오래전에 들어온 데이터가 먼저 선택되는 정책을 사용하고 있습니다. SQL 은 ORDER BY 키워드를 제공함으로써, 데이터가 나열되고 선택되는 순서를 지정할 수 있습니다.
ORDER BY 키워드 문법은 아래와 같습니다.
데이터를 나열할때 순서를 정하기위해서는 우선순위 정책이 존재해야합니다. SQL 에서 ASC 는 오름차순을 의미하는 영어인 ASCENDING 의 약자, DESC 는 내림차순을 의미하는 DESCENDING 의 약자입니다. ORER BY 뒤에 순서를 정하는 기준이 되는 열의 이름을 넣고, 그 뒤에 오름차순, 내림차순 순서를 정해주면 됩니다. 숫자 데이터 타입의 경우, 오름차순일 경우 가장 작은 숫자가 맨 위에 위치하게 될 것입니다. 문자의 경우에도 알파벳이나 한글 가나다 순서를 따른다고 생각하시면 됩니다. 한글 이름이 있는 열에 대해 오름차순을 입력하면 '가'로 시작하는 사람의 이름이 제일 처음에 위치하게 됩니다.
간단한 예를 들어 봅시다. 사용자 테이블에서 데이터를 가져오는데 키를 오름차순으로 나열해서 가져오고 싶다고 가정합시다. 이때 SELECT 문은 다음과 같습니다.
여기에 위에서 배운 조건문도 함께 추가할 수 있습니다. 사용자 테이블에서 180이상인 사용자 데이터를 가져오는데 키가 큰 순서대로 (내림차순)으로 정렬해서 가져오라는 SQL 문은 다음과 같습니다.
여기에 LIMIT 까지 추가할 수 있습니다. 사용자 테이블에서 180 이하인 사용자 데이터를 가져오는데 키가 큰 순서대로 정렬한 다음 10명의 데이터만 가져오라는 SQL 문은 다음과 같습니다. 이렇게 되면, 180 이하인 사람중에서 키가 제일 큰 사용자 10명이 선택될 것 입니다.
오늘 글에서는 SELECT 문에 대한 기본 문법에 대해 배워보았습니다. SELECT FROM 으로 시작된 문법은, 조건인 WHERE, 순서를 정하는 ORDER BY, 개수를 제한하는 LIMIT 과 함께 쓰여 우리가 원하는 정보를 선택할 수 있게 해줍니다.
여기서 주의할 점은 이 키워드들의 순서입니다. 항상 SELECT ~ FROM 키워드는 가장 먼저 나와야 하며, 그 뒤를 이어서 WHERE, 그 다음이 ORDER BY, 마지막이 LIMIT 입니다. 전체 문법을 한번 정리해보면 아래와 같습니다.
눈으로 봤을때는 다 이해가 되는것처럼 보이지만, 연습을 통해 익히는게 중요합니다. 테이블에 데이터 삽입 글에서 이미 많은 양의 데이터를 사용자 테이블에 넣어두었습니다. 이 테이블을 활용해 아래 요구사항들을 SQL 로 만들어 보세요.
스터디파이 참가자들은 아래 질문이 주간 과제입니다 :)
가장 나이가 어린 10명의 여자들의 이름은 누구일까?
키가 160 이상인 사용자들 중 키가 제일 작은 10명 사람들의 주민번호는 무엇일까?
키가 180 미만인 남자 중 키가 제일 제일 큰 10명 사람들의 나이는 어떻게 될까?