SELECT로 데이터 조회하기
6강. SELECT로 데이터 조회하기
1. 이번 강의에서 해결할 문제
SELECT *만 사용하면 필요 없는 데이터까지 가져오고 열 추가에 결과 구조가 바뀝니다. 질문에 필요한 열과 계산 결과만 명시합니다.
2. 학습 목표
3. 핵심 개념
SELECT 목록은 결과 열, FROM은 행의 출처를 정합니다. SQL의 논리적 처리 순서는 작성 순서와 다를 수 있지만 이번 단계에서는 FROM에서 행을 읽고 SELECT 표현식으로 결과 열을 만든다고 이해합니다.
조회는 저장된 원본을 화면에 그대로 복사하는 작업이 아니라, 질문에 맞는 **결과 집합(result set)**을 새로 만드는 작업입니다. 결과 집합도 행과 열 모양이지만 쿼리가 끝난 뒤 테이블로 자동 저장되지는 않습니다.
용어 정리
| 용어 | 역할 | 예 |
|---|---|---|
SELECT 목록 | 결과에 보여 줄 열과 계산식 선택 | username, duration_seconds / 60.0 |
FROM | 원본 행을 읽을 테이블 선택 | FROM players |
| 별칭(alias) | 결과 열에 읽기 쉬운 임시 이름 부여 | AS player_name |
| 리터럴 | 쿼리에 직접 작성한 고정값 | 60.0, 'active' |
| 표현식 | 열·리터럴·함수를 조합한 계산 | ROUND(duration_seconds / 60.0, 1) |
가장 작은 조회부터 확인하기
SELECT 120 AS score, 120 + 30 AS score_after_bonus;
테이블이 없어도 한 행을 만들 수 있습니다. 첫 결과 열은 120이고, 둘째 열은 계산 결과 150입니다. AS는 저장된 값을 바꾸지 않고 이번 결과에서만 열 이름을 정합니다.
4. 단계별 SQL 예시
대상 테이블: players, games (읽기 전용)
파일 경로: C:\dev\game-ranking-db\sql\06-select.sql
시작 전에는 4강에서 테이블을 만들고 5강에서 샘플 행을 넣어 두어야 합니다. 이 파일은 INSERT, UPDATE, DELETE를 포함하지 않으므로 실행 전후 원본 행은 같습니다.
SELECT
player_id,
username AS player_name,
region,
created_at
FROM players;
SELECT
game_id,
mode,
duration_seconds,
ROUND(duration_seconds / 60.0, 1) AS duration_minutes
FROM games;
쿼리를 한 줄씩 이해하기
첫 쿼리의 흐름:
FROM players가 플레이어 테이블의 각 행을 읽습니다.player_id,username,region,created_at만 결과 열로 선택합니다.username AS player_name은 결과 헤더만player_name으로 바꿉니다. 테이블 열 이름은 여전히username입니다.WHERE가 없으므로 현재 저장된 모든 플레이어 행이 결과에 포함됩니다.
둘째 쿼리의 흐름:
FROM games가 경기 행을 읽습니다.- 각 행의
duration_seconds를60.0으로 나눠 분 단위 값을 만듭니다. ROUND(..., 1)이 소수점 첫째 자리까지 표시할 새 값을 계산합니다.- 계산된 값은
duration_minutes결과 열에 보이지만 원본duration_seconds는 변경되지 않습니다.
sqlite3 -header -box .\data\game_ranking.db ".read .\sql\06-select.sql"
실행 결과 읽기
5강 샘플 데이터가 다음과 같다고 가정하면:
game_id mode duration_seconds duration_minutes
------- ------ ---------------- ----------------
1 ranked 125 2.1
125 / 60.0은 약 2.0833이고 ROUND(..., 1) 결과가 2.1입니다. 원본 값을 다시 조회하면 duration_seconds는 여전히 125입니다. SELECT가 만든 계산 열과 실제 저장 열을 구분해야 합니다.
5. 쿼리가 동작하는 이유
열을 명시하면 결과 계약이 안정적입니다. AS는 원본 스키마를 바꾸지 않고 결과 열 이름만 지정합니다. 60.0으로 나누어 실수 계산을 유도하고 ROUND로 표시 자릿수를 정합니다.
6. 자주 하는 실수와 안전한 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
다음 강의 연결
지금은 모든 행을 조회했습니다. 7강. WHERE와 비교·논리 연산자에서는 region, 점수, 경기 모드 같은 조건으로 필요한 행만 고릅니다.
SELECT로 데이터 조회하기 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.