ホームページ > バックエンド開発 > PHPチュートリアル > あなたがよく知っているはずの3つの参加

あなたがよく知っているはずの3つの参加

Joseph Gordon-Levitt
リリース: 2025-02-16 13:06:13
オリジナル
522 人が閲覧しました

あなたがよく知っているはずの3つの参加

キーテイクアウト

  • この記事では、左の結合、右結合、内側結合、および外部の結合の使用について説明します。2つの表を備えたブックローンデータベースの簡単な例を使用して、顧客と本。
  • SQL結合の「左」と「右」の概念は、ソース順序以外に何も明確にされていません。結合キーワードの前に言及されたテーブルは、「左」のテーブルであり、その後のテーブルは「右」のテーブルです。
  • この記事では、除外で結合するという概念を紹介します。これは、「not」または「not」という言葉を含むクエリに役立ちます。これらの結合は、特にNULL値を探すときに、where句を使用してデータを除外します。
  • 除外を伴う外側の結合は、MySQLではサポートされていませんが、テーブル間の接続のないデータを選択するのに役立つと説明されています。
  • 実際の値としてnullを持たないフィールドに対して常に句を使用する必要があることが強調されています。また、Cross Joinは、テーブルAのすべての行Aと表Bのすべての行に一致するユニークな結合であることに注意してください。
  • 2つのデータベーステーブルからデータを結合し、必要な情報をフィルタリングする方法はたくさんあります。クレイグ・バックラーは、理解の参加について人気のある部分を書きました。すなわち、内側、左、右、完全な外側。この記事は、その1つの延長です
  • これらを本当に素早く要約しましょう。 2つのテーブル、1つは顧客向け、もう1つは本ローンデータベースを確立するための本用です。
  • 顧客のテーブル

id

firstName

lastName

book_id 1 ジョー 吹く 1 2 ジェーン うーん 2 3 ハリー カラス 2 4 ジェフリー 雪 0 本の表 id タイトル

1 スターウォーズ 2 ジュラシックパーク 3 小さな女性 4 トム・ソーヤー

本のテーブルには、すべての本に1つの行があります。 顧客テーブルには、一度に貸し出して1冊しか持っていない顧客ごとに1つの行があります。彼らが貸し出しの本がない場合、book_idは0または空の文字列になります。 これは、参加をできるだけ明確にするための非常に簡単な例です! ここに左の結合は、「ローンに関する本を含むすべての顧客を見せてください。」などの質問をしたい場合は、

画像では、左円またはテーブルのすべてのデータが結果セットに含まれていることがわかります。書籍テーブルから重複するデータのみが右のテーブルから含まれています。これは、左結合がある場合、右のテーブルの一部のデータが除外される可能性があることを意味します。

右の結合は、「私の図書館内のすべての本を、借りた顧客と一緒に尋ねるようなものです。

この画像では、右のテーブル内のすべてのデータが結果セットに含まれていることがわかります。顧客テーブルから重複するデータのみが含まれています。これは、右結合で、左のテーブルの一部のデータが除外される可能性があることを意味します。

外側の結合は、それらの間のつながりに関係なく、「

すべてのローンとすべての本を見せてください。」

この画像では、データが重複するかどうかに関係なく、両方のテーブルのすべてのデータが含まれることがわかります。このようなクエリが完了すると、結果に重複しないデータがあり、それらのフィールドはnullに設定されます。

内側の結合は、ローンを持つ顧客のみを尋ねるようなものです。

あなたがよく知っているはずの3つの参加

ここでは、左と右のテーブルの両方からデータが除外される可能性があることがわかります。顧客が本を出していない場合は顧客が表示されず、貸し出されていない場合は本が表示されません!

これは最も一般的なタイプのデータであり、キーワード結合自体を使用する場合のデフォルトの動作です。追加された「内側」という単語は通常必要ありません。

とにかく「左」と「右」とはどういう意味ですか? 「左」と「右」をソースの順序に過ぎないと考えることができます。このクエリを見てください:

あなたがよく知っているはずの3つの参加 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」という言葉がある質問に対する答えをどのように見つけますか?

貸し出しの本を持っていないすべての顧客を見せてください。

    貸し出されていないすべての本を見せてください。
  • exclusion
  • を左に結合します
  • このグラフィックを見てください。上記の違いが日陰のエリアに結合されていることに注意してください。

これは左結合のように見えますが、「オーバーラップ」データが含まれていません。なぜ?これは、貸し出しの本がない顧客を尋ねるのと同じです。」とは、本なしですべての顧客を選択して、特別割引でニュースレターを送信したいですか?

