카테고리:

쿼리 구문

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 *)을 선택할 때 결과에서 제외해야 하는 열을 지정합니다.

RENAME col_name AS col_alias . RENAME (col_name AS col_alias, col_name AS col_alias, ...)

모든 열(SELECT *)을 선택할 때 결과에 사용해야 하는 열 별칭을 지정합니다.

EXCLUDE와 RENAME을 모두 지정하는 경우:

  • RENAME 앞에 EXCLUDE를 지정해야 합니다.

  • EXCLUDE와 RENAME에 같은 열을 지정할 수 없습니다.

col_name

FROM 절에 정의된 대로 열 식별자를 지정합니다.

$col_position

FROM 절에 정의된 대로 열의 위치(1부터 시작)를 지정합니다. 테이블에서 열을 참조하는 경우 이 숫자는 테이블의 최대 열 수를 초과할 수 없습니다.

expr

수학 식과 같이, 주어진 행에 대한 특정 값으로 계산되는 식을 지정합니다.

[ AS ] col_alias

결과 식에 할당된 열 별칭을 지정합니다. 이것은 최상위 SELECT 목록에서 표시 이름으로 사용되고 인라인 뷰에서는 열 이름으로 사용됩니다.

사용법 노트

  • 별칭과 식별자는 기본적으로 대/소문자를 구분하지 않습니다. 대/소문자를 유지하려면 큰따옴표(")로 묶으십시오. 자세한 내용은 오브젝트 식별자 섹션을 참조하십시오.

  • 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');

모든 열을 선택하는 예제

테이블의 모든 열 선택하기

이 예제에서는 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_idemployee_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_idemployee_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_idemployee_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 |
+-----+------------+------------+

특정 열을 선택하는 예제

이름으로 단일 열 선택하기

다음은 직원의 ID를 알고 있는 경우 직원의 성을 조회하는 방법을 보여주는 예입니다.

SELECT last_name FROM employee_table WHERE employee_ID = 101;
+------------+
| LAST_NAME  |
|------------|
| Montgomery |
+------------+

조인된 테이블에서 이름으로 여러 열 선택하기

다음은 각 직원과 각 직원이 근무하는 부서의 이름을 나열하는 예입니다. 부서명 순으로 출력되며, 각 부서 내에서 직원은 이름순으로 정렬됩니다. 이 쿼리는 JOIN 을 사용해 한 테이블의 정보를 다른 테이블의 정보와 관련시킵니다.

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 |
+----------------+
맨 위로 이동