상세 컨텐츠

본문 제목

SELECT로 데이터 조회 직접 해보기 — 5단계 SQL 실습

서버·개발/코드 노트

by 사이 (SAI) 2026. 8. 2. 11:50

본문

728x90
반응형

SELECT로 데이터를 조회하려면 테이블과 컬럼을 정한 뒤 SELECT·FROM을 쓰고 WHERE·ORDER BY·LIMIT을 차례로 붙이면 됩니다. 2026년 7월 31일 기준 이 글에서는 실제 SQLite 결과까지 확인합니다.

쿼리와 출력은 SQLite 공식 문서를 바탕으로 구성했으며, 결과는 SQLite 3.51.0 메모리 데이터베이스에서 재현했습니다.

이번 실습에서 만들 내용

학생 5명이 들어 있는 students 테이블을 만들고 원하는 데이터만 조회합니다.

SELECT는 데이터베이스에 저장된 데이터를 읽는 명령이며, 실행 결과는 0개 이상의 행으로 나옵니다.

한 행은 학생 한 명을 나타내고, 컬럼은 이름·나이·도시처럼 학생 정보를 나누어 담는 칸입니다.

조회 명령인 SELECT 자체는 테이블의 내용을 변경하지 않습니다.

SELECT 문의 전체 구조

표시할 컬럼과 읽을 테이블을 지정한 뒤 조건, 정렬 기준, 최대 행 수를 차례로 붙입니다.

SELECT 가져올_컬럼
FROM 테이블
WHERE 조건
ORDER BY 정렬_기준 ASC 또는 DESC
LIMIT 가져올_행_수;

WHERE는 조건에 맞는 행만 남기고, ORDER BY는 결과의 순서를 정합니다.

LIMIT은 반환할 행의 최대 개수를 제한하며, 필요한 절만 골라 쓸 수 있습니다.

이 실습은 짧은 쿼리부터 시작해 절을 하나씩 추가합니다.

SELECT에서 WHERE·ORDER BY·LIMIT으로 이어지는 쿼리 작성 순서

실습에 필요한 준비물

설치 없이 연습할 때는 SQLite Fiddle의 SQL 입력 화면을 사용할 수 있습니다.

2026년 7월 31일 기준 SQLite 프로젝트 도메인의 편집 화면에서 Run, Ctrl+Enter 실행 안내를 확인했습니다.

온라인 도구에는 실제 개인정보나 회사 자료를 넣지 않고 아래 샘플 데이터만 사용합니다.

다른 데이터베이스 제품에서는 오류 문구나 일부 동작이 달라질 수 있으므로 이번 결과는 SQLite를 기준으로 확인합니다.

DROP TABLE IF EXISTS students;

CREATE TABLE students (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  age INTEGER NOT NULL,
  city TEXT NOT NULL
);

INSERT INTO students (id, name, age, city) VALUES
  (1, '민준', 20, '서울'),
  (2, '서연', 22, '부산'),
  (3, '지우', 19, '서울'),
  (4, '하준', 21, '대전'),
  (5, '수빈', 23, '부산');

DROP TABLE IF EXISTS부터 전체 코드를 실행하고 오류가 없으면 예제 테이블 준비가 끝납니다.

문자열 값은 '서울'처럼 작은따옴표로 감쌉니다.

브라우저 SQL 편집기에 students 테이블 생성 코드를 입력한 화면

728x90

SELECT를 5단계로 실행하기

각 단계에서 쿼리를 실행한 뒤 바로 아래의 재현 결과와 비교할 수 있습니다.

1단계. 모든 컬럼 조회하기

테이블 전체를 확인하려면 SELECT *를 실행합니다.

SELECT * FROM students;

*는 테이블에 있는 모든 컬럼을 결과에 포함한다는 뜻입니다.

SQLite 3.51.0에서 재현한 결과는 아래와 같습니다.

id | name | age | city
1  | 민준 | 20  | 서울
2  | 서연 | 22  | 부산
3  | 지우 | 19  | 서울
4  | 하준 | 21  | 대전
5  | 수빈 | 23  | 부산

이번에는 위와 같은 순서로 출력됐지만, ORDER BY가 없는 결과의 행 순서는 보장되지 않습니다.


2단계. 필요한 컬럼만 조회하기

이름과 도시만 필요하면 두 컬럼을 쉼표로 나열합니다.

SELECT name, city
FROM students;

결과에는 지정한 컬럼만 쿼리에 적은 순서대로 표시됩니다.

name | city
민준 | 서울
서연 | 부산
지우 | 서울
하준 | 대전
수빈 | 부산

