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

基本的なSQLクエリ

    この記事には、初心者がデータベースからデータを取得するために使用できる基本的なSQLクエリの例が含まれています。

    基本的なSELECT クエリ

    SQLで最も一般的に使用されるクエリの例を次に示します。

    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       |
    +---------+-------------+-----------+-----------+------------+

    このクエリは、 Petsからすべての行とすべての列を選択します テーブル。これは、アスタリスク( * )ワイルドカードはすべての列を選択します。

    列名の選択

    パフォーマンス上の理由から、本当に必要な場合を除いて、通常はすべての列を選択しないようにするのが最善です。通常は、必要な列だけを選択することをお勧めします。

    これが例です。

    SELECT PetId, PetName
    FROM Pets;

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 1       | Fluffy    |
    | 2       | Fetch     |
    | 3       | Scratch   |
    | 4       | Wag       |
    | 5       | Tweet     |
    | 6       | Fluffy    |
    | 7       | Bark      |
    | 8       | Meow      |
    +---------+-----------+

    結果をフィルタリングする

    WHEREを追加できます 結果を必要な行だけにフィルタリングする句。

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

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 1       | Fluffy    |
    | 6       | Fluffy    |
    +---------+-----------+

    結果をフィルタリングする別の例を次に示します。今回は大なり演算子(> )を使用します )日付でフィルタリングします。

    SELECT PetName, DOB 
    FROM Pets
    WHERE DOB > '2020-01-01';

    結果:

    +-----------+------------+
    | PetName   | DOB        |
    |-----------+------------|
    | Fluffy    | 2020-11-20 |
    | Wag       | 2020-03-15 |
    | Tweet     | 2020-11-28 |
    | Fluffy    | 2020-09-17 |
    +-----------+------------+

    大なり演算子を他の演算子(大なりまたは等号演算子(> =)など)に交換できます。 )、演算子未満( < )、または演算子以下( <= )。

    BETWEENを使用することもできます 結果を特定の範囲(2つの日付の間など)にフィルタリングする演算子。

    SELECT
        PetName,
        DOB
    FROM Pets
    WHERE DOB BETWEEN '2018-01-01' AND '2020-01-01';

    結果:

    +-----------+------------+
    | PetName   | DOB        |
    |-----------+------------|
    | Fetch     | 2019-08-16 |
    | Scratch   | 2018-10-01 |
    +-----------+------------+

    結果を並べ替える

    ORDER BYを追加できます クエリによって返される行を並べ替える句。

    昇順

    ASCを使用する キーワードを使用して、結果を昇順で並べ替えます。これはデフォルト値であるため、結果を昇順で表示する場合は、このキーワードを省略できます。

    SELECT PetId, PetName
    FROM Pets
    ORDER BY PetName ASC;

    または:

    SELECT PetId, PetName
    FROM Pets
    ORDER BY PetName;

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 7       | Bark      |
    | 2       | Fetch     |
    | 1       | Fluffy    |
    | 6       | Fluffy    |
    | 8       | Meow      |
    | 3       | Scratch   |
    | 5       | Tweet     |
    | 4       | Wag       |
    +---------+-----------+

    降順

    DESCを使用する 結果を降順で並べ替えるキーワード。

    SELECT PetId, PetName
    FROM Pets
    ORDER BY PetName DESC;

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 4       | Wag       |
    | 5       | Tweet     |
    | 3       | Scratch   |
    | 8       | Meow      |
    | 1       | Fluffy    |
    | 6       | Fluffy    |
    | 2       | Fetch     |
    | 7       | Bark      |
    +---------+-----------+

    複数の列で並べ替え

    各列をカンマで区切って一覧表示することで、複数の列で並べ替えることができます。

    SELECT PetId, PetName
    FROM Pets
    ORDER BY PetName ASC, PetId ASC;
    
    SELECT PetId, PetName
    FROM Pets
    ORDER BY PetName ASC, PetId DESC;

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 7       | Bark      |
    | 2       | Fetch     |
    | 1       | Fluffy    |
    | 6       | Fluffy    |
    | 8       | Meow      |
    | 3       | Scratch   |
    | 5       | Tweet     |
    | 4       | Wag       |
    +---------+-----------+
    (8 rows affected)
    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 7       | Bark      |
    | 2       | Fetch     |
    | 6       | Fluffy    |
    | 1       | Fluffy    |
    | 8       | Meow      |
    | 3       | Scratch   |
    | 5       | Tweet     |
    | 4       | Wag       |
    +---------+-----------+
    (8 rows affected)

    2つのFluffysは、結果ごとに順序が異なることがわかります( PetIdを見るとわかります。 値)。これは、 PetNameが原因です。 列が最初に並べ替えられ、次に PetId 最初の並べ替えから重複を並べ替えました。

    非表示の列で並べ替え

    SELECTに含まれていない列で並べ替えることができます リスト。

    SELECT PetId, PetName
    FROM Pets
    ORDER BY DOB DESC;

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 5       | Tweet     |
    | 1       | Fluffy    |
    | 6       | Fluffy    |
    | 4       | Wag       |
    | 2       | Fetch     |
    | 3       | Scratch   |
    | 7       | Bark      |
    | 8       | Meow      |
    +---------+-----------+

    この場合、これらの結果から Tweet 最年少のペットで、 Meow 最古です。これは、生年月日( DOB )で並べ替えたためです。 )降順の列。

    念のために言っておきますが、ここでも DOBを使用しています。 SELECTに含まれる列 リスト。

    SELECT PetId, PetName, DOB
    FROM Pets
    ORDER BY DOB DESC;

    結果:

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

    実際、MeowとBarkに NULLがあることがわかります。 DOBの値 桁。したがって、実際に年上か年下かはわかりません。

    しかし、これは NULL 値は可能な限り低い値として扱われます。 NULLに注意してください クエリ実行時の値。

    パターンマッチング

    LIKEを使用できます パターンマッチングを使用する演算子。

    SELECT PetId, PetName
    FROM Pets
    WHERE PetName LIKE 'F%';

    結果:

    +---------+-----------+
    | PetId   | PetName   |
    |---------+-----------|
    | 1       | Fluffy    |
    | 2       | Fetch     |
    | 6       | Fluffy    |
    +---------+-----------+

    この例では、名前が文字 Fで始まるすべてのペットを検索します。 。パーセント記号( )は、0個以上の文字列に一致するワイルドカード文字です。プレフィックスまたはサフィックスとして使用でき、文字列の途中でも使用できます。

    別の例を示します。

    SELECT FirstName, LastName, Email
    FROM Owners
    WHERE Email LIKE '%@example.%';

    結果:

    +-------------+------------+-------------------+
    | FirstName   | LastName   | Email             |
    |-------------+------------+-------------------|
    | Homer       | Connery    | [email protected] |
    | Bart        | Pitt       | [email protected]  |
    +-------------+------------+-------------------+

    リストから選択

    IN 演算子は、指定された値がサブクエリまたはリストのいずれかの値と一致するかどうかを判別します。

    これが例です。

    SELECT 
        PetId, 
        PetName, 
        DOB 
    FROM Pets
    WHERE PetName IN ('Fluffy', 'Bark', 'Wag');

    結果:

    +---------+-----------+------------+
    | PetId   | PetName   | DOB        |
    |---------+-----------+------------|
    | 1       | Fluffy    | 2020-11-20 |
    | 4       | Wag       | 2020-03-15 |
    | 6       | Fluffy    | 2020-09-17 |
    | 7       | Bark      | NULL       |
    +---------+-----------+------------+

    サブクエリ

    INを使用できます サブクエリ(別のクエリ内にネストされたクエリ)を実行するときの演算子。

    これが例です。

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

    結果:

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

    これにより、1つのテーブルから列が返されました( PetTypes )。ただし、別のテーブルに対応する行が少なくとも1つある場合のみ( Pets PetTypeIdと一致するもの 列。

    これをさらに実証するために、これら2つの表の関連する内容を以下に示します。

    PetTypes テーブル:

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

    ペット テーブル:

    +-------------+-----------+
    | PetTypeId   | PetName   |
    |-------------+-----------|
    | 2           | Fluffy    |
    | 3           | Fetch     |
    | 2           | Scratch   |
    | 3           | Wag       |
    | 1           | Tweet     |
    | 3           | Fluffy    |
    | 3           | Bark      |
    | 2           | Meow      |
    +-------------+-----------+

    PetTypes テーブルにはペットタイプのRabbitが含まれています 、ただし、 Pets内のペットはありません テーブルにはそのタイプが割り当てられています(つまり、 4の値はありません Pets.PetTypeId内 列)。

    SQLの演算子の詳細については、12の一般的に使用されるSQL演算子とこのSQL演算子のリストを参照してください。

    参加

    SQL結合が「基本的なSQLクエリ」と見なされるかどうかは議論の余地がありますが、とにかくここに結合を含めます。

    したがって、この記事を締めくくるために、これが内部結合の例です。

    SELECT 
        p.PetName,
        pt.PetType
    FROM Pets p
    INNER JOIN PetTypes pt
    ON p.PetTypeId = pt.PetTypeId;

    結果:

    +-----------+-----------+
    | PetName   | PetType   |
    |-----------+-----------|
    | Fluffy    | Cat       |
    | Fetch     | Dog       |
    | Scratch   | Cat       |
    | Wag       | Dog       |
    | Tweet     | Bird      |
    | Fluffy    | Dog       |
    | Bark      | Dog       |
    | Meow      | Cat       |
    +-----------+-----------+

    この場合、 INNER JOINを使用しました すべてのペットの名前とそれぞれのペットの種類を返します。 ONを使用しました 結合された行の各ペアに対して評価される述部を指定する句。この場合、 p.PetTypeId 列はpt.PetTypeIdの外部キーです PetTypesの主キーである列 テーブル。

    この例では、テーブルでエイリアスも使用しました。これは、コードを簡潔に保つのに役立ちました。

    結合のその他の例については、SQL結合チュートリアルを参照してください。


    1. oraclePLSQLインタビューの質問

    2. Mac + virtualenv + pip + postgresql =エラー:pg_config実行可能ファイルが見つかりません

    3. 動的カーソルを使用した中央値の計算

    4. @@ IDENTITY、SCOPE_IDENTITY()、OUTPUT、および最後のIDを取得するその他のメソッド