SQLのJOIN、パラレル、差分、交差
詳細
1、ユニオン形成並集
Unionは、2つ以上の結果セットを接続して「並列セット」を形成することができます.サブ結果セットのすべてのレコードを組み合わせて新しい結果セットを形成します.
1.1、限定条件
Unionで結果セットを接続する場合は、4つの限定条件があります.
(1)、サブ結果セットは同じ構造でなければなりません.
(2)、ワード結果セットの列数は同じでなければなりません.
(3)、サブ結果セットに対応するデータ型は互換性があること.
(4)、各サブ結果セットにorder byとcompute句を含めることはできません.
1.2、文法形式
select statement from tableName1 union[all] select statement from tableName1
allは、最終結果セットにすべてのローが含まれ、重複ローを削除できません.
例1:重複行の削除
例2:重複行を削除せずにすべて表示
2、Except形成差集
Exceptでは、2つ以上の結果セットを接続して「差セット」を作成できます.左の結果セットに既に存在するレコード、右の結果セットにないレコードを返します.
2.1、限定条件:
(1)、サブ結果セットは同じ構造でなければなりません.
(2)、サブ結果セットのカラム数は同じでなければなりません.
(3)、サブ結果セットに対応するデータ型は互換性があること.
(4)、各サブ結果セットにorder byとcompute句を含めることはできません.
2.2、文法形式:
select statement from tableName1 except select statement from tableName1
例:
4、minus-(oracle)
最初のクエリの結果と2番目のクエリの結果が異なるローレコード、つまり2つの結果の差セットを返します.
5、InterSectは交差を形成する
InterSectは、2つ以上の結果セットを接続して「交差」を形成することができます.左の結果セットと右の結果セットの両方のレコードを返します.
3.1、限定条件
結果セットをExceptで接続する場合、4つの限定条件があります.
(1)、サブ結果セットは同じ構造でなければなりません.
(2)、サブ結果セットのカラム数は同じでなければなりません.
(3)、サブ結果セットに対応するデータ型は互換性があること.
(4)、各サブ結果セットにorder byまたはcompute句を含めることはできません.
3.2、文法形式
select statement from tableName1 intersect select statement from tableName1
例:
4、join
テストテーブルの作成
表の通り--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下はクエリー・アナライザで実行します.
外部ジョイン:左外部ジョイン、右外部ジョインまたは完全外部ジョインを含む
1、左接続:left joinまたはleft outer join 1.1、左外部結合の結果セットは、結合列が一致する行だけでなく、LEFT OUTER句で指定された左テーブルのすべての行を含む.左のテーブルの行が右のテーブルに一致していない場合、関連する結果セットの行の右のテーブルのすべての選択リスト列はNullです.1.2、sql文select*from table 1 left join table 2 on table 1.id=table2.id-----------------結果----------id name id score--------------------------------------1 lee 1 90 2 zhang 2 100 4 wang NULL NULL
注記:table 1を含むすべての句は、指定された条件に従ってtable 2の対応するフィールドに返され、一致しないものはnullで表示されます.
2、右接続:right joinまたはright outer join 2.1、右外部結合は左外部結合の逆方向結合である.右のテーブルのすべてのローが返されます.右のテーブルの行が左のテーブルに一致していない場合、左のテーブルには空の値が返されます.2.2、sql文select*from table 1 right join table 2 on table 1.id=table2.id----------結果--------id name id score-----------------1 lee 1 90 2 zhang 2 100 NULL NULL 3 70注記table 2を含むすべての句は、指定された条件に従ってtable 1の対応するフィールドに戻り、一致しないものはnullで表示する
3、完全外部結合:full joinまたはfull outer join 3.1、完全外部結合は左テーブルと右テーブルのすべてのローを返します.行が別のテーブルに一致しない場合、別のテーブルの選択リスト列には空の値が含まれます.テーブル間に一致するローがある場合、結果セットのロー全体にベース・テーブルのデータ値が含まれます.3.2、sql文select*from table 1 full join table 2 on table 1.id=table2.id----------結果--------id name id score-----------------1 lee 1 90 2 zhang 2 100 4 wang NULL NULL NULL NULL NULL 3 70注記:左右接続の和(上左、右接続参照)
≪内部ジョイン|Internalジョイン|oem_src≫:内部ジョインは、結合する列の値を比較演算子で比較するジョインです.
1、内部接続:joinまたはinner join
2、sql文select*from table 1 join table 2 on table 1.id=table2.id----------結果----------id name id score-------------------------------1 lee 1 90 2 zhang 2 100
注記:条件を満たすtable 1とtable 2の列のみを返します.
3、等価(以下の実行効果と同じ)A:select a.*,b.*from table 1 a,table 2 b where a.id=b.idB:select*from table 1 cross join table 2 where table 1.id=table2.id(注:cross join後加条件はwhereのみ、onは使用できません)
クロスコネクション(完全)
1、概念:WHERE句のない交差結合は結合に関わる表のデカルト積を生じる.1番目のテーブルの行数に2番目のテーブルを乗じた行数は、デカルト積結果セットのサイズに等しい.(table 1とtable 2の交差接続は3*3=9レコードを生成)
2、クロスコネクション:cross join(条件なしwhere...)
3、sql文select*from table 1 cross join table 2----------結果----------id name id score------------------------1 lee 1 90 2 zhang 1 90 4 wang 1 90 1 lee 2 100 2 zhang 2 100 4 wang 2 100 1 lee 3 70 2 zhang 3 70 4 wang 3 70注記:3*3=9レコード、すなわちデカルト積を返す
4.等価(以下の実行効果と同じ)A:select*from table 1,table 2
1、ユニオン形成並集
Unionは、2つ以上の結果セットを接続して「並列セット」を形成することができます.サブ結果セットのすべてのレコードを組み合わせて新しい結果セットを形成します.
1.1、限定条件
Unionで結果セットを接続する場合は、4つの限定条件があります.
(1)、サブ結果セットは同じ構造でなければなりません.
(2)、ワード結果セットの列数は同じでなければなりません.
(3)、サブ結果セットに対応するデータ型は互換性があること.
(4)、各サブ結果セットにorder byとcompute句を含めることはできません.
1.2、文法形式
select statement from tableName1 union[all] select statement from tableName1
allは、最終結果セットにすべてのローが含まれ、重複ローを削除できません.
例1:重複行の削除
SELECT Name FROM Person_1
UNION
SELECT Name FROM Person_2
例2:重複行を削除せずにすべて表示
SELECT Name FROM Person_1
UNION ALL
SELECT Name FROM Person_2
2、Except形成差集
Exceptでは、2つ以上の結果セットを接続して「差セット」を作成できます.左の結果セットに既に存在するレコード、右の結果セットにないレコードを返します.
2.1、限定条件:
(1)、サブ結果セットは同じ構造でなければなりません.
(2)、サブ結果セットのカラム数は同じでなければなりません.
(3)、サブ結果セットに対応するデータ型は互換性があること.
(4)、各サブ結果セットにorder byとcompute句を含めることはできません.
2.2、文法形式:
select statement from tableName1 except select statement from tableName1
例:
SELECT Name FROM Person_1
EXCEPT
SELECT Name FROM Person_2
4、minus-(oracle)
最初のクエリの結果と2番目のクエリの結果が異なるローレコード、つまり2つの結果の差セットを返します.
SELECT Name FROM abc2
minus
SELECT Name FROM abc
5、InterSectは交差を形成する
InterSectは、2つ以上の結果セットを接続して「交差」を形成することができます.左の結果セットと右の結果セットの両方のレコードを返します.
3.1、限定条件
結果セットをExceptで接続する場合、4つの限定条件があります.
(1)、サブ結果セットは同じ構造でなければなりません.
(2)、サブ結果セットのカラム数は同じでなければなりません.
(3)、サブ結果セットに対応するデータ型は互換性があること.
(4)、各サブ結果セットにorder byまたはcompute句を含めることはできません.
3.2、文法形式
select statement from tableName1 intersect select statement from tableName1
例:
SELECT Name FROM Person_1
INTERSECT
SELECT Name FROM Person_2
4、join
テストテーブルの作成
create table table1(id int,name varchar(10))
create table table2(id int,score int)
insert into table1 select 1,'lee'
insert into table1 select 2,'zhang'
insert into table1 select 4,'wang'
insert into table2 select 1,90
insert into table2 select 2,100
insert into table2 select 3,70
表の通り--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以下はクエリー・アナライザで実行します.
外部ジョイン:左外部ジョイン、右外部ジョインまたは完全外部ジョインを含む
1、左接続:left joinまたはleft outer join 1.1、左外部結合の結果セットは、結合列が一致する行だけでなく、LEFT OUTER句で指定された左テーブルのすべての行を含む.左のテーブルの行が右のテーブルに一致していない場合、関連する結果セットの行の右のテーブルのすべての選択リスト列はNullです.1.2、sql文select*from table 1 left join table 2 on table 1.id=table2.id-----------------結果----------id name id score--------------------------------------1 lee 1 90 2 zhang 2 100 4 wang NULL NULL
注記:table 1を含むすべての句は、指定された条件に従ってtable 2の対応するフィールドに返され、一致しないものはnullで表示されます.
2、右接続:right joinまたはright outer join 2.1、右外部結合は左外部結合の逆方向結合である.右のテーブルのすべてのローが返されます.右のテーブルの行が左のテーブルに一致していない場合、左のテーブルには空の値が返されます.2.2、sql文select*from table 1 right join table 2 on table 1.id=table2.id----------結果--------id name id score-----------------1 lee 1 90 2 zhang 2 100 NULL NULL 3 70注記table 2を含むすべての句は、指定された条件に従ってtable 1の対応するフィールドに戻り、一致しないものはnullで表示する
3、完全外部結合:full joinまたはfull outer join 3.1、完全外部結合は左テーブルと右テーブルのすべてのローを返します.行が別のテーブルに一致しない場合、別のテーブルの選択リスト列には空の値が含まれます.テーブル間に一致するローがある場合、結果セットのロー全体にベース・テーブルのデータ値が含まれます.3.2、sql文select*from table 1 full join table 2 on table 1.id=table2.id----------結果--------id name id score-----------------1 lee 1 90 2 zhang 2 100 4 wang NULL NULL NULL NULL NULL 3 70注記:左右接続の和(上左、右接続参照)
≪内部ジョイン|Internalジョイン|oem_src≫:内部ジョインは、結合する列の値を比較演算子で比較するジョインです.
1、内部接続:joinまたはinner join
2、sql文select*from table 1 join table 2 on table 1.id=table2.id----------結果----------id name id score-------------------------------1 lee 1 90 2 zhang 2 100
注記:条件を満たすtable 1とtable 2の列のみを返します.
3、等価(以下の実行効果と同じ)A:select a.*,b.*from table 1 a,table 2 b where a.id=b.idB:select*from table 1 cross join table 2 where table 1.id=table2.id(注:cross join後加条件はwhereのみ、onは使用できません)
クロスコネクション(完全)
1、概念:WHERE句のない交差結合は結合に関わる表のデカルト積を生じる.1番目のテーブルの行数に2番目のテーブルを乗じた行数は、デカルト積結果セットのサイズに等しい.(table 1とtable 2の交差接続は3*3=9レコードを生成)
2、クロスコネクション:cross join(条件なしwhere...)
3、sql文select*from table 1 cross join table 2----------結果----------id name id score------------------------1 lee 1 90 2 zhang 1 90 4 wang 1 90 1 lee 2 100 2 zhang 2 100 4 wang 2 100 1 lee 3 70 2 zhang 3 70 4 wang 3 70注記:3*3=9レコード、すなわちデカルト積を返す
4.等価(以下の実行効果と同じ)A:select*from table 1,table 2