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

MySQLクエリ

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

    1. OracleでのページングのためのLIMITおよびOFFSETの代替

    2. MySQLでn番目のランクを見つける方法は?

    3. IDENT_CURRENT()を使用して、SQLServerのID列の現在のID値を返します

    4. MySQLのインデックスを理解する:パート2