개인적으로는 기초 실습 단계부터 *와 필요한 컬럼을 직접 적는 방식을 모두 익혀 두는 편이 좋다고 생각합니다.

컬럼을 직접 적어 두면 어떤 데이터가 결과에 나오는지 코드만 보고도 파악하기 편합니다.


3단계. WHERE로 원하는 행만 고르기

서울에 사는 학생만 조회하려면 WHERE 뒤에 도시 조건을 적습니다.

SELECT id, name, age, city
FROM students
WHERE city = '서울';

WHERE는 각 행이 조건을 만족하는지 확인한 뒤 참인 행만 결과에 남깁니다.

id | name | age | city
1  | 민준 | 20  | 서울
3  | 지우 | 19  | 서울

숫자는 age = 20처럼 쓰고, 문자열은 city = '서울'처럼 작은따옴표로 감쌉니다.

WHERE 조건으로 서울 학생 두 명만 남은 SQL 결과 화면


4단계. ORDER BY로 결과 정렬하기

나이가 많은 학생부터 확인하려면 나이 컬럼을 내림차순으로 정렬합니다.

SELECT id, name, age
FROM students
ORDER BY age DESC;

DESC는 큰 값부터, ASC는 작은 값부터 정렬합니다. ASC는 생략할 수 있습니다.

id | name | age
5  | 수빈 | 23
2  | 서연 | 22
4  | 하준 | 21
1  | 민준 | 20
3  | 지우 | 19

같은 값이 여러 개면 ORDER BY age DESC, name ASC처럼 정렬 기준을 더 적을 수 있습니다.


5단계. LIMIT으로 행 수 제한하기

나이가 많은 학생 3명만 조회하려면 정렬한 결과에 LIMIT 3을 붙입니다.

SELECT id, name, age
FROM students
ORDER BY age DESC
LIMIT 3;

LIMIT 3은 결과를 최대 3행까지만 반환합니다.

id | name | age
5  | 수빈 | 23
2  | 서연 | 22
4  | 하준 | 21

항상 같은 결과를 얻으려면 LIMIT만 쓰지 말고 ORDER BY로 먼저 순서를 정해야 합니다.

ORDER BY와 LIMIT으로 나이가 많은 학생 세 명을 조회한 결과 화면

반응형

자주 막히는 부분

오류 문구는 SQLite 3.51.0에서 재현했습니다. 온라인 편집기에서는 줄 번호나 추가 설명이 함께 표시될 수 있습니다.

키워드와 컬럼 이름 오타

SELECTSELEC로 잘못 쓰면 해당 단어 근처에서 문법 오류가 발생합니다.

SELEC * FROM students;

near "SELEC": syntax error

존재하지 않는 nmae 컬럼을 조회하면 다음과 같은 오류가 발생합니다. name으로 고치면 됩니다.

SELECT nmae FROM students;

no such column: nmae

테이블을 찾지 못하는 오류

studentstudents는 서로 다른 이름이므로 실제 테이블 이름을 정확히 적습니다.

SELECT * FROM student;

no such table: student

샘플 생성 코드를 아직 실행하지 않았을 때도 같은 오류가 나타날 수 있습니다.

문자열의 작은따옴표 누락

문자열의 작은따옴표를 닫지 않으면 다음과 같은 오류가 발생합니다.

SELECT *
FROM students
WHERE city = '서울;

unrecognized token: "'서울;"

조건을 WHERE city = '서울';로 고친 뒤 모든 SQL 문장 끝에 세미콜론을 붙이는 습관을 들이는 편이 좋습니다.

세미콜론이 없을 때에는 SQLite CLI와 온라인 편집기의 동작이 다를 수 있어 항상 같은 오류가 발생한다고 단정하기 어렵습니다.

준비 코드를 반복 실행한 경우

DROP TABLE IF EXISTS students; 없이 테이블을 다시 만들면 table students already exists 오류가 날 수 있습니다.

INSERT만 다시 실행하면 같은 id 때문에 UNIQUE constraint failed: students.id 오류가 발생할 수 있습니다.

처음부터 다시 실습하려면 준비 코드 전체를 실행해 테이블을 초기화합니다.


다음 실습으로 확장하기

먼저 조건을 WHERE city = '부산'으로 바꿔 서연과 수빈이 조회되는지 확인합니다.

이어서 ORDER BY age ASC LIMIT 2를 적용해 나이가 어린 학생 두 명을 조회합니다.

마지막으로 실행한 쿼리와 결과를 함께 기록한 뒤 개수·합계·평균과 그룹 집계 실습으로 범위를 넓힙니다.

728x90
반응형

관련글 더보기

댓글 영역