sqlのleft join、rightjin、inner joinとカンマの違い

2548 ワード

left join(左連結)は、左のテーブルのすべてのレコードと右のテーブルの連結フィールドが等しいレコードを返します。 
ライトジョン(右接続)は、右のテーブルのすべてのレコードと左のテーブルの連結フィールドが等しいレコードinner join(等値接続)を返します。二つのテーブルの連結フィールドが等しい行だけを返します。
以下の例を示します  -------------------------------------------- 表Aの記録は以下の通りである。aID aNum 1 a 20050111 2 a 20050112 3 a 20050113 4 a 20050114 5 a 20050115
テーブルBの記録は以下の通りである。bID bName 1 2006032401 2 2006032402 3 2006032403 4 2006032404 8 2006032408。
----------------------1.left join sql文は以下の通りである。 
select * from A
left join B 
on A.aID = B.bID
結果は以下の通りです
a ID aNum bID bName 1 a 20050111 1 2006032401 2 a 20050112 2 2006032402 3 a 20050113 3 2006032403 4 a 20020020050114 4 a 2006032404 a 20050115NULL NULL
(影響された行数は5行)結果説明:left jinはAテーブルの記録をベースにしています。Aは左の表と見られます。Bは右の表と見られます。left jinは左の表を基準としています。つまり、左の表(A)の記録はすべて表します。右の表(B)は検索条件に合致した記録のみが表示されます。B表の記録が足りないところは全部NULLです。--------------------------2.right join sql文は以下の通りです。 
select * from A
right join B 
on A.aID = B.bID
その結果、aID aNum bID bName 1 a 20050111 1 a 2006032401 2 a 2006032402 3 a 20050113 3 2006032403 4 a 20020050114 4 2006032404 NULLNULL 8 2006032408
(影響する行数は5行)その結果は、よく見ると、left jinの結果とは正反対で、今回は右の表(B)をベースにしています。Aの足りない部分はNULLで充填しています。---------------------------------------------3 inner join sql文は以下の通りです。 
select * from A
inner join B 
on A.aID = B.bID
結果は以下の通りです
a ID aNum bID bName 1 a 20050111 1 2006032401 2 a 20050112 2 2006032402 3 a 20050113 3 2006032403 4 a 20020020050114 4 2006032404
明らかにここにはA.aID=B.bIDの記録のみが表示されています。これはinner joinが誰を基礎としていないことを示しています。条件に合った記録だけを表示しています。--------------------------------------------------------------------------------------  LEFT JOINは、任意のFROM子文において、ソーステーブルのレコードを組み合わせるために動作します。LEFT JOIN演算を使って左外部接続を作成します。左の外部接続は、最初の(左)から始まる二つの表のすべてを含んでいます。第二(右)の表に該当する値が記録されていません。
文法:FROM table 1 LEFT JOIN table 2 ON table 1.field 1 complable 2.field 2
説明:テーブル1、テーブル2パラメータは、記録を組み合わせたいテーブルの名前を指定するために使用されます。field 1,field 2パラメータは、接続されたフィールドの名前を指定します。これらのフィールドは同じデータタイプと同じタイプのデータが必要ですが、同じ名前が必要ではありません。compprパラメータは、関係比較演算子を指定します。「=」、「<>」、「=」、「>=」または「<>」。INNER JOIN操作でMemoデータタイプまたはOLED Objectデータを含むフィールドを接続するとエラーが発生します。 
4.コンマ
select * from a, b where a.id = 1 and a.id = b.id
暗黙的に接続するには、該当する行のみがあります。
select * from a left join b on a.id=b.id where a.id = 1
A表のすべての記録をもとにA、B両表を接続します。条件はa.id=b.id where a.id=1で、満足していません。
の条件B表の内容はNULLです。
カテゴリ:  データベース関連