はじめに
この記事は以前の書き方を引き続き踏襲しており、さまざまな結合の違いを誰もが理解できるように、シンプルでわかりやすい例を使用しています。
なぜ結合する必要があるのですか
なぜ結合する必要があるのでしょうか? 中国語で結合とは接続を意味し、接続とは1つのテーブルと複数のテーブルを関連付けるアソシエーションを意味します。データベース テーブルを扱うとき、複数のテーブルから情報を取得し、複数のテーブルから複数のフィールド データを組み立てて、それを呼び出し元に返す必要があることがよくあります。したがって、結合の前提として、これらのテーブル間に関連するフィールドが存在する必要があります。
結合の分類
結合は内部結合と外部結合の2種類に分かれており、外部結合には左外部結合、右外部結合、完全外部結合の3種類があります。これは、左結合と呼ばれます。
結合は内部結合と外部結合の2種類に分かれており、外部結合は左外部結合、右外部結合、完全外部結合の3種類に分けられます。また、左外部結合は左外部結合とも呼ばれます。略して左結合。
さまざまな結合の違い
さまざまな結合の違いを紹介する前に、簡単な例を見てみましょう:
シーンの説明:
インターネット時代では、誰もがオンライン ショッピング、特に淘宝網と JD.com を好みます。 . したがって、私たちが選んだシーンは、オンラインショッピングでも誰もが知っているものです。これは、ある人物とその人物がモールで購入した商品に関する物語です
上記のニーズに応えて、tb_person と tb_order という 2 つのテーブルを作成しました。ここで、tb_person はこの人物の説明であり、tb_order はその人物の購入に関するものです。商品の説明。
tb_person はその人が誰であるかを知る必要があるだけなので、同様に、tb_order も非常に単純です。誰がどの製品を購入したかがわかるため、必要なフィールドは oid、oname (製品名)、pid (購入者番号) の 3 つだけです。
tb_person:
+-----------+-------------+------+-----+---- ----------+----------------+
| フィールド | デフォルト |
--+---------------+-----+-----+-----------+---------- ------+
| いいえ | varchar(50) |はい | --------+----------------+注文:+------+----- ---- ----+------+-----+----------+----------------+| フィールド タイプ | デフォルト | +-----------+------+--- ---+--- -------+----------------+
| いいえ | varchar(11) | はい | -------------+------+-----+----------+--- ---------- ---+
次に、サンプル データを上記 2 つのテーブルに書き込みます:
tb_person のデータ:
+-----+----- ------+---- ------+
| 名 |
+-----+-----------+-- --------+
| 1 | チェン | | 3 | ------+ tb_person テーブルには、andy Chen、irri Wan、abby Sun の 3 人がいます tb_order:+--- --+------- ---+-----+| イド |+-----+----------+ ------+| 1 | 本 1 |
| 4 |
+
tb_order テーブルには 3 つのデータが記録されており、個人番号は 1 です。つまり、アンディ チェンは本と電話という 2 つのアイテムを購入しました。もう 1 つの個人番号 4 があります。ある人は製品、コンピューターを購入しました。これについて疑問があるかもしれませんが、なぜ tb_person テーブルに従業員番号 4 の人物が存在しないのでしょうか?ここでは、登録ユーザーが多いため、ユーザー テーブル戦略を採用していると仮定します。したがって、従業員番号 4 のユーザーは別の従業員テーブルに存在する可能性があります。
前の説明から、テーブル間を結合したい場合は、関連付けられたフィールドが必要であることがわかります。上記の例では、関連付けられたフィールドが pid であることがわかります。
tb_person と tb_order という 2 つのテーブルによると、次の 3 つの状況がわかります:
person テーブルの人が製品を購入した、つまり、order テーブルにユーザーの製品購入の記録があり、クエリを実行できます。このテーブルから、ユーザーが購入した製品を調べます。たとえば、Andy Chen は書籍と電話という 2 つの製品を購入しました。つまり、pid は tb_person テーブルと tb_order テーブルの両方に存在します。 irri Wan と abby Sun などの製品。この 2 人のユーザーは商品を購入しませんでした。つまり、pid は tb_person テーブルにのみ存在します。
商品を購入したユーザーは、order テーブル内にレコードを見つけることができません。たとえば、pid 4 のユーザーがコンピューターを購入しましたが、tb_person テーブルにはユーザーのレコードがありません。つまり、pid は tb_order テーブルにのみ存在します。
上記の 3 つの状況を理解します。は、結合を理解するのに非常に役立ちます。 次に、各結合の違いを詳細に分析します:
INNER JOIN
いわゆる内部結合とは、前述した状況 1 を意味します。pid は両方のテーブル tb_person に存在する必要があります。と tb_order;
MariaDB [demo]> SELECT p.pid, p.firstname, o.oname -> FROM tb_person p -> INNER JOIN tb_order o -> ON p.pid=o.pid;
+-----+----------+-- -----+
| +----------+------+
| 本 |
| --------+------+
LEFT JOIN
tb_person LEFT JOIN tb_order は、上記のケース 1 とケース 2 の結合を意味します。 LEFT JOIN の結果セットには、INNER JOIN の結果だけでなく、商品を購入しなかった tb_person 内のすべてのユーザーのセットも含まれます。
MariaDB [demo]> SELECT p.pid, p.firstname, o.oname -> FROM tb_person p -> LEFT JOIN tb_order o -> ON p.pid=o.pid;
+-----+-----------+------+
| 名前 |
+-----+-- ---------+------+
| 1 |
| 1 | andy | phone |
| 2 | irri | NULL |
| 3 | abby | NULL |
+-----+-----------+-------+
RIGHT JOIN
tb_person RIGHT JOIN tb_order的意思是上述情形1和情形3的并集。RIGHT JOIN的结果集不仅包含INNER JOIN的结果,而且还包含所有tb_order中所有已经购买商品的用户但该用户记录不存在于tb_person表。
MariaDB [demo]> SELECT p.pid, p.firstname, o.oname -> FROM tb_person p -> RIGHT JOIN tb_order o -> ON p.pid=o.pid;
+------+-----------+----------+
| pid | firstname | oname |
+------+-----------+----------+
| 1 | andy | book |
| 1 | andy | phone |
| NULL | NULL | computer |
+------+-----------+----------+
FULL JOIN
故名思议,FULL JOIN就是上述情形1,2,3的并集了,但是mysql数据库不支持full join查询,所以我们只能LEFT JOIN union RIGHT JOIN,才能得到FULL JOIN的结果。
MariaDB [demo]> SELECT p.pid, p.firstname, o.oname -> FROM tb_person p -> LEFT JOIN tb_order o -> ON p.pid=o.pid -> UNION -> SELECT p.pid, p.firstname, o.oname -> FROM tb_person p -> RIGHT JOIN tb_order o -> ON p.pid=o.pid;
+------+-----------+----------+
| pid | firstname | oname |
+------+-----------+----------+
| 1 | andy | book |
| 1 | andy | phone |
| 2 | irri | NULL |
| 3 | abby | NULL |
| NULL | NULL | computer |
+------+-----------+----------+
注:我们上述的sql语句全部基于mysql数据库执行。
总结
本文主要描述了sql join的分类以及各种join的区别,通过简单的示例,让大家更清晰的去了解他们。至于什么时候使用join要视具体的情况而定,根据不同的需求采用不同的策略。
非常感谢大家的热心回复,可能有些问题的探讨超出了本文的范畴,但是非常乐意大家提出问题,然后大家一起去探索去发现。
引用
NULL
附件
demo.sql文件
create database demo; use demo; create table tb_person ( pid int(11) auto_increment, firstname varchar(50), lastname varchar(50), primary key(pid) ); create table tb_order ( oid int(11) auto_increment, oname varchar(50), pid int(11), primary key(oid) ); insert into tb_person(firstname, lastname) values('andy','chen'); insert into tb_person(firstname, lastname) values('irri','wan'); insert into tb_person(firstname, lastname) values('abby','sun'); insert into tb_order(oname, pid) values('book', 1); insert into tb_order(oname, pid) values('phone', 1); insert into tb_order(oname, pid) values('computer', 4);

