[SQLD] 01. 기본 SELECT 문

TJK·2025년 7월 22일
1

기본 SELECT 문

SELECT 문은 데이터베이스에서 데이터를 조회하는 가장 기본적이고 중요한 DQL(Data Query Language)임. 테이블에 저장된 데이터를 원하는 형태로 가져오는 모든 작업의 시작점임.


1. 모든 컬럼 조회 (*)

테이블에 존재하는 모든 컬럼의 데이터를 조회할 때 * (Asterisk) 와일드카드를 사용함.

  • *는 '모든 것(All)'을 의미하며, 해당 테이블의 모든 컬럼을 지칭함.
  • 데이터 구조를 파악하거나 개발 초기 단계에서 유용하지만, 실무에서는 성능과 데이터 전송 효율을 위해 필요한 컬럼만 명시적으로 지정하는 것이 권장됨.
/*
 * -- User 테이블의 모든 컬럼과 모든 행 데이터를 조회함 --
 * '*'는 모든 컬럼을 의미함.
 * 실무에서는 성능 저하 및 불필요한 데이터 전송을 유발할 수 있어
 * 필요한 컬럼을 명시적으로 지정하는 것이 바람직함.
 */
SELECT 
    *
FROM 
    User;

2. 특정 컬럼 조회

필요한 데이터만 특정하여 조회하고 싶을 경우, * 대신 컬럼명을 직접 명시함.

  • 컬럼은 쉼표(,)로 구분하여 나열함.
  • SELECT 절에 명시된 컬럼의 순서대로 결과가 출력됨.
  • SQL 문장은 FROM 절을 먼저 해석하여 대상 테이블을 확정한 후, SELECT 절을 해석하여 조회할 컬럼을 결정함.
-- User 테이블에서 사용자 이름(name)과 이메일(email) 컬럼만 조회함.
SELECT
    name,
    email
FROM
    User;
    
-- email을 먼저 명시하면, 결과 테이블에서도 email 컬럼이 먼저 나타남.
SELECT
    email,
    name
FROM
    User;

3. 중복 제거 (DISTINCT)

조회 결과에서 중복된 행(Row)을 제거하고 고유한 값만 보고 싶을 때 DISTINCT 키워드를 사용함.

  • SELECT 키워드 바로 뒤에 작성함.
  • DISTINCT의 반대는 모든 행을 조회하는 ALL이며, ALL은 기본값이므로 보통 생략함.
/*
 * -- Post 테이블에서 게시물의 종류(post_type)를 중복 없이 조회함 --
 * 'photo'와 'video' 값이 여러 번 존재하더라도,
 * 결과는 고유한 값인 'photo', 'video' 두 행만 출력됨.
 */
SELECT DISTINCT
    post_type
FROM
    Post;

-- 아래 쿼리는 DISTINCT를 생략한 것과 동일한 결과를 반환함.
SELECT ALL post_type
FROM Post;

※ 실전 팁: SELECT DISTINCT post_type, author 와 같이 여러 컬럼에 사용하면, post_typeauthor 두 컬럼의 값이 모두 동일한 행을 중복으로 간주하여 제거함. DISTINCT는 뒤따르는 모든 컬럼의 조합에 대해 적용됨.


4. 별칭 지정 (AS ALIAS)

컬럼명이나 테이블명에 별칭(Alias)을 부여하여 출력 결과의 가독성을 높일 수 있음. AS 키워드를 사용하며, 생략도 가능함.

문법설명예시
컬럼명 AS "별칭"가장 정석적인 방법. 별칭에 공백, 특수문자가 포함될 경우 큰따옴표(")로 감싸야 함. (ANSI SQL 표준)SELECT name AS "사용자 이름" FROM User;
컬럼명 "별칭"AS 키워드 생략 가능.SELECT name "사용자 이름" FROM User;
컬럼명 별칭별칭에 공백이나 특수문자가 없다면 따옴표도 생략 가능.SELECT name UserName FROM User;
/*
 * -- 컬럼 별칭 지정 예시 --
 * name 컬럼은 '사용자 이름'으로,
 * registration_date 컬럼은 '가입 일자'라는 별칭으로 조회함.
 */
SELECT
    name AS "사용자 이름",
    registration_date "가입 일자" -- AS 생략
FROM
    User;

5. 데이터 연결 (Concatenation)

여러 컬럼의 값이나 문자열을 합쳐서 하나의 새로운 컬럼으로 만들 때 문자열 연결 연산자를 사용함.

  • ANSI SQL 표준 및 Oracle에서는 || 연산자를 사용함.
  • 문자열 리터럴(상수)은 작은따옴표(')로 감싸서 표현하며, 별칭(Alias)은 큰따옴표(")로 감싸는 것이 표준임.
/*
 * -- 문자열 연결 예시 --
 * name 컬럼과 '님, 환영합니다!' 문자열을 합쳐 '환영인사말'이라는 별칭의 컬럼으로 조회함.
 */
SELECT
    name || '님, 환영합니다!' AS "환영인사말"
FROM
    User;

/*
 * -- 여러 컬럼 및 문자열 연결 --
 * follower_id와 following_id를 조합하여 문장을 생성함.
 */
SELECT
    follower_id || '님이 ' || following_id || '님을 팔로우합니다.' AS "팔로우 정보"
FROM
    Follows;

6. 시험 문제 유형 및 함정 포인트

  • DISTINCT의 적용 범위: SELECT DISTINCT a, bab의 조합이 유일한 값을 찾는 것이지, a의 중복을 제거하고 b를 붙이는 것이 아님을 명확히 알아야 함.
  • Alias의 따옴표: ANSI SQL 표준에서 별칭을 감싸는 것은 큰따옴표(")이며, 문자열 리터럴은 작은따옴표(')임. SELECT name AS '사용자이름' 형태는 비표준이며 DBMS에 따라 오류를 발생시킬 수 있음.
  • ALL 키워드: SELECT ALL name FROM UserSELECT name FROM User와 동일한 결과임. ALL이 명시적으로 주어졌을 때 당황하지 않고 기본 동작임을 인지해야 함.

7. DBMS별 문법 차이

  • 문자열 연결 연산자는 DBMS별로 차이가 있어 실무에서 혼동하기 쉬움.
DBMS문법예시
Oracle`
SQL Server+SELECT name + '님' FROM User;
MySQL / MariaDBCONCAT() 함수SELECT CONCAT(name, '님') FROM User;
ANSI SQL`
profile
Hello world!

0개의 댓글