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 |
+-------------+------------+------------+---------------+
1つの列を除くすべての列の選択¶
この例は、 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 |
+------------+------------+
すべての列の選択と1つの列の名前変更¶
次の例は、 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 |
+-----+------------+------------+------------+
すべての列の選択、1つの列の除外、および複数の列の名前変更¶
次の例は、 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 |
+-----+------------+------------+
複数テーブルからの全列選択、列の除外、および列の名前変更¶
この例では、2つのテーブルを結合し、 employee_table
からの列1つを除いて、両方のテーブルからすべての列を選択します。この例では、 department_table
から選択された列の1つの名前も変更します。
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 列名)¶
名前による単一の列の選択¶
この例は、従業員の 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 | +----------------+