MySQLのDQL詳細(マルチテーブル)
6648 ワード
前回はみんなに持ってきて、MySQLの中で単表の検索に対して、今回、友达に多表の検索操作について詳しく話します!
私达の実际の运用の中で、きっと単纯に1枚の表のクエリーではありませんて、いくつかのデータ量の大きい复雑な関系に対して表して、私达は主外のキーの间の関系を利用して接続する必要があって、この时、私达の多表のクエリーに関わりました!マルチテーブル・クエリーでは、結果セットのマージ、内部接続、外部接続、サブクエリーの4つのタイプに分けます.
では、ブロックを分けて理解しましょう.
結果セットのマージ
集計結果セットは、総じて、クエリーが必要な2つのテーブルを接続し、観察を容易にします.
ないぶせつぞく
上記の操作は、私たちのLIMITクエリー(グループクエリー)と同じように、よく理解すれば、MySQLに属する「方言」です.つまり、私たちが使用しているデータベースがMySQLではない場合(Oracleなど)、この文は役に立たないということです.
このコマンドは、私たちの中で最も正規の文法を接続しています.ONキーワードの後ろの条件は、主に私たちが必要としないデカルト積を除去するためです.
デカルト積については、私たちのメタグループが生成したときに発生した不要なゴミデータです.ここでは必要ありません.だから、条件でフィルタリングする必要があります.
がいぶせつぞく
外接続はまた左外接続と右外接続(以下、左外と右外と呼ぶ)に分けられ、左接続の実際の意味は左表のすべてのデータを検出することであり、右表に対応するデータがなければnullで補う.右接続逆!
左外
右の外
全外
以上の方式については、MySQLではサポートされていませんが、MySQLではどのようにして全外の接続方式を完了しますか?
実は簡単で、左外、右外、合併結果セットを一緒に使うだけで、解決できます~
サブクエリ
サブクエリは、最も簡単な言葉で言えば、クエリの中にクエリがセットされています.クエリが必要なデータが、私たちが初めてクエリした結果セットに基づいている場合、サブクエリを使用する必要があります.固定された基本構文はありません.
一般的に、サブクエリは2つの形式で表示されます. FROMの後に置かれた新しい表 はWHEREの後、条件 として置く
テーブルとして
上のような形で、内層SELECT文を1回目のクエリの結果として、その上で、再度クエリを行います.これも私たちのサブクエリの中で比較的簡単なものです.
条件として
サブクエリが条件として現れる場合は、単行単列、単行多列、多行単列の3つのケースに分けられます(また、複数行多列の場合もありますが、実際には新しいテーブルで、上のボケはすでに与えられています).次に、この3つのケースがそれぞれ対応する効果を見てみましょう.
1行1列
1行複数列
複数行の単列
以上、DQLのマルチテーブルについて説明しました.ここまで、SQLの4つの操作DDL、DML、DCL、DQLについては、すべて終わります.
何か間違ったことがあったら、コメントして指導してください.ありがとうございます.
私达の実际の运用の中で、きっと単纯に1枚の表のクエリーではありませんて、いくつかのデータ量の大きい复雑な関系に対して表して、私达は主外のキーの间の関系を利用して接続する必要があって、この时、私达の多表のクエリーに関わりました!マルチテーブル・クエリーでは、結果セットのマージ、内部接続、外部接続、サブクエリーの4つのタイプに分けます.
では、ブロックを分けて理解しましょう.
結果セットのマージ
SELECT * FROM
UNION ALL
SELECT * FROM ;
集計結果セットは、総じて、クエリーが必要な2つのテーブルを接続し、観察を容易にします.
ないぶせつぞく
SELECT * FROM , ;
上記の操作は、私たちのLIMITクエリー(グループクエリー)と同じように、よく理解すれば、MySQLに属する「方言」です.つまり、私たちが使用しているデータベースがMySQLではない場合(Oracleなど)、この文は役に立たないということです.
SELECT * FROM INNER JOIN ON ;
このコマンドは、私たちの中で最も正規の文法を接続しています.ONキーワードの後ろの条件は、主に私たちが必要としないデカルト積を除去するためです.
デカルト積については、私たちのメタグループが生成したときに発生した不要なゴミデータです.ここでは必要ありません.だから、条件でフィルタリングする必要があります.
がいぶせつぞく
外接続はまた左外接続と右外接続(以下、左外と右外と呼ぶ)に分けられ、左接続の実際の意味は左表のすべてのデータを検出することであり、右表に対応するデータがなければnullで補う.右接続逆!
左外
SELECT * FROM LEFT OUTER JOIN ON ;
右の外
SELECT * FROM RIGHT OUTER JOIN ON ;
全外
SELECT * FROM FULL OUTER JOIN ON ;
以上の方式については、MySQLではサポートされていませんが、MySQLではどのようにして全外の接続方式を完了しますか?
実は簡単で、左外、右外、合併結果セットを一緒に使うだけで、解決できます~
SELECT * FROM LEFT OUTER JOIN ON
UNION ALL
SELECT * FROM RIGHT OUTER JOIN ON ;
サブクエリ
サブクエリは、最も簡単な言葉で言えば、クエリの中にクエリがセットされています.クエリが必要なデータが、私たちが初めてクエリした結果セットに基づいている場合、サブクエリを使用する必要があります.固定された基本構文はありません.
一般的に、サブクエリは2つの形式で表示されます.
テーブルとして
SELECT * FROM (SELECT * FROM WHERE ) WHERE ;
上のような形で、内層SELECT文を1回目のクエリの結果として、その上で、再度クエリを行います.これも私たちのサブクエリの中で比較的簡単なものです.
条件として
サブクエリが条件として現れる場合は、単行単列、単行多列、多行単列の3つのケースに分けられます(また、複数行多列の場合もありますが、実際には新しいテーブルで、上のボケはすでに与えられています).次に、この3つのケースがそれぞれ対応する効果を見てみましょう.
1行1列
SELECT * FROM WHERE [=、>、<、>=、<=、<>] (SELECT * FROM WHERE );
1行複数列
SELECT * FROM WHERE [IN、ALL、ANY] (SELECT * FROM WHERE );
複数行の単列
SELECT * FROM WHERE ( , ) IN (SELECT * FROM WHERE );
以上、DQLのマルチテーブルについて説明しました.ここまで、SQLの4つの操作DDL、DML、DCL、DQLについては、すべて終わります.
何か間違ったことがあったら、コメントして指導してください.ありがとうございます.