カテゴリ:

クエリ構文

SELECT

SELECT ステートメントとして、または他のステートメント内の句として使用できます。

  • ステートメントとして、 SELECT ステートメントは最も一般的に実行される SQL ステートメントで、データベースをクエリし、行のセットを取得します。

  • 句として、 SELECT はクエリによって返される列のセットを定義します。

こちらもご参照ください。

クエリ構文

構文

[ ... ]
SELECT [ { ALL | DISTINCT } ]
    {
          [{<object_name>|<alias>}.]*
        | [{<object_name>|<alias>}.]<col_name>
        | [{<object_name>|<alias>}.]$<col_position>
        | <expr>
        [ [ AS ] <col_alias> ]
    }
    [ , ... ]
[ ... ]

ステートメントとしての SELECT およびステートメント内の他の句の詳細については、 クエリ構文 をご参照ください。

パラメーター

ALL | DISTINCT

結果セットで重複排除を実行するかどうかを指定します。

  • ALL には、結果セットのすべての値が含まれます。

  • DISTINCT は、結果セットから重複した値を削除します。

デフォルト: ALL

*

アスタリスクは、指定されたオブジェクトのすべての列、または * がオブジェクト名またはエイリアスで修飾されていない場合、すべてのオブジェクトのすべての列を出力に含めることを示す略記です。

オブジェクト名 または . エイリアス

FROM 句で定義されているオブジェクト識別子またはオブジェクトエイリアスを指定します。

列名

FROM 句で定義されている列識別子を指定します。

$列の位置

FROM 句で定義されている列の位置(1ベース)を指定します。列がテーブルから参照される場合、この数はテーブル内の列の最大数を超えることはできません。

特定の行の特定の値に評価される数式などの式を指定します。

[ AS ] 列エイリアス

結果の式に割り当てられる列エイリアスを指定します。これは、最上位の 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');

この例は、従業員の 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 |
+----------------+