SQL 문장을 읽는 법부터 시작하기
SQL은 데이터베이스에 보내는 요청 문장입니다
SQL을 처음 보면 영어 같기도 하고, 암호 같기도 합니다. 하지만 처음부터 모든 문법을 외울 필요는 없습니다. 먼저 SQL을 "데이터베이스에 보내는 요청 문장"으로 읽으면 됩니다.
예를 들어 우리가 하고 싶은 말은 이런 문장입니다.
고객 장부에서 고객 이름과 전화번호를 보여 주세요.
SQL로 쓰면 이렇게 됩니다.
SELECT customer_name, phone
FROM customers;이 문장은 두 부분으로 나눠 읽을 수 있습니다.
SELECT customer_name, phone: 고객 이름과 전화번호를 보여 주세요FROM customers: customers 테이블에서 가져오세요
즉 SQL은 대체로 "무엇을 볼지"와 "어디서 가져올지"를 적는 문장입니다. 처음에는 이 두 가지를 구분하는 것만으로도 충분합니다.
앞 장에서 테이블을 장부에 비유했습니다. 그렇다면 SQL은 장부 담당자에게 건네는 요청서입니다. "고객 장부를 열고, 그중 이름과 전화번호 칸만 복사해 보여 주세요"라고 말하는 셈입니다.
AI 생성 이미지
SELECT는 '무엇을 볼지'입니다
SELECT는 조회할 항목을 고르는 말입니다. 엑셀에서 여러 열 중 필요한 열만 선택하는 것과 비슷합니다.
예를 들어 customers 테이블에 다음 컬럼이 있다고 가정해 보겠습니다.
| 컬럼 이름 | 뜻 |
|---|---|
customer_id | 고객 번호 |
customer_name | 고객 이름 |
phone | 전화번호 |
city | 거주 도시 |
joined_at | 가입일 |
먼저 전체 컬럼을 보고 싶다면 별표를 사용합니다.
무엇을 하려는 문장인지 먼저 풀어 쓰면 다음과 같습니다.
customers 테이블에서 모든 컬럼을 보여 주세요.
SELECT *
FROM customers;예상 결과는 이런 모습입니다.
| customer_id | customer_name | phone | city | joined_at |
|---|---|---|---|---|
| 1 | 김민지 | 010-1111-2222 | 서울 | 2026-01-10 |
| 2 | 박준호 | 010-3333-4444 | 부산 | 2026-01-12 |
| 3 | 이서연 | 010-5555-6666 | 서울 | 2026-01-15 |
여기서 *는 "전부"라는 뜻입니다. 모든 컬럼을 한꺼번에 확인할 때 편리합니다. 새 테이블을 처음 볼 때는 SELECT *로 전체 모양을 훑어보면 좋습니다.
하지만 실무에서는 항상 전체 컬럼이 필요한 것은 아닙니다. 고객 이름과 도시만 필요하다면 필요한 컬럼만 적습니다.
customers 테이블에서 고객 이름과 도시만 보여 주세요.
SELECT customer_name, city
FROM customers;결과는 이렇게 줄어듭니다.
| customer_name | city |
|---|---|
| 김민지 | 서울 |
| 박준호 | 부산 |
| 이서연 | 서울 |
이 차이가 중요합니다.
SELECT *: 모든 컬럼을 보여 줍니다.SELECT customer_name, city: 지정한 컬럼만 보여 줍니다.
처음에는 SELECT *가 편합니다. 하지만 보고서나 업무 확인용 SQL을 만들 때는 필요한 컬럼만 적는 습관이 좋습니다. 결과 화면이 깔끔해지고, 다른 사람이 SQL을 읽을 때도 "무엇을 보려는지" 바로 알 수 있습니다.
FROM은 '어디서 가져올지'입니다
FROM은 데이터를 가져올 테이블을 지정합니다. 장부 비유로 말하면 "어느 장부를 펼칠지" 정하는 부분입니다.
다음 문장을 보겠습니다.
SELECT customer_name, phone
FROM customers;읽는 순서는 이렇게 잡으면 쉽습니다.
FROM customers: customers 테이블에서SELECT customer_name, phone: 고객 이름과 전화번호를 보여 준다
SQL 문장은 SELECT가 먼저 나오지만, 사람이 이해할 때는 FROM을 먼저 보면 더 편할 때가 많습니다. "어느 장부에서 가져오지?"를 먼저 확인하고, 그다음 "어떤 항목을 보지?"를 확인하는 방식입니다.
테이블 이름을 잘못 쓰면 데이터베이스는 어디서 가져와야 할지 모릅니다.
SELECT customer_name
FROM customer;만약 실제 테이블 이름이 customers인데 customer라고 쓰면 오류가 납니다. 초보자에게 흔한 실수입니다. PostgreSQL은 customer와 customers를 다른 이름으로 봅니다. 사람에게는 비슷해 보여도 데이터베이스에는 완전히 다른 장부 이름입니다.
WHERE는 '어떤 조건으로 고를지'입니다
WHERE는 조건입니다. 전체 고객 중 일부만 보고 싶을 때 사용합니다.
예를 들어 "서울 고객만 보고 싶다"고 해 보겠습니다.
customers 테이블에서 도시가 서울인 고객의 이름과 전화번호를 보여 주세요.
SELECT customer_name, phone
FROM customers
WHERE city = '서울';결과는 다음처럼 조건에 맞는 행만 남습니다.
| customer_name | phone |
|---|---|
| 김민지 | 010-1111-2222 |
| 이서연 | 010-5555-6666 |
이 문장은 세 부분으로 읽으면 됩니다.
SELECT customer_name, phone: 고객 이름과 전화번호를 보여 주세요FROM customers: customers 테이블에서 가져오세요WHERE city = '서울': 도시가 서울인 행만 고르세요
여기서 '서울'처럼 글자 값을 비교할 때는 작은따옴표를 사용합니다. 숫자는 보통 따옴표 없이 씁니다.
예를 들어 고객 번호가 1인 고객을 찾는다면 이렇게 씁니다.
customers 테이블에서 고객 번호가 1인 고객을 보여 주세요.
SELECT customer_id, customer_name, phone
FROM customers
WHERE customer_id = 1;정리하면 이렇습니다.
글자 값:
'서울','김민지'처럼 작은따옴표 사용숫자 값:
1,100,25000처럼 따옴표 없이 사용
아직 복잡한 조건을 만들 필요는 없습니다. 지금은 WHERE를 "전체 장부에서 원하는 줄만 남기는 조건"으로 이해하면 됩니다.
ORDER BY는 '어떤 순서로 보여줄지'입니다
ORDER BY는 결과를 정렬하는 말입니다. 엑셀에서 특정 열을 기준으로 오름차순이나 내림차순 정렬하는 기능과 비슷합니다.
예를 들어 가입일이 빠른 고객부터 보고 싶다고 해 보겠습니다.
customers 테이블에서 고객 이름과 가입일을 가입일이 빠른 순서로 보여 주세요.
SELECT customer_name, joined_at
FROM customers
ORDER BY joined_at;결과는 가입일 기준으로 정렬됩니다.
| customer_name | joined_at |
|---|---|
| 김민지 | 2026-01-10 |
| 박준호 | 2026-01-12 |
| 이서연 | 2026-01-15 |
기본 정렬은 작은 값에서 큰 값으로 가는 오름차순입니다. 날짜라면 오래된 날짜에서 최근 날짜 순서입니다. 숫자라면 작은 숫자에서 큰 숫자 순서입니다.
반대로 최근 가입 고객부터 보고 싶다면 DESC를 붙입니다.
customers 테이블에서 고객 이름과 가입일을 최근 가입일 순서로 보여 주세요.
SELECT customer_name, joined_at
FROM customers
ORDER BY joined_at DESC;| customer_name | joined_at |
|---|---|
| 이서연 | 2026-01-15 |
| 박준호 | 2026-01-12 |
| 김민지 | 2026-01-10 |
DESC는 내림차순입니다. 반대로 오름차순은 ASC라고 쓸 수 있습니다.
ORDER BY joined_at ASC;다만 ASC는 기본값이라 생략해도 됩니다.
네 가지 조각을 한 문장으로 읽기
이제 SELECT, FROM, WHERE, ORDER BY를 한 번에 묶어 보겠습니다.
customers 테이블에서 도시가 서울인 고객의 이름과 가입일을 최근 가입일 순서로 보여 주세요.
SELECT customer_name, joined_at
FROM customers
WHERE city = '서울'
ORDER BY joined_at DESC;이 SQL은 이렇게 읽습니다.
| SQL 조각 | 쉬운 뜻 |
|---|---|
SELECT customer_name, joined_at | 고객 이름과 가입일을 보여 주세요 |
FROM customers | customers 테이블에서 가져오세요 |
WHERE city = '서울' | 도시가 서울인 행만 고르세요 |
ORDER BY joined_at DESC | 가입일이 최근인 순서로 정렬하세요 |
처음 SQL을 읽을 때는 영어 단어 하나하나를 해석하려 하지 않아도 됩니다. 네 가지 질문으로 바꿔 읽으면 됩니다.
무엇을 볼 것인가? →
SELECT어디서 가져올 것인가? →
FROM어떤 조건으로 고를 것인가? →
WHERE어떤 순서로 보여줄 것인가? →
ORDER BY
이 네 질문을 떠올리면 SQL 문장이 훨씬 덜 낯설어집니다.
세미콜론은 문장의 마침표입니다
SQL 문장 끝에는 보통 세미콜론 ;을 붙입니다.
SELECT customer_name
FROM customers;세미콜론은 "이 SQL 문장은 여기서 끝입니다"라는 표시입니다. 한국어 문장의 마침표와 비슷합니다.
pgAdmin이나 DBeaver에서는 SQL 한 문장만 실행할 때 세미콜론이 없어도 실행되는 경우가 있습니다. 하지만 여러 문장을 함께 적으면 세미콜론이 중요해집니다.
SELECT customer_name
FROM customers;
SELECT order_id, order_date
FROM orders;위 예시는 두 개의 SQL 문장입니다. 첫 번째는 고객 이름을 보고, 두 번째는 주문 번호와 주문일을 봅니다. 세미콜론이 없으면 도구나 상황에 따라 어디까지가 한 문장인지 헷갈릴 수 있습니다.
초보자일수록 세미콜론을 붙이는 습관을 들이는 것이 좋습니다.
대문자와 소문자는 읽기 쉽게 나누는 약속입니다
PostgreSQL에서 SELECT, select, Select는 대체로 같은 명령으로 인식됩니다.
select customer_name
from customers;위 문장도 실행될 수 있습니다. 하지만 책과 실무 예제에서는 보통 SQL 명령어를 대문자로 씁니다.
SELECT customer_name
FROM customers;이유는 단순합니다. 읽기 쉽기 때문입니다.
SELECT,FROM,WHERE,ORDER BY: SQL 명령어이므로 대문자customers,customer_name,city: 테이블과 컬럼 이름이므로 소문자'서울','김민지': 실제 데이터 값
이렇게 쓰면 문장의 뼈대와 실제 이름이 눈에 잘 구분됩니다.
다만 테이블이나 컬럼 이름을 만들 때 큰따옴표를 사용해 대문자나 공백이 들어간 이름을 만들면 나중에 매번 큰따옴표를 써야 하는 불편이 생길 수 있습니다. 초보자는 테이블과 컬럼 이름을 소문자 영어와 밑줄 조합으로 쓰는 것이 안전합니다.
좋은 예시는 다음과 같습니다.
customer_name
order_date
product_id처음부터 이런 이름을 사용하면 SQL을 읽고 쓰기가 훨씬 편해집니다.
들여쓰기는 데이터베이스가 아니라 사람을 위한 것입니다
SQL은 한 줄로 써도 실행됩니다.
SELECT customer_name, joined_at FROM customers WHERE city = '서울' ORDER BY joined_at DESC;하지만 이렇게 쓰면 초보자가 읽기 어렵습니다. 그래서 보통 줄을 나눕니다.
SELECT customer_name, joined_at
FROM customers
WHERE city = '서울'
ORDER BY joined_at DESC;결과는 같지만 두 번째가 훨씬 읽기 쉽습니다. 각 줄이 하나의 역할을 맡고 있기 때문입니다.
복잡한 SQL을 한 줄로 쓰면 긴 영수증처럼 보입니다. 반대로 줄을 나누면 항목별로 정리된 장부처럼 보입니다. SQL을 잘 쓰는 사람은 멋지게 줄이는 사람이 아니라, 나중에 다시 봐도 이해되게 쓰는 사람입니다.
초보자에게 추천하는 기본 모양은 다음과 같습니다.
SELECT 보고_싶은_컬럼
FROM 테이블_이름
WHERE 조건
ORDER BY 정렬_기준;WHERE와 ORDER BY는 필요할 때만 씁니다. 모든 SQL에 반드시 들어가야 하는 것은 아닙니다. 하지만 SELECT와 FROM은 조회 SQL의 기본 뼈대입니다.
오류 메시지가 나와도 먼저 네 곳만 확인합니다
SQL을 쓰다 보면 오류 메시지를 자주 만납니다. 오류가 나오면 "나는 SQL에 소질이 없나?"라고 생각하기 쉽습니다. 그렇지 않습니다. SQL 오류의 상당수는 작은 오타에서 시작합니다.
처음에는 아래 순서로 점검하면 됩니다.
1. 테이블 이름을 확인합니다
SELECT customer_name
FROM customer;실제 테이블이 customers라면 위 SQL은 실패합니다. pgAdmin이나 DBeaver의 왼쪽 목록에서 테이블 이름을 다시 확인합니다. 단수와 복수, 밑줄 위치를 특히 조심합니다.
2. 컬럼 이름을 확인합니다
SELECT name
FROM customers;실제 컬럼 이름이 customer_name인데 name이라고 쓰면 오류가 납니다. 테이블의 Columns 목록을 열어 정확한 컬럼 이름을 확인합니다.
3. 따옴표를 확인합니다
SELECT customer_name
FROM customers
WHERE city = 서울;위 문장은 문제가 있습니다. 서울은 글자 값이므로 작은따옴표로 감싸야 합니다.
SELECT customer_name
FROM customers
WHERE city = '서울';글자 값은 작은따옴표, 테이블이나 컬럼 이름은 보통 따옴표 없이 쓴다고 기억하면 됩니다.
4. 쉼표를 확인합니다
컬럼을 여러 개 적을 때는 컬럼 사이에 쉼표가 필요합니다.
SELECT customer_name phone
FROM customers;원래 의도가 customer_name과 phone 두 컬럼을 모두 보는 것이라면, 위 문장에는 쉼표가 빠져 있습니다. 이런 실수는 오류가 나기도 하고, 상황에 따라서는 예상과 다르게 해석되어 결과 컬럼이 하나만 보일 수도 있습니다.
따라서 여러 컬럼을 볼 때는 컬럼과 컬럼 사이에 쉼표가 있는지 꼭 확인해야 합니다.
SELECT customer_name, phone
FROM customers;쉼표는 "이 항목 다음에 또 다른 항목이 있습니다"라는 표시입니다. 엑셀에서 열 이름을 나열할 때 구분 기호를 넣는다고 생각하면 됩니다.
지금은 읽을 수 있으면 충분합니다
이번 장의 목표는 SQL을 완벽하게 쓰는 것이 아닙니다. SQL 문장을 봤을 때 겁내지 않고 구조를 읽는 것입니다.
다음 네 가지만 기억하면 됩니다.
| SQL | 쉬운 뜻 |
|---|---|
SELECT | 무엇을 볼지 |
FROM | 어디서 가져올지 |
WHERE | 어떤 조건으로 고를지 |
ORDER BY | 어떤 순서로 보여줄지 |
그리고 조회 문장을 쓸 때는 다음 습관을 가져가면 좋습니다.
처음 보는 테이블은
SELECT *로 전체 모양을 확인합니다.실제 업무에서는 필요한 컬럼만 골라 봅니다.
SQL 문장 끝에는 세미콜론을 붙입니다.
명령어는 대문자, 테이블과 컬럼 이름은 소문자로 쓰면 읽기 쉽습니다.
오류가 나거나 결과가 이상하면 테이블 이름, 컬럼 이름, 따옴표, 쉼표부터 확인합니다.
SQL은 외워야 할 주문이 아닙니다. 업무 데이터를 보기 위한 요청 문장입니다. "무엇을, 어디서, 어떤 조건으로, 어떤 순서로"라는 네 질문으로 읽기 시작하면 됩니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.