SELECT
문은 데이터베이스에서 데이터를 조회하는 가장 기본적이고 중요한 DQL(Data Query Language)임. 테이블에 저장된 데이터를 원하는 형태로 가져오는 모든 작업의 시작점임.
*
)테이블에 존재하는 모든 컬럼의 데이터를 조회할 때 *
(Asterisk) 와일드카드를 사용함.
*
는 '모든 것(All)'을 의미하며, 해당 테이블의 모든 컬럼을 지칭함./*
* -- User 테이블의 모든 컬럼과 모든 행 데이터를 조회함 --
* '*'는 모든 컬럼을 의미함.
* 실무에서는 성능 저하 및 불필요한 데이터 전송을 유발할 수 있어
* 필요한 컬럼을 명시적으로 지정하는 것이 바람직함.
*/
SELECT
*
FROM
User;
필요한 데이터만 특정하여 조회하고 싶을 경우, *
대신 컬럼명을 직접 명시함.
,
)로 구분하여 나열함.SELECT
절에 명시된 컬럼의 순서대로 결과가 출력됨.FROM
절을 먼저 해석하여 대상 테이블을 확정한 후, SELECT
절을 해석하여 조회할 컬럼을 결정함.-- User 테이블에서 사용자 이름(name)과 이메일(email) 컬럼만 조회함.
SELECT
name,
email
FROM
User;
-- email을 먼저 명시하면, 결과 테이블에서도 email 컬럼이 먼저 나타남.
SELECT
email,
name
FROM
User;
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_type
과author
두 컬럼의 값이 모두 동일한 행을 중복으로 간주하여 제거함.DISTINCT
는 뒤따르는 모든 컬럼의 조합에 대해 적용됨.
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;
여러 컬럼의 값이나 문자열을 합쳐서 하나의 새로운 컬럼으로 만들 때 문자열 연결 연산자를 사용함.
||
연산자를 사용함.'
)로 감싸서 표현하며, 별칭(Alias)은 큰따옴표("
)로 감싸는 것이 표준임./*
* -- 문자열 연결 예시 --
* name 컬럼과 '님, 환영합니다!' 문자열을 합쳐 '환영인사말'이라는 별칭의 컬럼으로 조회함.
*/
SELECT
name || '님, 환영합니다!' AS "환영인사말"
FROM
User;
/*
* -- 여러 컬럼 및 문자열 연결 --
* follower_id와 following_id를 조합하여 문장을 생성함.
*/
SELECT
follower_id || '님이 ' || following_id || '님을 팔로우합니다.' AS "팔로우 정보"
FROM
Follows;
DISTINCT
의 적용 범위: SELECT DISTINCT a, b
는 a
와 b
의 조합이 유일한 값을 찾는 것이지, a
의 중복을 제거하고 b
를 붙이는 것이 아님을 명확히 알아야 함."
)이며, 문자열 리터럴은 작은따옴표('
)임. SELECT name AS '사용자이름'
형태는 비표준이며 DBMS에 따라 오류를 발생시킬 수 있음.ALL
키워드: SELECT ALL name FROM User
는 SELECT name FROM User
와 동일한 결과임. ALL
이 명시적으로 주어졌을 때 당황하지 않고 기본 동작임을 인지해야 함.DBMS | 문법 | 예시 |
---|---|---|
Oracle | ` | |
SQL Server | + | SELECT name + '님' FROM User; |
MySQL / MariaDB | CONCAT() 함수 | SELECT CONCAT(name, '님') FROM User; |
ANSI SQL | ` |