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
を使用してみてください 代わりにステートメント。