SELECT¶
SELECT를 문으로 사용하거나 다른 문 내의 절로 사용할 수 있습니다.
문으로서의 SELECT 문은 가장 일반적으로 실행되는 SQL 문으로, 데이터베이스를 쿼리하고 행 세트를 검색합니다.
절로서의 SELECT는 쿼리에서 반환되는 열 세트를 정의합니다.
- 참고 항목:
구문¶
[ ... ]
SELECT [ { ALL | DISTINCT } ]
[ TOP <n> ]
{
-- Selecting all columns.
[{<object_name>|<alias>}.]*
[ EXCLUDE
{
<col_name>
| ( <col_name>, <col_name>, ... )
}
]
[ RENAME
{
<col_name> AS <col_alias>
| ( <col_name> AS <col_alias>, <col_name> AS <col_alias>, ... )
}
]
|
-- Selecting specific columns.
{
[{<object_name>|<alias>}.]<col_name>
| [{<object_name>|<alias>}.]$<col_position>
| <expr>
}
[ [ AS ] <col_alias> ]
}
[ , ... ]
[ ... ]
문과 문 내에 있는 다른 절로서의 SELECT에 대한 자세한 내용은 쿼리 구문 을 참조하십시오.
매개 변수¶
ALL | DISTINCT
결과 세트에서 중복 제거를 수행할지 여부를 지정합니다.
ALL
은 결과 세트의 모든 값을 포함합니다.DISTINCT
는 결과 세트에서 중복 값을 제거합니다.
기본값:
ALL
TOP n
반환할 최대 결과 수를 지정합니다. TOP <n> 섹션을 참조하십시오.
object_name
또는 .alias
FROM 절에 정의된 대로 오브젝트 식별자 또는 오브젝트 별칭을 지정합니다.
*
별표는 지정된 오브젝트의 모든 열을 출력에 포함하거나
*
가 오브젝트 이름이나 별칭으로 정규화되지 않은 경우 모든 오브젝트의 모든 열을 출력에 포함해야 한다는 점을 나타내기 위한 약칭입니다.EXCLUDE col_name
.EXCLUDE (col_name, col_name, ...)
모든 열(
SELECT *
또는SELECT table_name.*
)을 선택할 때 결과에서 제외해야 하는 열을 지정합니다.여러 테이블에서 선택하는 경우
SELECT table_name.*
을 사용하여 특정 테이블에서 모든 열을 선택하도록 지정하고EXCLUDE
에 정규화되지 않은 열 이름을 지정합니다. 예:SELECT table_a.* EXCLUDE column_in_table_a , table_b.* EXCLUDE column_in_table_b ...
RENAME col_name AS col_alias
.RENAME (col_name AS col_alias, col_name AS col_alias, ...)
모든 열(
SELECT *
또는SELECT table_name.*
)을 선택할 때 결과에 사용해야 하는 열 별칭을 지정합니다.여러 테이블에서 선택하는 경우
SELECT table_name.*
을 사용하여 특정 테이블에서 모든 열을 선택하도록 지정하고RENAME
에 정규화되지 않은 열 이름을 지정합니다. 예:SELECT table_a.* RENAME column_in_table_a AS col_alias_a, table_b.* RENAME column_in_table_b AS col_alias_b ...
참고
SELECT *
뒤에 EXCLUDE
와 RENAME
을 모두 지정하는 경우:
RENAME
앞에EXCLUDE
를 지정해야 합니다.SELECT * EXCLUDE col_a RENAME col_b AS alias_b ...
EXCLUDE
와RENAME
에 같은 열을 지정할 수 없습니다.
사용법 노트¶
별칭과 식별자는 기본적으로 대/소문자를 구분하지 않습니다. 대/소문자를 유지하려면 큰따옴표(
"
)로 묶으십시오. 자세한 내용은 오브젝트 식별자 섹션을 참조하십시오.ORDER BY 절이 없으면 SELECT에서 반환하는 결과는 순서가 지정되지 않은 세트입니다. 같은 테이블에 대해 같은 쿼리를 반복적으로 실행하면 출력 순서가 매번 달라질 수 있습니다. 순서가 중요하다면
ORDER BY
절을 사용하십시오.SELECT는 독립된 문으로 사용할 수 있을 뿐 아니라, 다른 문 내의 절로 사용할 수도 있습니다(예:
INSERT INTO ... SELECT ...;
). SELECT는 문 내의 하위 쿼리 에 사용할 수도 있습니다.
예¶
아래에 몇 가지 간단한 예가 나와 있습니다.
쿼리 구문 에 대한 자세한 설명을 비롯해, 설명서의 다른 부분에 많은 예가 추가로 포함되어 있습니다.
예제를 위한 데이터 설정하기¶
아래의 일부 쿼리에서는 다음 테이블과 데이터를 사용합니다.
CREATE TABLE employee_table ( employee_ID INTEGER, last_name VARCHAR, first_name VARCHAR, department_ID INTEGER ); CREATE TABLE department_table ( department_ID INTEGER, department_name VARCHAR );INSERT INTO employee_table (employee_ID, last_name, first_name, department_ID) VALUES (101, 'Montgomery', 'Pat', 1), (102, 'Levine', 'Terry', 2), (103, 'Comstock', 'Dana', 2); INSERT INTO department_table (department_ID, department_name) VALUES (1, 'Engineering'), (2, 'Customer Support'), (3, 'Finance');
모든 열을 선택하는 예제(SELECT *)¶
테이블의 모든 열 선택하기¶
이 예제에서는 employee_table
에서 모든 열을 선택하는 방법을 보여줍니다.
SELECT * FROM employee_table;
+-------------+------------+------------+---------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME | DEPARTMENT_ID |
|-------------+------------+------------+---------------|
| 101 | Montgomery | Pat | 1 |
| 102 | Levine | Terry | 2 |
| 103 | Comstock | Dana | 2 |
+-------------+------------+------------+---------------+
한 열을 제외한 모든 열 선택하기¶
이 예제에서는 department_id
열을 제외한 employee_table
에서 모든 열을 선택하는 방법을 보여줍니다.
SELECT * EXCLUDE department_id FROM employee_table;
+-------------+------------+------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME |
|-------------+------------+------------|
| 101 | Montgomery | Pat |
| 102 | Levine | Terry |
| 103 | Comstock | Dana |
+-------------+------------+------------+
두 개 이상의 열을 제외한 모든 열 선택하기¶
이 예제에서는 department_id
및 employee_id
열을 제외하고 employee_table
의 모든 열을 선택하는 방법을 보여줍니다.
SELECT * EXCLUDE (department_id, employee_id) FROM employee_table;
+------------+------------+
| LAST_NAME | FIRST_NAME |
|------------+------------|
| Montgomery | Pat |
| Levine | Terry |
| Comstock | Dana |
+------------+------------+
모든 열 선택 및 한 열의 이름 바꾸기¶
이 예제에서는 employee_table
에서 모든 열을 선택하고 department_id
열의 이름을 바꾸는 방법을 보여줍니다.
SELECT * RENAME department_id AS department FROM employee_table;
+-------------+------------+------------+------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME | DEPARTMENT |
|-------------+------------+------------+------------|
| 101 | Montgomery | Pat | 1 |
| 102 | Levine | Terry | 2 |
| 103 | Comstock | Dana | 2 |
+-------------+------------+------------+------------+
모든 열 선택 및 여러 열 이름 바꾸기¶
이 예제에서는 employee_table
에서 모든 열을 선택하고 department_id
및 employee_id
열의 이름을 바꾸는 방법을 보여줍니다.
SELECT * RENAME (department_id AS department, employee_id AS id) FROM employee_table;
+-----+------------+------------+------------+
| ID | LAST_NAME | FIRST_NAME | DEPARTMENT |
|-----+------------+------------+------------|
| 101 | Montgomery | Pat | 1 |
| 102 | Levine | Terry | 2 |
| 103 | Comstock | Dana | 2 |
+-----+------------+------------+------------+
모든 열 선택, 열 제외 및 여러 열 이름 바꾸기¶
이 예제에서는 employee_table
에서 모든 열을 선택하고 first_name
열을 제외하고 department_id
및 employee_id
열의 이름을 바꾸는 방법을 보여줍니다.
SELECT * EXCLUDE first_name RENAME (department_id AS department, employee_id AS id) FROM employee_table;
+-----+------------+------------+
| ID | LAST_NAME | DEPARTMENT |
|-----+------------+------------|
| 101 | Montgomery | 1 |
| 102 | Levine | 2 |
| 103 | Comstock | 2 |
+-----+------------+------------+
여러 테이블에서 모든 열 선택, 열 제외, 열 이름 바꾸기¶
이 예에서는 두 테이블을 조인하고 employee_table
에서 한 열을 제외하고 두 테이블에서 모든 열을 선택합니다. 또한 이 예에서는 department_table
에서 선택한 열 중 하나의 이름을 바꿉니다.
SELECT
employee_table.* EXCLUDE department_id,
department_table.* RENAME department_name AS department
FROM employee_table INNER JOIN department_table
ON employee_table.department_id = department_table.department_id
ORDER BY department, last_name, first_name;
+-------------+------------+------------+---------------+------------------+
| EMPLOYEE_ID | LAST_NAME | FIRST_NAME | DEPARTMENT_ID | DEPARTMENT |
|-------------+------------+------------+---------------+------------------|
| 103 | Comstock | Dana | 2 | Customer Support |
| 102 | Levine | Terry | 2 | Customer Support |
| 101 | Montgomery | Pat | 1 | Engineering |
+-------------+------------+------------+---------------+------------------+
특정 열을 선택하는 예제(SELECT colname)¶
이름으로 단일 열 선택하기¶
다음은 직원의 ID를 알고 있는 경우 직원의 성을 조회하는 방법을 보여주는 예입니다.
SELECT last_name FROM employee_table WHERE employee_ID = 101; +------------+ | LAST_NAME | |------------| | Montgomery | +------------+
조인된 테이블에서 이름으로 여러 열 선택하기¶
다음은 각 직원과 각 직원이 근무하는 부서의 이름을 나열하는 예입니다. 부서명 순으로 출력되며, 각 부서 내에서 직원은 이름순으로 정렬됩니다. 이 쿼리는 조인을 사용해 한 테이블의 정보를 다른 테이블의 정보와 관련시킵니다.
SELECT department_name, last_name, first_name FROM employee_table INNER JOIN department_table ON employee_table.department_ID = department_table.department_ID ORDER BY department_name, last_name, first_name; +------------------+------------+------------+ | DEPARTMENT_NAME | LAST_NAME | FIRST_NAME | |------------------+------------+------------| | Customer Support | Comstock | Dana | | Customer Support | Levine | Terry | | Engineering | Montgomery | Pat | +------------------+------------+------------+
위치로 열 선택하기¶
다음은 $
를 사용해 열 이름이 아닌 열 번호로 열을 지정하는 방법을 보여주는 예입니다.
SELECT $2 FROM employee_table ORDER BY $2; +------------+ | $2 | |------------| | Comstock | | Levine | | Montgomery | +------------+
출력에서 열의 별칭 지정하기¶
다음은 FROM
절의 테이블에서 직접 출력 열을 가져올 필요가 없음을 보여주는 예로, 출력 열은 일반 식이 될 수 있습니다. 이 예에서는 반지름이 2.0인 원의 면적을 계산합니다. 또한, 출력에 의미 있는 열 이름이 포함되도록 열 별칭을 사용하는 방법도 보여줍니다.
SELECT pi() * 2.0 * 2.0 AS area_of_circle; +----------------+ | AREA_OF_CIRCLE | |----------------| | 12.566370614 | +----------------+