MySQLデータベースをアップグレードする手順には次のものがあります。1。データベースをバックアップします。2。現在のMySQLサービスを停止します。3。MySQLの新しいバージョンをインストールします。アップグレードプロセス中に互換性の問題が必要であり、Perconatoolkitなどの高度なツールをテストと最適化に使用できます。

MySQLバックアップポリシーには、論理バックアップ、物理バックアップ、増分バックアップ、レプリケーションベースのバックアップ、クラウドバックアップが含まれます。 1. Logical BackupはMySqldumpを使用してデータベースの構造とデータをエクスポートします。これは、小さなデータベースとバージョンの移行に適しています。 2.物理バックアップは、データファイルをコピーすることで高速かつ包括的ですが、データベースの一貫性が必要です。 3.インクリメンタルバックアップは、バイナリロギングを使用して変更を記録します。これは、大規模なデータベースに適しています。 4.レプリケーションベースのバックアップは、サーバーからバックアップすることにより、生産システムへの影響を減らします。 5. Amazonrdsなどのクラウドバックアップは自動化ソリューションを提供しますが、コストと制御を考慮する必要があります。ポリシーを選択するときは、データベースサイズ、ダウンタイム許容度、回復時間、および回復ポイントの目標を考慮する必要があります。

mysqlclusteringenhancesdatabaserobustnessnessnessnessnessnistandistributiondistributingdataacrossmultiplenodes.itesthendbenginefordatareplication andfaulttolerance、保証highavailability.setupinvolvesconfiguringmanagement、data、ssqlnodes、carefulmonitoringringandpe

