sql >> データベース >  >> RDS >> Database

初心者のためのSQLSELECT

    SELECT ステートメントはほぼ間違いなく、SQLで最も一般的に使用されるステートメントです。

    SELECT ステートメントは、データベースからデータを取得するために使用されます。返す行と列を指定できます。

    SELECTを示す例を次に示します。 ステートメント。

    SELECT * 
    FROM Pets;

    結果:

    +---------+-------------+-----------+-----------+------------+
    | PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
    |---------+-------------+-----------+-----------+------------|
    | 1       | 2           | 3         | Fluffy    | 2020-11-20 |
    | 2       | 3           | 3         | Fetch     | 2019-08-16 |
    | 3       | 2           | 2         | Scratch   | 2018-10-01 |
    | 4       | 3           | 3         | Wag       | 2020-03-15 |
    | 5       | 1           | 1         | Tweet     | 2020-11-28 |
    | 6       | 3           | 4         | Fluffy    | 2020-09-17 |
    | 7       | 3           | 2         | Bark      | NULL       |
    | 8       | 2           | 4         | Meow      | NULL       |
    +---------+-------------+-----------+-----------+------------+

    この例では、アスタリスク( * )を使用しました )すべての列を返すワイルドカード。 FROMも使用しました データを取得するテーブルを指定する句。

    したがって、このクエリは Petsからすべての行とすべての列を返します テーブル。

    列を指定する

    返したい列を指定できます。

    これを行うには、アスタリスクのワイルドカードを、返される順序で、それぞれがコンマで区切られた列名に置き換えます。

    SELECT PetId, PetName, DOB 
    FROM Pets;

    結果:

    +---------+-----------+------------+
    | PetId   | PetName   | DOB        |
    |---------+-----------+------------|
    | 1       | Fluffy    | 2020-11-20 |
    | 2       | Fetch     | 2019-08-16 |
    | 3       | Scratch   | 2018-10-01 |
    | 4       | Wag       | 2020-03-15 |
    | 5       | Tweet     | 2020-11-28 |
    | 6       | Fluffy    | 2020-09-17 |
    | 7       | Bark      | NULL       |
    | 8       | Meow      | NULL       |
    +---------+-----------+------------+
    

    一般に、この方法で実行し、実際に必要な列のみを返すことをお勧めします。アスタリスクのワイルドカードを使用してすべての列を返すと、特に大規模なデータベースでは、パフォーマンスに悪影響を与える可能性があります。

    行を指定する

    関心のある行だけに結果をフィルタリングする方法はたくさんあります。最も一般的な方法は、 WHEREを使用することです。 句。この句を使用すると、資格を得るために行が満たさなければならない条件を指定できます。

    実例を示します。

    SELECT PetId, PetName, DOB 
    FROM Pets
    WHERE PetName = 'Fluffy';

    結果:

    +---------+-----------+------------+
    | PetId   | PetName   | DOB        |
    |---------+-----------+------------|
    | 1       | Fluffy    | 2020-11-20 |
    | 6       | Fluffy    | 2020-09-17 |
    +---------+-----------+------------+
    

    この場合、検索条件を満たす2つの行がありました。

    検索条件では、equals演算子( =)を使用しています ) PetNameの値を指定します 列は指定された値と一致する必要があります( Fluffy )正確に。

    検索条件で使用できる演算子は他にもたくさんあります。たとえば、 LIKEを使用できます 名前がFで始まるペットを返す演算子 またはFluff または何でも。

    WHEREに条件を追加できます ANDなどの演算子を使用した句 およびOR 演算子。

    これが例です。

    SELECT PetId, PetName, DOB 
    FROM Pets
    WHERE PetName = 'Fluffy'
    OR DOB < '2020-01-01';

    結果:

    +---------+-----------+------------+
    | PetId   | PetName   | DOB        |
    |---------+-----------+------------|
    | 1       | Fluffy    | 2020-11-20 |
    | 2       | Fetch     | 2019-08-16 |
    | 3       | Scratch   | 2018-10-01 |
    | 6       | Fluffy    | 2020-09-17 |
    +---------+-----------+------------+
    

    この例では、ペットの名前がFluffyまたはであるすべての行を返しました。 ペットの生年月日( DOB で指定) 列)が特定の日付未満です。より小さい演算子を使用しました( < )それを指定します。

    テーブル以外のデータを返す

    SELECT ステートメントを使用して、テーブルに格納されていないデータを返すこともできます。たとえば、これを行うことは完全に合法です:

    SELECT 'Hey there!';

    結果:

    +--------------------+
    | (No column name)   |
    |--------------------|
    | Hey there!         |
    +--------------------+
    

    その場合、列に名前がないことに注意してください。エイリアスを使用して、結果のフィールドに名前を付けることができます。

    表以外のデータを選択し、返された各フィールドにエイリアスを提供する例をさらにいくつか示します。

    SELECT 
        2 + 3 AS "2 + 3",
        'Fluffy' + ' ' + 'Smith' AS FullName,
        SYSDATETIME() AS "Date/time";

    結果:

    +---------+--------------+-----------------------------+
    | 2 + 3   | FullName     | Date/time                   |
    |---------+--------------+-----------------------------|
    | 5       | Fluffy Smith | 2020-12-04 23:58:55.8483734 |
    +---------+--------------+-----------------------------+

    簡単な概要は次のとおりです。

    • 最初の列は単に2つの数字を追加しただけです。
    • 2番目の列は、3つの文字列(スペース文字を含む)を連結しました。必要に応じて、文字列を数字と連結することもできます。
    • 3番目の列はSYSDATETIME()を使用しました 現在の日付と時刻を返す関数。この関数はSQLServerで使用できます。他のDBMSには、独自の日付と時刻の関数があります。これらのDBMSで使用可能な日付と時刻の関数のリストについては、SQLiteの日付/時刻関数、SQL Serverの日付/時刻関数、およびPostgreSQLの日付/時刻関数を参照してください。

    サブクエリ

    複数のSELECTを持つことができます 単一のクエリ内のステートメント。サブクエリを使用してこれを行うことができます。

    SELECT 
        PetTypeId,
        PetType
    FROM PetTypes
    WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

    結果:

    +-------------+-----------+
    | PetTypeId   | PetType   |
    |-------------+-----------|
    | 1           | Bird      |
    | 2           | Cat       |
    | 3           | Dog       |
    +-------------+-----------+
    

    この例では、 INを使用しました サブクエリを指定する演算子。そのサブクエリは、別のテーブルから選択されたデータと IN オペレーターはそれを外部クエリに関連付けました。

    結果の注文

    ORDER BYを使用できます 結果を並べ替える句。

    たとえば、以前の結果を PetTypeIdで並べ替えることができます。 降順の列:

    SELECT 
        PetTypeId,
        PetType
    FROM PetTypes
    WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
    ORDER BY PetTypeId DESC;

    結果:

    +-------------+-----------+
    | PetTypeId   | PetType   |
    |-------------+-----------|
    | 3           | Dog       |
    | 2           | Cat       |
    | 1           | Bird      |
    +-------------+-----------+
    

    SQL ORDER BYを参照してください その他の例と詳細な説明については、初心者向けの条項。

    より高度なSELECT ステートメント

    SELECT ステートメントは非常に単純なステートメントですが、非常に複雑なクエリを作成するために使用できます。

    これは、前のクエリよりも少し複雑なクエリです。

    SELECT 
        PetTypes.PetType,
        COUNT(Pets.PetTypeId) AS Count
    FROM Pets 
    LEFT JOIN PetTypes 
    ON Pets.PetTypeId = PetTypes.PetTypeId
    GROUP BY PetTypes.PetType
    ORDER BY Count DESC;

    結果:

    +-----------+---------+
    | PetType   | Count   |
    |-----------+---------|
    | Dog       | 4       |
    | Cat       | 3       |
    | Bird      | 1       |
    +-----------+---------+

    SQLクエリの世界では、これはまだ非常に単純ですが、より複雑なクエリでよく見られる要素の多くが含まれています。

    たとえば、このクエリは結合を使用して複数のテーブルからデータを取得します。 GROUP BYも使用します 行をグループに分割する句。

    SQL GROUP BYを参照してください GROUP BYのその他の例については初心者向けの条項 条項。

    複数のテーブルからデータを取得して1つの結果セットとして返す方法については、SQL結合チュートリアルを参照してください。

    SELECT INTO ステートメント

    一部のDBMSは、 SELECT INTOをサポートしています。 声明。これは、データベース内のデータに影響を与えるという点で、前の例とは少し異なります。

    SELECT INTO ステートメントは新しいテーブルを作成し、別のテーブルからそのテーブルにデータを挿入します。

    基本的には次のようになります:

    SELECT * INTO Table2
    FROM Table1;

    この例では、 Table2という新しいテーブルを作成します 、 Table1からすべてのデータを挿入します それに。 Table2 Table1と同じ定義になります 。

    SQL SELECT INTOを参照してください その他の例についての声明。

    私がほのめかしたように、すべてのDBMSがこのステートメントをサポートしているわけではありません。 DBMSがSELECTINTOをサポートしていない場合 ステートメント、 CREATE TABLE ... AS SELECTを使用してみてください 代わりにステートメント。

    これらのステートメントは、操作の一部として新しいテーブルを作成します。すでに存在するテーブルにデータを挿入するには、 INSERT INTO ... SELECTを使用してみてください 代わりにステートメント。


    1. 順番に並んでいる値でグループ化する

    2. SQLGroupByとOrderBy

    3. PostgreSQL 9.5以降のJSON配列への追加(プッシュ)と削除

    4. jdbcTimestampまたはDateを使用する場合のOracleとの無視できない実行プランの違い