모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

4강 / 전체 8강

SELECT 기초

8분 읽기 조회 0

SELECT 문의 실행 구조, 열 계산식, 문자열 연결, 리터럴 값 활용으로 SELECT를 자유롭게 응용합니다.

🎯 학습 목표

이 강을 마치면 SELECT 문이 내부적으로 어떤 순서로 실행되는지 이해할 수 있습니다. 또한 열의 값에 사칙연산을 적용하거나, 두 열을 합쳐 새로운 텍스트를 만들거나, 고정된 값(리터럴)을 결과에 포함시키는 표현식 SELECT를 자유롭게 작성할 수 있게 됩니다. 3강에서 배운 열 선택과 별칭에 이어, 이 강에서 SELECT가 단순 조회를 넘어 데이터 변환 도구로도 활용된다는 것을 체감하게 됩니다.

💡 SELECT 문의 실행 구조

이 섹션에서는 SELECT 문이 어떤 순서로 처리되는지 살펴보겠습니다.

SQL을 처음 배울 때 가장 헷갈리는 부분 중 하나는 "작성하는 순서"와 "실행되는 순서"가 다르다는 점입니다. 우리는 SELECT → FROM → WHERE → ... 순서로 코드를 작성하지만, 데이터베이스 엔진이 실제로 처리하는 순서는 다릅니다.

기본적인 SELECT 문의 실행 순서는 다음과 같습니다. 첫 번째로 FROM이 실행됩니다. 어떤 테이블에서 데이터를 가져올지 결정하는 단계입니다. 두 번째로 WHERE(조건이 있는 경우)가 실행됩니다. FROM으로 가져온 전체 행 중에서 조건에 맞는 행만 필터링합니다. 세 번째로 SELECT가 실행됩니다. 남은 행에서 지정한 열을 선택하거나 표현식을 계산합니다.

이 순서를 이해하면 왜 WHERE 절에서 SELECT에서 정의한 별칭을 사용할 수 없는지 알 수 있습니다. WHERE는 SELECT보다 먼저 실행되기 때문에, SELECT에서 만든 별칭을 WHERE가 아직 알 수 없는 것입니다. 이 점은 나중에 WHERE를 배울 때 자주 만나는 오류의 원인이 됩니다.

가장 기본적인 SELECT-FROM 구조를 다시 한번 정리합니다.

SELECT 열1, 열2, ...
FROM 테이블명;

SQL 키워드는 대소문자를 구분하지 않지만, 가독성을 위해 키워드는 대문자로 쓰는 관례를 따릅니다. 각 절(SELECT, FROM)은 보통 새 줄에 시작하며, 길어지면 들여쓰기로 정렬합니다. 코드의 의미를 명확히 전달하는 서식은 협업에서 매우 중요합니다.

🔢 열에 계산식 적용하기

이 섹션에서는 SELECT에서 열 값에 직접 사칙연산을 적용하는 방법을 살펴보겠습니다.

SELECT는 단순히 저장된 값을 가져오는 것 외에, 열 값에 계산을 적용한 결과를 즉시 반환할 수 있습니다. 원본 데이터를 바꾸지 않고 조회 결과에서만 계산된 값을 보여주는 것입니다.

예를 들어 도서 가격에 10% 할인을 적용한 가격을 계산해 봅니다.

SELECT
  title             AS 도서명,
  price             AS 정가,
  price * 0.9       AS 할인가,
  price - price * 0.9 AS 할인금액
FROM books;

결과에는 원래 price 열과 함께, 계산된 할인가와 할인금액이 나타납니다. books 테이블 자체는 변경되지 않습니다. 이처럼 SELECT에서 열 이름 대신 수식(표현식)을 쓸 수 있습니다. 사용 가능한 산술 연산자는 더하기(+), 빼기(-), 곱하기(*), 나누기(/), 나머지(%) 입니다.

주문 테이블에서 수량과 도서 가격을 곱해 주문 금액을 계산하는 예를 보겠습니다.

SELECT
  order_id           AS 주문번호,
  member_id          AS 회원번호,
  book_id            AS 도서번호,
  quantity           AS 수량,
  quantity * 22000   AS 예상금액
FROM orders;

여기서 22000은 고정된 숫자(리터럴)를 직접 사용한 예입니다. 실제로는 JOIN으로 books 테이블과 연결해 실제 가격을 가져와야 하지만, JOIN은 12강에서 배웁니다. 지금은 표현식의 활용 방법에 집중합니다.

정수 나눗셈에서 주의할 점이 있습니다. SQLite에서 7 / 2는 3.5가 아닌 3이 됩니다. 정수끼리 나누면 소수점이 버려집니다. 소수점 결과를 원한다면 7.0 / 2 또는 CAST(7 AS REAL) / 2처럼 실수형으로 변환해야 합니다.

🔤 문자열 연결하기

이 섹션에서는 두 개 이상의 텍스트 열을 하나로 합치는 방법을 살펴보겠습니다.

SQLite에서 문자열을 연결할 때는 || (파이프 두 개) 연산자를 사용합니다. 두 문자열을 이어 붙여 하나의 새로운 문자열을 만듭니다.

SELECT
  name || ' 님'     AS 고객명,
  email
FROM members;

결과의 고객명 열에는 "김민준 님", "이서연 님"처럼 이름 뒤에 " 님"이 붙어 나타납니다. 원본 name 열의 값은 변경되지 않습니다.

여러 열과 고정 문자를 조합할 수도 있습니다.

SELECT
  name || '(' || grade || ')' AS 회원정보