MySQLのデータベーススキーマ設計の最適化は、次の手順を通じてパフォーマンスを改善できます。1。インデックス最適化:一般的なクエリ列にインデックスを作成し、クエリのオーバーヘッドのバランスをとり、更新を挿入します。 2。テーブル構造の最適化:正規化または反通常化によりデータ冗長性を削減し、アクセス効率を改善します。 3。データ型の選択:Varcharの代わりにINTなどの適切なデータ型を使用して、ストレージスペースを削減します。 4。パーティション化とサブテーブル:大量のデータボリュームの場合、パーティション化とサブテーブルを使用してデータを分散させてクエリとメンテナンスの効率を改善します。

tooptimizemysqlperformance、soflowthesesteps:1)properindexingtospeedupqueries、2)useexplaintoanalyzeandoptimize Queryperformance、3)AductServerContingSettingStingsinginginnodb_buffer_pool_sizeandmax_connections、4)

MySQL関数は、データ処理と計算に使用できます。 1.基本的な使用には、文字列処理、日付計算、数学操作が含まれます。 2。高度な使用法には、複数の関数を組み合わせて複雑な操作を実装することが含まれます。 3.パフォーマンスの最適化では、Where句での機能の使用を回避し、GroupByおよび一時テーブルを使用する必要があります。

MySQLでデータを挿入するための効率的な方法には、次のものが含まれます。1。insertInto ...値構文、2。LoadDatainFileコマンドの使用、3。トランザクション処理の使用、4。バッチサイズの調整、5。Insurtignoreまたは挿入の使用...

MySQLでは、AlterTabletable_nameaddcolumnnew_columnvarchar(255)afterexisting_columnを使用してフィールドを追加し、andtabletable_namedopcolumncolumn_to_dropを使用してフィールドを削除します。フィールドを追加するときは、クエリのパフォーマンスとデータ構造を最適化する場所を指定する必要があります。フィールドを削除する前に、操作が不可逆的であることを確認する必要があります。オンラインDDL、バックアップデータ、テスト環境、および低負荷期間を使用したテーブル構造の変更は、パフォーマンスの最適化とベストプラクティスです。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

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

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









