1. ホーム
  2. データベース
  3. mssql2005

SQL Server 2005における外部結合の使用法

2022-01-09 09:22:22

SQL Server 2005における外部結合の使用法 I.

生徒テーブル、生徒選択テーブルの2つのテーブルがあり、テーブルのデータは次のとおりです。

生徒のテーブル

学生のコース選択フォームです。

全学生のコース選択情報を表示するには

外側joinステートメントを使った標準SQLステートメントは

use stu_course
select L.sno,sname,ssex,sage,sdept,cno,grade
from student L,sc
where L.sno=sc.sno(*)


理論的な結果は

しかし、SQLServer2005で実行すると、次のようなエラーが発生します。

メッセージ 102、レベル 15、ステータス 1、行 4
'*'付近に構文エラーがあります。 

SQLServer 2005 では、対応する T-SQL 文は次のようになります。

use stu_course
select L.sno,sname,ssex,sage,sdept,cno,grade
from student L left join sc
on L.sno=sc.sno


実行した結果は

また、on の後に where 修飾子を付けることもできます。

use stu_course
select L.sno,sname,ssex,sage,sdept,cno,grade
from student L left join sc
on L.sno=sc.sno
where L.sno in(95001,95002,95003,95004)



この時点では、実行結果は

上記の例は、左外部結合クエリです。つまり、結果テーブルには、すべての

2番目のテーブルに結合条件を満たす行がある場合、対応する値が返され、そうでない場合はNULLが返されます。

SQLServer 2005における外部結合クエリの使用法(続き)。

学生テーブル、学生選択テーブル、コーステーブルの3つのテーブルがあり、以下のデータがあります。

生徒のテーブル

学生のコース選択フォームです。

カリキュラム

 左結合のクエリの例。

use stu_course
select L.sno,sname,ssex,sage,sdept,cno,grade
from student L left join sc
on L.sno=sc.sno



その結果は

右結合クエリの例です。

use stu_course
select sno,course.cno,course.cname
from sc right join course
on sc.cno=course.cno



その結果は

完全な外部リンクのクエリの例。

use stu_course
select sno,course.cno,course.cname
from sc full join course
on sc.cno=course.cno



その結果は

このフルアウトレットの左右のテーブルの順番を入れ替えると

use stu_course
select sno,course.cno,course.cname
from course full join sc
on sc.cno=course.cno



その結果、やはり

上記の例からわかるように

       (a) 左外部結合の場合、結果テーブルには条件を満たす最初のテーブルの行がすべて含まれ、2番目のテーブルに結合条件を満たす行があれば対応する値を返し、そうでなければNULLを返します。 

       右外部結合の場合、結果テーブルは条件を満たす2番目のテーブルの行をすべて含み、最初のテーブルに結合条件を満たす行がある場合は対応する値を返し、そうでない場合はNULLを返します。 

       完全外部結合の場合、結果テーブルは条件を満たす両方のテーブルの行をすべて含み、どちらかのテーブルに結合条件を満たす行がある場合は対応する値を返し、そうでない場合はNULLを返します。