これまでに、データベースを作成し、2つのテーブルを追加し、両方のテーブルにデータを挿入しました。次に、そのデータを取得する方法を見ていきます。ただし、取得だけではありません データですが、クエリ そのためのデータベース。
SQLはStructuredQuery Languageの略です 。 クエリです SQLを非常に強力にするビット。 SQLは、クエリを実行できる言語です。 あなたのデータベースに対して。 クエリが可能になります 必要なデータのデータベース。
SQL SELECT ステートメント
MySQLデータベースのクエリに関しては、SQL SELECT ステートメントはそれをすべて可能にします。これは、MySQLを使用するときに最も頻繁に使用されるSQLステートメントである可能性があります。 SELECT ステートメントを使用すると、MySQLに取得するデータを正確に記述することができます。
次のSQLステートメントについて考えてみます。
SELECT * FROM Fruit;
結果は次のとおりです。
これはSELECTです 最も単純なステートメント。上記のSQLステートメントは、
Fruit
からすべてのレコードを取得します テーブル。
アスタリスク( * )すべての列を返すようにMySQLに指示します。これにより、時間と労力を節約できます。これがないと、返したいすべての列の名前を書き込む必要があります。
そうは言っても、返したい列だけを返すようにMySQLに指示することもできます。これは、返したい列のみに名前を付けることによって行われます。このように:
SELECT FruitId, FruitName FROM Fruit;
結果は次のとおりです。
上記のSQLステートメントは FruitId を選択します および FruitName Fruit の列 テーブル。
これを行うと、混乱を減らして、関心のある列だけが表示されるようになります。また、MySQL(および使用するアプリケーション)が不要なデータを返すために貴重なリソースを使用する必要がないため、パフォーマンスが向上します。
>繰り返しますが、このクエリはすべてを取得します テーブルのレコード—特に指定がない限り、MySQLはすべてのレコードを返します。
WHERE 条項
WHEREを追加できます 結果セットを関心のあるレコードのみに絞り込むための句。次のように:
SELECT * FROM Fruit WHERE UnitId = 1;
結果:
上記のクエリは、
Fruit
からすべてのレコードを返します
UnitId
が存在するテーブル 列の値は1 。
サブクエリ—ネストされた SELECT ステートメント
UnitId
がわからなかった場合はどうなりますか ?ユニット名がPieceのレコードのみを検索することがわかっている場合はどうなりますか。 ?
簡単!上記の例を書き直して、ネストされた SELECTを使用することができます。 ステートメント(別名サブクエリ )別のテーブル(
Units
テーブル)。これを行うと、実際のユニットの名前を使用できるようになります (IDではなく)2番目のテーブルの UnitNameにこれが含まれているため フィールド:
SELECT * FROM Fruit
WHERE UnitId =
(SELECT UnitId
FROM Units
WHERE UnitName = 'Piece'); 結果:
ここでは、ネストされた SELECTを使用します ステートメント(つまり、 SELECT SELECT内のステートメント ステートメント)
ユニット
をクエリします
UnitId
のテーブル Pieceを含むレコードの その
UnitName
として 価値。
Fruit.UnitId
が原因で、これを実行できます。 columnは、
Units.UnitId
への外部キーです。 桁。
興味がある場合は、サブクエリの例をさらに示します。
SQLの使用JOIN
さらに一歩進んで、ネストされた SELECTを書き直すことができます。 INNER JOINへのステートメント 。
SQLでは、 JOIN データを共有する複数のテーブルをクエリできます。この場合、両方のテーブルが UnitIdを共有します したがって、これらはこのフィールドに「参加」していると言えます。
SQLにはさまざまな種類の結合がありますが、主に INNER JOINに関心があります。 今のところ。
INNER JOIN 構文は次のようになります:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
したがって、サブクエリを前の例から次のように書き直すことができます。
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
結果:
Fruit。*を指定しました *だけでなく
Fruit
からすべての列を返したかっただけだからです テーブル。 *を使用した場合 、クエリは両方のテーブルからすべての列を返します。
LEFT JOINもチェックしてください およびRIGHTJOIN 結合タイプに応じて異なるデータを取得する方法を確認します。
サブクエリとJOIN ?
同じ結果を達成するための2つの方法を見てきましたが、どちらが優れているのか疑問に思われるかもしれません。
サブクエリは読みやすく(そしておそらく理解しやすい)傾向があるため、初心者が理解しやすくなります。
ただし、多くのSQLプログラマーは JOINを見つけます sより効率的で、パフォーマンスが向上します。クエリまたはアプリケーションでパフォーマンスの問題が発生した場合は、サブクエリを JOINに変換してみてください sまたはその逆(場合によっては、サブクエリのパフォーマンスが向上する可能性があります)。
また、サブクエリが唯一のオプションである場合もあるため、これも考慮事項です。
その他のオペレーター
これまでのクエリにはすべて等号( =)が含まれています )。これはオペレーターと呼ばれます 。具体的には、比較演算子です。 ある式を別の式と比較するためです。
クエリで使用できる演算子は他にもたくさんあります。これらは、結果セットを必要なレコードのみに絞り込むのに大いに役立ちます。データベースに数百万のレコードが含まれることは珍しくありません。数千のレコードしかない場合でも、これらのオペレーターを自由に使用できない場合は、数千のレコードの中から1つのレコード(またはほんの一握り)を見つけるのは非常に困難な作業になります。
以下に、より一般的に使用されるSQL演算子の一部を示します。
>コード> オペレーター
>を使用できます より大きいデータを選択する演算子 与えられた値より。
SELECT * FROM Fruit WHERE Inventory > 10;
<コード> オペレーター
<を使用できます 少ないデータを選択する演算子 与えられた値より。
SELECT * FROM Fruit WHERE Inventory < 10;
<> オペレーター
<>を使用できます との両方よりも小さいデータを選択する演算子 与えられた値より大きい。
SELECT * FROM Fruit WHERE Inventory <> 10;
> = オペレーター
> =を使用できます 演算子を使用して、指定された値以上のデータを選択します。
SELECT * FROM Fruit WHERE Inventory >= 10;
<= オペレーター
<=を使用できます 指定された値以下のデータを選択する演算子。
SELECT * FROM Fruit WHERE Inventory <= 10;
AND オペレーター
ANDを追加できます WHEREの演算子 2つの条件を満たすレコードのみに選択を制限するための句(または、より多くの AND を含める場合はそれ以上) 演算子)。
次に例を示します:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
またはコード> オペレーター
ORを使用できます 演算子を使用して、選択範囲を複数の基準に広げます。名前が示すように、 OR 句を使用すると、基準がこのまたはのいずれかであるデータを選択できます それ。したがって、 AND 演算子制限 選択とまたは 演算子拡大
次に例を示します:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
BETWEEN オペレーター
BETWEENを使用します 演算子を使用して、指定された2つの値の間にあるデータを選択します。
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
NOT オペレーター
NOTを使用する ではないデータを選択する演算子 与えられた条件に相当します。
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');