これまでに、データベースを作成し、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');