キーテイクアウト
- この記事では、左の結合、右結合、内側結合、および外部の結合の使用について説明します。2つの表を備えたブックローンデータベースの簡単な例を使用して、顧客と本。 SQL結合の「左」と「右」の概念は、ソース順序以外に何も明確にされていません。結合キーワードの前に言及されたテーブルは、「左」のテーブルであり、その後のテーブルは「右」のテーブルです。
- この記事では、除外で結合するという概念を紹介します。これは、「not」または「not」という言葉を含むクエリに役立ちます。これらの結合は、特にNULL値を探すときに、where句を使用してデータを除外します。 除外を伴う外側の結合は、MySQLではサポートされていませんが、テーブル間の接続のないデータを選択するのに役立つと説明されています。
- 実際の値としてnullを持たないフィールドに対して常に句を使用する必要があることが強調されています。また、Cross Joinは、テーブルAのすべての行Aと表Bのすべての行に一致するユニークな結合であることに注意してください。
- 2つのデータベーステーブルからデータを結合し、必要な情報をフィルタリングする方法はたくさんあります。クレイグ・バックラーは、理解の参加について人気のある部分を書きました。すなわち、内側、左、右、完全な外側。この記事は、その1つの延長です これらを本当に素早く要約しましょう。 2つのテーブル、1つは顧客向け、もう1つは本ローンデータベースを確立するための本用です。
- 顧客のテーブル
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」という言葉がある質問に対する答えをどのように見つけますか?
貸し出しの本を持っていないすべての顧客を見せてください。
- 貸し出されていないすべての本を見せてください。
- 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
を含むすべての顧客を見せてください」と尋ねると、ジェフリーはローンの本を持っているかどうかに関係なく顧客であるため、上記のデータが必要になります。これは、この場合の左結合の機能です。 「
ローンに関する本がない顧客を見せてください」という質問をすると、何を探すべきかは完全に理にかなっています。 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>id
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のすべての行に一致させるため、キーワードにはありません。
結論
これらの数人の参加者があなたに理にかなっていることを願っています。何かが他のものと一致しないテーブル間でデータを求めているときはいつでもそれらを使用することを考えてください。
「以前に注文したことのないすべての顧客を見つけてください」
「ブラックリストに載っていないすべての顧客を見つける」- 「販売されていないすべての製品を見つけます」 「本を借りるのではなく、すべての顧客を見つける」
- 「最近歩いていないすべての犬を見つける」。
- 「サポートチケットを送ったことがない従業員を見つける」
- 要約すると、データベースとテーブルの定義方法に応じて、Where句を使用してnull値をチェックする必要がある場合があります。通常の結合動作を使用します。
- だから…クロス結合が必要だったことはありますか?あなたが私たちに伝えたい、または私たちにカバーしたい他の特定のユースケースはありますか?お知らせください!
- SQLが結合することについてよくある質問(FAQ)
SQL結合は、それらの間の関連列に基づいて、2つ以上のテーブルから行を組み合わせるために使用されます。 SQL結合には4つの基本的なタイプがあります。インナー結合、左結合、右結合、フル参加。 Inner Joinは、両方のテーブルに一致する値を持つレコードを返します。左の結合は、左のテーブルからすべてのレコードを返し、右のテーブルから一致したレコードを返します。右の結合は、右のテーブルからすべてのレコードを返し、左のテーブルから一致したレコードを返します。左のテーブルまたは右のテーブルのいずれかにマッチがある場合、完全な結合はすべてのレコードを返します。
以上があなたがよく知っているはずの3つの参加の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

Dreamweaver Mac版
ビジュアル Web 開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。
