[MySQL] 外部結合クエリ

内连接以下を使用してデータをクエリすると、

Useinner join - on句: 一致するすべての情報を表示します

select * 
from emp e
inner join dept d
on e.deptno = d.deptno;

ここに画像の説明を挿入

inner join - on条項の欠点:

  1. 部門番号が 40 の場合、従業員情報は表示されず、クエリには表示されません。
  2. 従業員には部門番号情報がないため、クエリには表示されません。

したがって、内部接続を使用してクエリを実行すると、表示されるデータが不完全になることがあります2 つのテーブルで一致しない情報を表示したい場合は、外连接クエリを使用できます。

外部結合には次のものが含まれます。

  • 左外部結合:left outer join
  • 右外部結合:right outer join

PS : 使用する過程ではouter省略できます。

左外部結合を使用すると、左側のテーブルの情報が一致しなくてもデータを表示でき、
右外部結合を使用すると、右側のテーブルの情報が一致しなくてもデータを表示できます。

完全外部結合:full outer join

この構文は、左側と右側のテーブルに一致しないデータをすべて表示しますが、mysqlではサポートされていませんが、 ではoracleサポートされています。

select *
from emp e
full outer join dept d
on e.deptno = d.deptno;

1064 構文エラーを返します。

1064 - SQL 構文にエラーがあります。
MySQL サーバーのバージョンに対応するマニュアルを参照して、3 行目の「full external join dept d on e.deptno = d.deptno」付近で使用する正しい構文を確認してください。

unionただし、このロジックは構文 を使用して実装でき、キーワードunionは左と右の外部結合クエリの結合を表します。

1.unionフェッチユニオンを使用すると自動的に重複排除が行われるため、効率が低くなります

select *
from emp e
left outer join dept d
on e.deptno = d.deptno
union -- 并集-去重-效率低
select * 
from emp e
right outer join dept d
on e.deptno = d.deptno;

2.union allユニオンを重複排除せずに使用するため、効率が高くなります

select *
from emp e
left outer join dept d
on e.deptno = d.deptno
union all -- 并集-不去重-效率高
select * 
from emp e
right outer join dept d
on e.deptno = d.deptno;

mysql集合演算のサポートは弱く、和集合演算のみがサポートされ、交差演算と差分演算はサポートされていません (oracle中程度はサポートされています)。

おすすめ

転載: blog.csdn.net/hold_on_qlc/article/details/130460584