FROM members;

결과는 "김민준(VIP)", "이서연(REGULAR)"처럼 이름과 등급을 괄호로 묶어 표시합니다. 이런 표현식은 보고서나 화면 출력에서 여러 열의 정보를 하나의 의미 있는 텍스트로 합칠 때 자주 사용됩니다.

MySQL과 PostgreSQL에서는 || 대신 CONCAT() 함수를 사용합니다. CONCAT(name, ' 님')과 같이 쓰지만 목적은 같습니다. 표준 SQL에서는 ||가 공식 표기이므로 이 강좌에서는 ||를 사용합니다.

💬 리터럴과 상수 값

이 섹션에서는 SELECT에서 열이 아닌 고정된 값을 직접 출력하는 방법을 살펴보겠습니다.

SELECT 에는 테이블 열뿐 아니라 고정 문자열이나 숫자를 직접 넣을 수 있습니다. 이런 고정 값을 리터럴(Literal)이라고 합니다.

SELECT
  '온라인 서점'      AS 서비스명,
  name              AS 회원이름,
  '회원입니다'       AS 안내문구
FROM members;

결과의 "서비스명" 열에는 모든 행에 동일하게 '온라인 서점'이라는 값이, "안내문구" 열에는 모두 '회원입니다'가 나타납니다. 특정 열의 값이 아니라 고정 텍스트를 모든 행에 붙여서 출력하는 것입니다. 보고서 생성이나 데이터 내보내기 작업에서 열 레이블을 함께 포함시킬 때 유용합니다.

숫자 리터럴도 마찬가지로 사용할 수 있습니다.

SELECT
  title          AS 도서명,
  price          AS 정가,
  price * 0.9    AS 할인가,
  '10% 할인'     AS 이벤트
FROM books;

이벤트 열에는 모든 도서에 동일하게 '10% 할인'이라는 텍스트가 붙어 나옵니다.

FROM 절 없이 SELECT만으로 계산기처럼 쓸 수도 있습니다. 이 기능은 간단한 계산을 빠르게 확인할 때 편리합니다.

SELECT 1 + 1;
SELECT 22000 * 0.9;
SELECT '안녕하세요' || ', SQL!';
SELECT date('now');  -- 오늘 날짜 출력

이처럼 테이블 없이도 SELECT는 표현식 계산기로 동작합니다. date('now')는 SQLite의 내장 함수로 현재 날짜를 반환합니다.

⚠️ 자주 하는 실수

이 섹션에서는 SELECT 기초 단계에서 초보자가 자주 저지르는 실수를 살펴보겠습니다.

첫 번째 실수는 열 이름과 문자열 리터럴 혼동입니다. SQL에서 따옴표 없이 쓰면 열 이름, 작은따옴표로 감싸면 문자열 리터럴입니다. SELECT name FROM members는 name 열의 값을 가져오지만, SELECT 'name' FROM members는 모든 행에 "name"이라는 고정 텍스트를 출력합니다. 초보자가 열 이름을 따옴표로 감싸는 실수를 자주 합니다.

두 번째 실수는 정수 나눗셈 결과 오해입니다. 앞서 언급했듯 price / 2에서 price가 정수이면 소수점이 버려집니다. 정확한 비율 계산이 필요할 때는 price / 2.0 또는 price * 0.5처럼 실수형으로 처리해야 합니다.

세 번째 실수는 WHERE에서 SELECT 별칭 사용 시도입니다. 아래 쿼리는 오류가 납니다.

-- 오류 발생 예시 (실행하지 마세요)
SELECT price * 0.9 AS 할인가
FROM books
WHERE 할인가 < 20000;  -- 오류: 할인가는 WHERE 단계에서 아직 정의되지 않음

WHERE는 SELECT보다 먼저 실행되므로 SELECT에서 정의한 별칭(할인가)을 WHERE에서 쓸 수 없습니다. 올바른 방법은 별칭 대신 원래 표현식을 다시 씁니다.

-- 올바른 방법
SELECT price * 0.9 AS 할인가
FROM books
WHERE price * 0.9 < 20000;

📝 핵심 요약

이번 강에서 배운 내용을 정리하겠습니다.

개념문법예시
실행 순서FROM → WHERE → SELECTWHERE에서 SELECT 별칭 사용 불가
산술 연산열명 * 숫자, 열명 + 열명price * 0.9 AS 할인가
문자열 연결열명 || '텍스트' || 열명name || '(' || grade || ')'
리터럴 값'문자열', 숫자'온라인 서점' AS 서비스명
테이블 없는 SELECTSELECT 표현식;SELECT 22000 * 0.9;

SELECT는 단순히 저장된 값을 가져오는 명령이 아니라, 계산·변환·조합을 통해 원하는 형태의 데이터를 만들어내는 강력한 도구입니다. 다음 5강에서는 WHERE 조건을 다루겠습니다. 전체 데이터 중 특정 조건에 맞는 행만 골라내는 필터링은 SQL의 핵심 기능 중 하나입니다. 숫자 비교, 문자열 비교, 여러 조건을 AND·OR로 조합하는 방법을 실습과 함께 배워봅니다.

관련 주제

  • SELECT 실행 순서
  • 열 계산식
  • 문자열 연결
  • 별칭 AS
  • 표현식 SELECT
  • 개발·프로그래밍
  • 개발·프로그래밍 강의
  • SQL·데이터베이스 입문 24강
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나

📚 시리즈 전체 공유

SQL·데이터베이스 입문 24강

이 강의가 속한 시리즈는 총 8강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...