賢い場合は、同じことをするために、顧客テーブルを0のbook_idを検索するだけであると思うかもしれません。それはこの例では機能しますが、ほとんどの場合はそうではありません。テーブルの設計方法に依存します。

クエリは次のようになります:

<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ここでWhere句が含まれています。 Where句があるときはいつでも、

データを除外するか、それをフィルタリングして、ほとんど検索のようです。では、なぜ私たちはbooks.idがヌルであることを探しているのですか?なぜそれはヌルでしょうか?標準の左結合を実行して、返品するデータを確認しましょう。答えがあります: 左に結合してreturn data

id firstName lastName book_id id1 タイトル 1 ジョー 吹く 1 1 スターウォーズ 2 ジェーン うーん 2 2 ジュラシックパーク 3 ハリー カラス 2 2 ジュラシックパーク 4 ジェフリー 雪 0 ヌル ヌル この問題がわかりますか?これは左の結合であり、本との重複に関係なく、顧客テーブルからのすべてのデータが含まれています。ジェフリー・スノーは含まれていますが、彼はローンの本を持っていません。これが「ID1」と「タイトル」列がNULLに設定されている理由です。テーブルが結合されたとき、彼にリンクされた本のタイトルや本IDはありません。 「

を含むすべての顧客を見せてください」と尋ねると、ジェフリーはローンの本を持っているかどうかに関係なく顧客であるため、上記のデータが必要になります。これは、この場合の左結合の機能です。

ローンに関する本がない顧客を見せてください

」という質問をすると、何を探すべきかは完全に理にかなっています。 books.id列にnullが表示される場所で顧客を選択する必要があります(結合すると、「id」という名前の2つの列があるため、id1とラベル付けされます)。 books.idがnullである場所を追加する場合、条項でこれを行います。これで、結果はこれだけにフィルタリングされます:

id firstName lastName book_id id1 タイトル 4 ジェフリー 雪 0 ヌル ヌル 貸し出しの本を持っていないすべての顧客がいます。

exclusion

を右に結合します

右結合で同じことをしましょう。誰にも貸し出されていないすべての本を見つけましょう。

あなたがよく知っているはずの3つの参加通常の右の結合は、貸し出されているかどうかに関係なくすべての本を返します。結果セットは次のようになります。 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>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
id

firstName lastName book_id id1 タイトル ヌル ヌル ヌル ヌル 3 小さな女性 ヌル ヌル ヌル ヌル 4 トム・ソーヤー 除外を備えた外側の結合 最後の結合は次のように見えます。

この結合はあまり役に立たないが、本質的にローンのない両方の顧客と、同時に貸し出されていない本のリストを提供する。 このような奇妙な結合は、テーブル間に接続せずに文字通りデータを選択する必要がある場合に役立つ場合があります。おそらく、あなたは孤児のデータを探しているか、あなたが変換したいくつかの古いデータベースで矛盾を探しているでしょう。

実際、この種の結合は非常に奇妙であるため、mysqlでもできないので、外側の結合をサポートしていません。通常のSQLはそうであり、クエリは次のようになります(mysqlではなくmssql):あなたがよく知っているはずの3つの参加

このクエリの結果は、次のように見えるデータを返します:

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 id1 タイトル 1 ジェフリー 雪 0 ヌル ヌル ヌル ヌル ヌル ヌル 3 小さな女性 ヌル ヌル ヌル ヌル 4 トム・ソーヤー クレイグ・バックラーが組合で説明したメソッドを使用して外側の結合を達成することができますが、それには潜在的な問題がないわけではありません。 MySQLで完全な外側結合をシミュレートするためのGoogleのトップ結果は2006年からであり、ここにあります。それはやや複雑になる可能性があります。 上記のコードで気付く主なことは、両方のテーブルから除外したいため、結合の両側のnullをチェックすることです。両側をチェックせずに、私たちはちょうど話し合った他の1つの参加者になってしまうだけです。 このようなクエリを奇妙またはサポートしているかどうかに関係なく、それを使用する理由を考えることができれば、有効なタイプの結合であるため、私はそれを含めたかったのです。

他の考え

実際の値としてnullを持つことができないフィールドに対するWhere句を常に使用する必要があります!値としてnullを持つことができないIDフィールドに対して常にテストしました。私たちの本のテーブルに、nullを許可するISBNフィールドがあると想像してください。そのそのフィールドを使用してnullをテストした場合、それは私たちが望まないかもしれない行を含むでしょう!

Cross Joinと呼ばれる別の結合がありますが、これも奇妙でユニークです。 1人のユーザーを1冊の本に一致させるだけでなく、すべてのユーザーがすべての本と一致したと想像してください!はい、これは、20冊の本と30人の顧客がある場合、クロス参加すると30列のデータが生じることを意味します。これがどのように役立つかの例については、この記事をチェックしてください。

