この記事には、初心者がデータベースからデータを取得するために使用できる基本的な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結合チュートリアルを参照してください。