테이블 구조를 탐색하는 PRAGMA 명령과 SELECT로 열·행·데이터 타입을 확인하는 방법을 익힙니다.
🎯 학습 목표
이 강을 마치면 SQL로 테이블의 구조(열 이름, 데이터 타입, 제약 조건)를 확인하는 방법을 알 수 있습니다. 또한 특정 열만 선택해서 조회하는 방법, 행 수를 세는 방법, 데이터의 전체적인 형태를 파악하는 탐색 쿼리를 직접 작성할 수 있습니다. 새로운 데이터베이스를 처음 접할 때 가장 먼저 실행하는 탐색 패턴을 완전히 익히는 것이 이 강의 핵심입니다.
💡 테이블 구조를 먼저 파악해야 하는 이유
이 섹션에서는 데이터를 조회하기 전에 테이블 구조를 파악하는 것이 왜 중요한지 살펴보겠습니다.
실무에서 새로운 데이터베이스에 접속하면, 바로 SELECT 쿼리를 던지기 전에 "이 테이블에 어떤 열이 있지?", "각 열의 데이터 타입은 뭐지?", "어떤 열이 기본 키인가?" 같은 질문부터 해야 합니다. 엉뚱한 열 이름으로 쿼리를 작성했다가 오류가 나거나, 잘못된 타입으로 비교해서 원하는 결과가 나오지 않는 상황을 막기 위해서입니다.
경험 많은 개발자일수록 데이터를 다루기 전에 반드시 구조 파악 단계를 거칩니다. 이번 강에서 배우는 탐색 쿼리는 앞으로 평생 쓰게 될 기본기입니다.
2강에서 만든 샘플 데이터베이스(members, books, orders)가 준비되어 있어야 합니다. 아직 준비가 안 됐다면 2강의 CREATE TABLE과 INSERT 코드를 먼저 실행해 주세요.
🔍 테이블 구조 확인 — PRAGMA
이 섹션에서는 SQLite에서 테이블의 열 정보를 확인하는 PRAGMA 명령을 살펴보겠습니다.
SQLite에서 테이블 구조를 확인하는 명령은 PRAGMA table_info()입니다. 괄호 안에 테이블 이름을 넣으면 해당 테이블의 모든 열 정보가 나타납니다.
PRAGMA table_info(members);
실행하면 다음과 같은 결과가 나타납니다.
| cid | name | type | notnull | dflt_value | pk |
|---|---|---|---|---|---|
| 0 | member_id | INTEGER | 0 | NULL | 1 |
| 1 | name | TEXT | 1 | NULL | 0 |
| 2 | TEXT | 1 | NULL | 0 | |
| 3 | grade | TEXT | 0 | 'REGULAR' | 0 |
| 4 | join_date | TEXT | 0 | NULL | 0 |
각 열의 의미를 살펴보겠습니다. cid는 열의 순서 번호입니다. name은 열 이름입니다. type은 데이터 타입으로, INTEGER(정수), TEXT(문자열), REAL(실수) 등이 있습니다. notnull이 1이면 빈 값(NULL)을 허용하지 않는다는 뜻입니다. dflt_value는 기본값으로, grade 열의 기본값이 'REGULAR'임을 알 수 있습니다. pk가 1이면 기본 키(Primary Key)입니다.
도서 테이블과 주문 테이블도 확인해 봅니다.
PRAGMA table_info(books);
PRAGMA table_info(orders);
MySQL이나 PostgreSQL에서는 PRAGMA 대신 다른 명령을 사용합니다. MySQL은 DESCRIBE 테이블명; 또는 SHOW COLUMNS FROM 테이블명;을 사용하고, PostgreSQL은 d 테이블명 명령을 씁니다. 문법은 달라도 "테이블 구조 파악"이라는 목적은 동일합니다.
📋 원하는 열만 선택하기
이 섹션에서는 SELECT에서 특정 열을 지정해 조회하는 방법을 살펴보겠습니다.
1강에서 SELECT *가 모든 열을 가져온다는 것을 배웠습니다. 그런데 테이블에 열이 수십 개 있을 때 모든 열을 가져오면 불필요한 데이터까지 함께 오기 때문에 속도가 느려집니다. 실무에서는 필요한 열만 명시적으로 지정하는 것이 좋은 습관입니다.
열을 지정할 때는 SELECT 뒤에 열 이름을 콤마(,)로 구분해서 나열합니다.
SELECT name, email
FROM members;
이 쿼리는 members 테이블에서 이름과 이메일만 가져옵니다. 결과에는 member_id, grade, join_date 열은 나타나지 않습니다.
열 순서를 바꿔서 지정할 수도 있습니다. 원래 테이블의 열 순서와 달라도 됩니다.
SELECT email, name, grade
FROM members;
결과에서 열의 순서는 SELECT에 나열한 순서를 따릅니다. 즉, email이 첫 번째 열로, name이 두 번째, grade가 세 번째 열로 나타납니다.
도서 테이블에서 제목과 가격만 가져오는 쿼리도 작성해 봅니다.
SELECT title, price
FROM books;
7권의 책 제목과 가격만 깔끔하게 출력됩니다. 저자, 카테고리, 재고 같은 불필요한 열은 제외되어 결과를 읽기가 훨씬 편합니다.
🔢 행 수 세기와 기본 탐색
이 섹션에서는 테이블에 데이터가 몇 행 있는지 확인하는 방법과 데이터 전체를 훑어보는 탐색 패턴을 살펴보겠습니다.
테이블에 행이 몇 개 있는지 세는 데는 COUNT(*)를 사용합니다. COUNT는 집계 함수의 일종으로, 9강에서 자세히 다루지만 지금은 "행의 개수를 세는 함수"로 이해하면 됩니다.
SELECT COUNT(*) FROM members;
결과로 숫자 5가 나타납니다. members 테이블에 회원이 5명 있다는 뜻입니다.
SELECT COUNT(*) FROM books;
SELECT COUNT(*) FROM orders;
books는 7, orders는 10이 나옵니다. 쿼리 결과가 예상과 맞는지 확인하는 것이 데이터 탐색의 첫 번째 단계입니다.
새로운 데이터베이스를 처음 접할 때 실무에서 가장 많이 사용하는 탐색 패턴을 소개합니다. 이 세 가지 쿼리를 순서대로 실행하는 것이 데이터 탐색의 표준 루틴입니다.
-- 1단계: 행 수 확인
SELECT COUNT(*) FROM members;
-- 2단계: 전체 데이터 훑어보기
SELECT * FROM members;
-- 3단계: 특정 열만 선택해서 보기
SELECT member_id, name, grade FROM members;
이 세 단계를 거치면 테이블의 규모, 데이터의 형태, 관심 있는 열의 값을 빠르게 파악할 수 있습니다.
실제로 orders 테이블의 탐색 루틴을 실행해 봅니다.
SELECT COUNT(*) FROM orders;
SELECT * FROM orders;
SELECT order_id, member_id, book_id, status FROM orders;
세 번째 쿼리에서 status 열을 보면 'DONE', 'CANCEL', 'PENDING' 세 가지 값이 있음을 알 수 있습니다. 이처럼 SELECT로 데이터를 살펴보다 보면 해당 테이블에 어떤 종류의 데이터가 담겨 있는지 자연스럽게 파악됩니다.
🏷️ 열에 별칭 붙이기 — AS
이 섹션에서는 SELECT 결과에서 열 이름을 더 읽기 쉽게 바꾸는 방법을 살펴보겠습니다.
데이터베이스 열 이름은 영문 소문자와 언더스코어로 구성된 경우가 많습니다. 예를 들어 member_id, join_date처럼 기계 친화적인 이름입니다. 결과를 화면에 보여주거나 보고서로 만들 때는 "회원번호", "가입일"처럼 더 읽기 쉬운 이름으로 표시하고 싶을 수 있습니다. 이럴 때 AS 키워드로 열에 별칭(Alias)을 붙일 수 있습니다.
SELECT
member_id AS 회원번호,
name AS 이름,
grade AS 등급,
join_date AS 가입일
FROM members;
결과창에서 열 헤더가 영문 대신 한국어로 표시됩니다. 원본 테이블의 열 이름이 바뀌는 것이 아니라, 조회 결과에서만 표시 이름이 변경되는 것입니다.
별칭에 공백이 있을 때는 따옴표로 감쌉니다.
SELECT
title AS "도서 제목",
price AS "판매 가격"
FROM books;
AS 키워드는 생략할 수도 있어서 title "도서 제목"처럼 쓸 수 있지만, 가독성을 위해 명시적으로 AS를 쓰는 것이 권장됩니다.
📝 핵심 요약
이번 강에서 배운 내용을 정리하겠습니다.
| 명령/문법 | 역할 | 예시 |
|---|---|---|
| PRAGMA table_info(테이블명) | 열 이름·타입·기본키 확인 | PRAGMA table_info(members); |
| SELECT 열1, 열2 FROM 테이블 | 특정 열만 조회 | SELECT name, email FROM members; |
| SELECT COUNT(*) FROM 테이블 | 전체 행 수 확인 | SELECT COUNT(*) FROM books; |
| 열명 AS 별칭 | 결과 헤더 이름 변경 | SELECT name AS 이름 FROM members; |
테이블 구조 파악 → 전체 데이터 훑기 → 필요한 열 선택이라는 탐색 루틴은 앞으로 모든 SQL 작업의 출발점이 됩니다. 새로운 테이블을 만날 때마다 이 세 단계를 반드시 거치는 습관을 들이세요.
다음 4강에서는 SELECT의 핵심 기능을 본격적으로 배웁니다. 여러 테이블에서 데이터를 조회하는 방법, 열에 계산식을 적용하는 방법, 리터럴 값을 결과에 포함시키는 방법 등 SELECT가 얼마나 강력한 도구인지 직접 확인해 보겠습니다.
관련 주제
- PRAGMA 명령
- 테이블 구조 확인
- 열 데이터 타입
- 기본 키
- 탐색 쿼리
- 개발·프로그래밍
- 개발·프로그래밍 강의
- SQL·데이터베이스 입문 24강
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
SQL·데이터베이스 입문 24강
이 강의가 속한 시리즈는 총 8강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
