目次
外部接続を使用する理由
外部結合の概要
左結合と右結合joins
外部結合演習①
外部結合の演習②
ホームページ データベース mysql チュートリアル MySQL でデータテーブルの外部結合を使用する方法

MySQL でデータテーブルの外部結合を使用する方法

Jun 03, 2023 pm 03:02 PM
mysql

外部接続を使用する理由

「外部接続」が使用される理由を説明する前に、レコードを見てみましょう。 (以下の通り:)

MySQL でデータテーブルの外部結合を使用する方法

表中の Zhang San には部門番号がないため、固定の部門が設置されていない「臨時職員」として一時的に分類されます。

このようなシナリオでは、問題が発生します。各従業員の名前と所属部署を問い合わせたい場合、内部結合を使用する場合、リンク条件が`「従業員テーブル」の「部門番号」=「「部門テーブル」の部門番号」となっているため、 』、『張三』が懐かしくなります。 「Zhang San」には「部門番号」がありませんが、「臨時職員」として会社のメンバーでもあるため、この問題を解決するには外部結合の構文を導入する必要があります。そうしないと、一部の論理データが失われます。 。

外部結合の概要

外部結合と内部結合の違い:

内部結合の結果には、接続条件を満たすレコードのみが表示され、レコードは接続条件を満たさないものは表示されますが、結果セットには表示されません。

データ接続条件が満たされているかどうかに関係なく、外部接続は特別な方法で結果セットに表示されます。 (たとえば、上記の従業員の部門番号情報をクエリする場合、「Zhang San」には部門番号がないため、内部結合が使用される場合、「Zhang San」は「接続条件」を満たさないため、結果に表示されません)

外部結合の例は次のとおりです。

SELECT 
	e.empno, e.ename, d.dname
FROM
	t_emp e
LEFT JOIN t_dept d ON e.deptno = d.deptno;

-- 在连接的时候仍然是链接 "员工表" 与 "部门表" ,只不过连接关键字由 "JOIN" 变成了 "LEFT JOIN" (下文再为大家详细解释)
-- 两张表的连接条件还是使用 "ON" 关键字去连接的 , 连接条件依然是 "员工表" 的 "部门编号" = "部门表" 的 "部门编号" 

-- LEFT JOIN 为 "外连接" 的 "左外连接" ;(在 "外连接" 中,是分为 "左外连接" 与 "右外连接" 的)

-- 在该SQL语句中 "LEFT JOIN" 左右各有数据表  "t_emp e" 与 "t_dept d" 
-- 所以这里的 "左连接" 的意思就是:保留 左表 的所有记录,然后与 右表 去连接,如果 右表 有符合条件的记录,则正常连接即可;
-- 如果 右表 没有符合条件的连接记录, 右表 则展示 "NULL" 值与 "左表" 去匹配
ログイン後にコピー

MySQL でデータテーブルの外部結合を使用する方法

左結合と右結合joins

「左外部結合」は、接続操作中に、左側のテーブルのすべてのレコードが保持され、右側のテーブルに接続されることを意味します。左のテーブルは右のテーブルに接続され、右のテーブルに条件を満たすレコードがあれば、右のテーブルに条件を満たすレコードがない場合は「NULL」で左のテーブルと接続されます。

「左結合」との違いは「右結合」です。「右結合」は「左結合」の逆です。右のテーブルのすべてのレコードを保持し、左のテーブルの修飾されたレコードを結合します。 ; 同様に、左側のテーブルに条件を満たすレコードがない場合は、「NULL」を使用して右側のテーブルを結合します。

右結合 SQL ステートメントの例:

SELECT 
	e.empno, e.ename, d.dname
FROM
	t_dept d
RIGHT JOIN t_emp e ON e.deptno = d.deptno;

-- 这里有个需要注意的地方,就是相较于上文中的 "左连接" ,这里的 "右连接" 左右两张的表的位置做了调换
ログイン後にコピー

MySQL でデータテーブルの外部結合を使用する方法

ここでも、「Zhang San」には「部門」がないことがわかります。番号」の記録。したがって、「左結合」と「右結合」の違いはそれほど大きくありません。

外部結合演習①

各部門の名前とその部門の人数をクエリしますか?

この質問は簡単そうに見えますが、難しい点が 2 つあり、間違いやすい箇所もあります。詳しくは、以下の SQL 文の例と模式図を参照してください。

SELECT 
    d.deptno, d.dname, COUNT(*)
FROM
    t_dept d LEFT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno;
ログイン後にコピー

MySQL でデータテーブルの外部結合を使用する方法

OK、ここからが問題の始まりです。

皆さん、ここの「40」-「OPERATIONS」部門に注目してください。実際にはこの部門には誰もいません、つまり人数は「0」ですが、奇妙なことに、統計が作成されると、カウントされる人数は「1」です これはなぜですか?

これは、グループ化を使用するときに「左結合」を使用し、すべてのデータを左側のテーブルに保持するためです。したがって、グループ化には左側のテーブルの「deptno」に従います。 (左側のテーブルのレコードが保持されるため、グループ化も左側のテーブルに従ってグループ化する必要があります。次のキーは "COUNT(*)" で、有効なすべてのレコードの数をカウントします。左側のテーブル「t_dept」のレコードが右側のテーブル「t_emp」に接続されると、右側のテーブルは「NULL」値を使用して左側のテーブル「t_dept」に接続します。接続が完了すると、 valid Record. 有効なレコードなので「COUNT(*)」 統計結果は「1」です

つまり、40部門の統計結果が「1」であることは理解できますが、これは結果が望むものではありません。どう対処すればよいですか? 解決するにはどうすればよいですか? 以下の SQL ステートメントを参照してください。

SELECT 
    d.deptno, d.dname, COUNT(e.deptno)
FROM
    t_dept d LEFT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno;
ログイン後にコピー

MySQL でデータテーブルの外部結合を使用する方法

この SQL ステートメントはまだ非常に優れています。多くの詳細と考慮されていない状況。本当に一度書いた場合のみ。これらの攻撃が気づかれるときのみ。

外部結合の演習②

部門名と人数を取得します。部門がない場合は、部門名の代わりに「NULL」を使用してください (これは実際には「Zhang San」を指します)

おそらく、今使用したのはすべてを保持するための「左外部結合」だと思うでしょう。部門テーブル内のレコードです。これは単なる「右」外部結合ではありませんか? 実際... 。それほど単純ではありません。

この演習の SQL ステートメントは、「UNION」を使用して実装する必要があります。 " キーワード。複数のクエリ ステートメントの結果セットをマージするには (重複を除外するため)、"UNION" キーワードを使用します。

"UNION"关键字 在 SQL 语句中的用法如下:

(SQL查询语句) UNION (SQL查询语句) -- 如果存在多条查询语句的话,可以继续使用 UNION 关键字 连接

PS:这里需要注意一下,“UNION” 合并多少个结果集其实无所谓,关键是这些结果集的字段数量和字段的名称必须要相同 。如果说第一个 SQL 查询语句返回的是 10个 字段,第二个返回的是 2个字段 ,这种情况是完全没办法合并的。

(SELECT 
	d.deptno, d.dname, COUNT(e.deptno)
FROM
	t_dept d LEFT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno)
UNION
(SELECT 
	d.deptno, d.dname, COUNT(*)
FROM
	t_dept d RIGHT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno);

-- 第一个查询语句,得到的结果集是各个部门的人数。
-- 第二个查询语句,得到的结果集是隶属于各个部门的人数,但是因为 "张三" 是一个没有部门所属的 "临时工"
-- 所以两个查询语句的结果集合并之下没救如下图所示。
ログイン後にコピー

MySQL でデータテーブルの外部結合を使用する方法

以上がMySQL でデータテーブルの外部結合を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Apacheのデータベースに接続する方法 Apacheのデータベースに接続する方法 Apr 13, 2025 pm 01:03 PM

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerによるMySQLを開始する方法 DockerによるMySQLを開始する方法 Apr 15, 2025 pm 12:09 PM

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

Centosはmysqlをインストールします Centosはmysqlをインストールします Apr 14, 2025 pm 08:09 PM

CentOSにMySQLをインストールするには、次の手順が含まれます。適切なMySQL Yumソースの追加。 yumを実行して、mysql-serverコマンドをインストールして、mysqlサーバーをインストールします。ルートユーザーパスワードの設定など、MySQL_SECURE_INSTALLATIONコマンドを使用して、セキュリティ設定を作成します。必要に応じてMySQL構成ファイルをカスタマイズします。 MySQLパラメーターを調整し、パフォーマンスのためにデータベースを最適化します。

See all articles