Articles

SQL CROSS JOIN

Posted on

SQL Cross Join は、両方のテーブルの Cartesian Product を返します。 デカルト積とは、テーブル1の行数とテーブル2の行数を掛け合わせたものです。 SQL Server Cross Joinでは、2つのテーブルを結合するために共通のカラムを必要としません。

SQL CROSS JOIN Chart

上のスクリーンショットから、SQL Server Cross Joinが2つのテーブルのデカルト積を表示することが容易に理解できるでしょう。 つまり、テーブルAのすべてのレコードがテーブルBのすべてのレコードと結合しているということです

SQL Cross Join Syntax

SQL ServerにおけるCross Joinの構文は

-- SQL Server Cross Join SyntaxSELECT Table1.Column(s), Table2.Column(s),FROM Table1 CROSS JOIN Table2 --OR We can Simply Write it asSELECT Table1. Column(s), Table2. Column(s),FROM Table1, Table2 

このSQL Server Cross Joinの例では、2つのテーブル(EmployeeとDepartment)を使用します。 Employeeテーブルに存在するデータ

SQL CROSS JOINの例

SQL Server Departmentテーブルに存在するデータは以下の通りです。

SQL CROSS JOIN

SQL Cross Join Select * Example

次のCross Joinクエリは、SQL ServerのDepartmentテーブルに存在するすべての列を表示します。 は、従業員 & 部署テーブル

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT * FROM CROSS JOIN ;

以下のJoinスクリーンショットを見ると、120レコードが表示されています。 120件のレコードが表示されています。 これは、Employeeの15行とDepartmentテーブルの8行を掛け合わせていることを意味します

SQL CROSS JOIN 3

注意:個別のカラム名を選択することをお勧めします。

SQL Cross Join Select Few Columns Example

先に述べたように、不要なカラムを避けるために、SELECTステートメントの後に必要なカラムを選択してください。 次のクロス ジョイン クエリは、Employee テーブルと Department テーブルに存在するカラムの Cartesian Product を表示します。

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,FROM CROSS JOIN 

SQL CROSS JOIN 4

SQL Cross Join 曖昧なカラム

上記のTransactクエリは、両方のテーブル(EmployeeとDepartment)のカラム名が上記のように異なっていれば、問題なく動作します。 もし、両方のテーブルに同じカラム名があった場合はどうなるでしょうか? 上記のような方法では、エラーが発生してしまいます。

実際の例を挙げてみましょう。

-- SQL Server Cross Join ExampleUSE SQLTESTGOSELECT , ,id ,FROM CROSS JOIN 

ご覧の通り、エラーが発生しています。 Ambiguous column name id. これは、id 列が Employee テーブルと department テーブルの両方に存在するためです。

SQL CROSS JOIN 5

この種の問題を解決するには、常にテーブル名をカラム名の前に使用する必要があります。 次のCross Joinクエリでは、カラム名の前にALIASテーブル名を使用しています。 この方法では、部門テーブルに属するid列を探していることをサーバーに知らせることができます。

上記のクロスジョインクエリは次のように書くことができます。

-- SQL Server Cross Join ExampleSELECT Emp. ,Emp. ,Dept.id ,Dept.FROM AS EmpCROSS JOIN AS Dept

SQL CROSS JOIN 6

Joinキーワードを使わないCross Join

CROSS JOINキーワードを使わずに結果を得ることもできます。

-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp,CROSS JOIN AS Dept--OR We Can simply Write it asSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS Dept

SQL CROSS JOIN 1

SQL クロスジョインのWHERE句

クロスジョインで返される行数を制限する際に、クロスジョインと共にWHERE句を使用することができます。 ここでは、WHERE句をCross Joinと一緒に使用しています。

-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'

SQL CROSS JOIN 2

Cross Join Order By Clause Example

クロスジョインでは、Order By Clauseを使ってレコードの順番を入れ替えることができます。

-- SQL Server Cross Join ExampleSELECT Emp. AS ,Emp. AS ,Dept. AS FROM AS Emp, AS DeptWHERE Dept. = 'Software Developer'

SQL CROSS JOIN 7 となります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です