MySQLでは、結合、内部結合、およびクロスジャンが構文等価であり、互いに交換できることに注意してください。これは、JoinとInner Joinが同じことを行い、オンキーワードを使用して列を一致させる必要があるためです。クロス結合を使用する場合、テーブルAのすべての行Aを表Bのすべての行に一致させるため、キーワードにはありません。

結論

これらの数人の参加者があなたに理にかなっていることを願っています。何かが他のものと一致しないテーブル間でデータを求めているときはいつでもそれらを使用することを考えてください。

「以前に注​​文したことのないすべての顧客を見つけてください」

「ブラックリストに載っていないすべての顧客を見つける」
  • 「販売されていないすべての製品を見つけます」
  • 「本を借りるのではなく、すべての顧客を見つける」
  • 「最近歩いていないすべての犬を見つける」。
  • 「サポートチケットを送ったことがない従業員を見つける」
  • 要約すると、データベースとテーブルの定義方法に応じて、Where句を使用してnull値をチェックする必要がある場合があります。通常の結合動作を使用します。
  • だから…クロス結合が必要だったことはありますか?あなたが私たちに伝えたい、または私たちにカバーしたい他の特定のユースケースはありますか?お知らせください!
  • SQLが結合することについてよくある質問(FAQ)
結合されたさまざまな種類のSQLは何ですか?互いにどのように異なりますか?

​​SQL結合は、それらの間の関連列に基づいて、2つ以上のテーブルから行を組み合わせるために使用されます。 SQL結合には4つの基本的なタイプがあります。インナー結合、左結合、右結合、フル参加。 Inner Joinは、両方のテーブルに一致する値を持つレコードを返します。左の結合は、左のテーブルからすべてのレコードを返し、右のテーブルから一致したレコードを返します。右の結合は、右のテーブルからすべてのレコードを返し、左のテーブルから一致したレコードを返します。左のテーブルまたは右のテーブルのいずれかにマッチがある場合、完全な結合はすべてのレコードを返します。SQLクエリに参加ステートメントを追加するだけで、SQLで複数の結合を使用できます。各参加ステートメントには、参加の条件を指定する句の上に独自のステートメントが必要です。クエリの結合ステートメントの順序は結果に影響を与える可能性があるため、複数の結合を使用する場合、クエリのロジックを慎重に検討することが重要です。 ?

SQLの3テーブル結合は、それらの間の関連列に基づいて3つのテーブルが組み合わされるタイプの結合です。これは、SQLクエリに2つの参加ステートメントを使用して行われます。最初のJoinステートメントは最初の2つのテーブルを組み合わせ、2番目のJoinステートメントは、最初の結合の結果を3番目のテーブルと組み合わせます。結合ステートメントの順序と条項で指定された条件は、テーブルの結合方法を決定します。左結合とSQLの右結合の違いは、テーブルが結合される順序と返される結果です。左の結合は、左のテーブルからすべてのレコードを返し、右のテーブルから一致したレコードを返します。一致がない場合、結果は右側にヌルです。一方、右の結合は、右のテーブルからすべてのレコードを返し、左のテーブルから一致したレコードを返します。一致しない場合、結果は左側にnullです。

sql結合を視覚化するにはどうすればよいですか?

sql結合を視覚化することは、venn図を使用して実行できます。図の各円はテーブルを表します。サークルがオーバーラップする領域は、結合によって返されるレコードを表します。内側の結合の場合、重複領域のみが表示されます。左結合の場合、すべての左円と重複領域が表示されます。右結合の場合、すべての右円と重複領域が表示されます。完全に結合するには、両方の円の領域全体が表示されます。左または右のテーブルのいずれかで一致しています。一致がない場合、結果はどちらの側にもヌルです。このタイプの結合は、結合されている列間に一致しない場合でも、両方のテーブルからすべてのレコードを保持する場合に役立ちます。 🎜>はい、2つ以上のテーブルでSQL結合を使用できます。これは、SQLクエリに複数の参加ステートメントを使用して行われます。各JOINステートメントは2つのテーブルを組み合わせているため、3つのテーブルに参加するには、2つの参加ステートメントを使用して、4つのテーブルに参加し、3つの参加ステートメントなどを使用します。 SQL結合を使用するときに避けるべきいくつかの一般的な間違いには、句の指定を忘れることが含まれます。これにより、デカルト製品になる可能性があります。結果が誤っています。また、クエリの参加ステートメントの順序が結果に影響を与える可能性があることを覚えておくことも重要です。そのため、クエリのロジックを慎重に検討することが重要です。

以上があなたがよく知っているはずの3つの参加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート