id
firstName
lastName
book_id1 スターウォーズ 2 ジュラシックパーク 3 小さな女性 4 トム・ソーヤー
本のテーブルには、すべての本に1つの行があります。」
画像では、左円またはテーブルのすべてのデータが結果セットに含まれていることがわかります。書籍テーブルから重複するデータのみが右のテーブルから含まれています。これは、左結合がある場合、右のテーブルの一部のデータが除外される可能性があることを意味します。
右の結合は、「私の図書館内のすべての本を、借りた顧客と一緒に尋ねるようなものです。
この画像では、右のテーブル内のすべてのデータが結果セットに含まれていることがわかります。顧客テーブルから重複するデータのみが含まれています。これは、右結合で、左のテーブルの一部のデータが除外される可能性があることを意味します。
外側の結合は、それらの間のつながりに関係なく、「
すべてのローンとすべての本を見せてください。」この画像では、データが重複するかどうかに関係なく、両方のテーブルのすべてのデータが含まれることがわかります。このようなクエリが完了すると、結果に重複しないデータがあり、それらのフィールドはnullに設定されます。
内側の結合は、ローンを持つ顧客のみを尋ねるようなものです。
ここでは、左と右のテーブルの両方からデータが除外される可能性があることがわかります。顧客が本を出していない場合は顧客が表示されず、貸し出されていない場合は本が表示されません!
これは最も一般的なタイプのデータであり、キーワード結合自体を使用する場合のデフォルトの動作です。追加された「内側」という単語は通常必要ありません。とにかく「左」と「右」とはどういう意味ですか? 「左」と「右」をソースの順序に過ぎないと考えることができます。このクエリを見てください:
Joinキーワードを使用する前に、テーブルの顧客に言及したことに注意してください。これは、顧客が私の「左」のテーブルであることを意味します。それについての別の考え方は、参加キーワードの残りのテーブルと、それが右側にあるものを尋ねることです。
1つのテーブルが「左」のテーブルであるという理由だけで、すべてのレコードを選択しているという意味ではありません。これは、ソースオーダーではなく、左結合または右結合の機能です!
左側のテーブルには、選択セクションで列を具体的に選択しない限り、結果セットに最初に列がリストされます。
十分なレビュー。これらの新しい結合は何ですか?
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>
まあ、彼らは「新しい」ものではなく、追加の質問を照会する方法にすぎません。クエリに「Do n't」または「Not」という言葉がある質問に対する答えをどのように見つけますか?
貸し出しの本を持っていないすべての顧客を見せてください。
これは左結合のように見えますが、「オーバーラップ」データが含まれていません。なぜ?これは、貸し出しの本がない顧客を尋ねるのと同じです。」とは、本なしですべての顧客を選択して、特別割引でニュースレターを送信したいですか?
賢い場合は、同じことをするために、顧客テーブルを0のbook_idを検索するだけであると思うかもしれません。それはこの例では機能しますが、ほとんどの場合はそうではありません。テーブルの設計方法に依存します。クエリは次のようになります:
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>
データを除外するか、それをフィルタリングして、ほとんど検索のようです。では、なぜ私たちはbooks.idがヌルであることを探しているのですか?なぜそれはヌルでしょうか?標準の左結合を実行して、返品するデータを確認しましょう。答えがあります: 左に結合してreturn data
id
を含むすべての顧客を見せてください」と尋ねると、ジェフリーはローンの本を持っているかどうかに関係なく顧客であるため、上記のデータが必要になります。これは、この場合の左結合の機能です。 「
ローンに関する本がない顧客を見せてください」という質問をすると、何を探すべきかは完全に理にかなっています。 books.id列にnullが表示される場所で顧客を選択する必要があります(結合すると、「id」という名前の2つの列があるため、id1とラベル付けされます)。 books.idがnullである場所を追加する場合、条項でこれを行います。これで、結果はこれだけにフィルタリングされます:
idexclusion
を右に結合します
通常の右の結合は、貸し出されているかどうかに関係なくすべての本を返します。結果セットは次のようになります。
id
firstName
lastName
book_id
id1
タイトル
1
ジョー
吹く
1
1
スターウォーズ
2
ジェーン
うーん
2
2
ジュラシックパーク
3
ハリー
カラス
2
2
ジュラシックパーク
ヌル
ヌル
ヌル
ヌル
3
小さな女性
ヌル
ヌル
ヌル
ヌル
4
トム・ソーヤー
これは少し違って見えます。まず、ジュラシックパークが2回リストされていることに気付くかもしれません。これは、2人が貸し出しの本を持っているため、データベースが各試合の行を返しているからです。
顧客テーブルからのすべての対応する列は、小さな女性とトム・ソーヤーにとってヌルであることに注意してください。貸し出されていないすべての本を選択したい場合は、where句を使用してcustomers.id列に「null」を見つけるだけです。
結果は予測可能である必要があります。貸し出されていない本のみを入手します
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>
firstName
この結合はあまり役に立たないが、本質的にローンのない両方の顧客と、同時に貸し出されていない本のリストを提供する。 このような奇妙な結合は、テーブル間に接続せずに文字通りデータを選択する必要がある場合に役立つ場合があります。おそらく、あなたは孤児のデータを探しているか、あなたが変換したいくつかの古いデータベースで矛盾を探しているでしょう。
実際、この種の結合は非常に奇妙であるため、mysqlでもできないので、外側の結合をサポートしていません。通常のSQLはそうであり、クエリは次のようになります(mysqlではなくmssql):
このクエリの結果は、次のように見えるデータを返します:
id
firstName
<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>WHERE books.id IS NULL
lastName
book_id実際の値としてnullを持つことができないフィールドに対するWhere句を常に使用する必要があります!値としてnullを持つことができないIDフィールドに対して常にテストしました。私たちの本のテーブルに、nullを許可するISBNフィールドがあると想像してください。そのそのフィールドを使用してnullをテストした場合、それは私たちが望まないかもしれない行を含むでしょう!
Cross Joinと呼ばれる別の結合がありますが、これも奇妙でユニークです。 1人のユーザーを1冊の本に一致させるだけでなく、すべてのユーザーがすべての本と一致したと想像してください!はい、これは、20冊の本と30人の顧客がある場合、クロス参加すると30列のデータが生じることを意味します。これがどのように役立つかの例については、この記事をチェックしてください。MySQLでは、結合、内部結合、およびクロスジャンが構文等価であり、互いに交換できることに注意してください。これは、JoinとInner Joinが同じことを行い、オンキーワードを使用して列を一致させる必要があるためです。クロス結合を使用する場合、テーブルAのすべての行Aを表Bのすべての行に一致させるため、キーワードにはありません。
結論
「以前に注文したことのないすべての顧客を見つけてください」
「ブラックリストに載っていないすべての顧客を見つける」 SQL結合は、それらの間の関連列に基づいて、2つ以上のテーブルから行を組み合わせるために使用されます。 SQL結合には4つの基本的なタイプがあります。インナー結合、左結合、右結合、フル参加。 Inner Joinは、両方のテーブルに一致する値を持つレコードを返します。左の結合は、左のテーブルからすべてのレコードを返し、右のテーブルから一致したレコードを返します。右の結合は、右のテーブルからすべてのレコードを返し、左のテーブルから一致したレコードを返します。左のテーブルまたは右のテーブルのいずれかにマッチがある場合、完全な結合はすべてのレコードを返します。
以上があなたがよく知っているはずの3つの参加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。