内连接
以下を使用してデータをクエリすると、
Useinner join - on
句: 一致するすべての情報を表示します
select *
from emp e
inner join dept d
on e.deptno = d.deptno;
inner join - on
条項の欠点:
- 部門番号が 40 の場合、従業員情報は表示されず、クエリには表示されません。
- 従業員には部門番号情報がないため、クエリには表示されません。
したがって、内部接続を使用してクエリを実行すると、表示されるデータが不完全になることがあります。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
中程度はサポートされています)。