1. 程式人生 > >笛卡爾積與交叉聯接

笛卡爾積與交叉聯接

1 笛卡爾積定義

A,B為集合,用A中元素為第一元素,B中元素為第二元素構成的有序對,所有這樣的有序對組成的集合叫做AB的笛卡爾積,記作AxB

例如,A={a,b},B={0,1,2},

AxB={<a,o>,<a,1>,<a,2>,<b,0>,<b,1>,<b,2>,}

BxA={<0,a>,<0,b>,<1,a>,<1,b>,<2,a>,<2,b>}

交差聯接

交差聯接是笛卡爾積在SQL中的實現,SQL中使用關鍵字“CROSS JOIN”來表示交差聯接。

例如:存在表tb_Class及表tb_Student,兩表擁有的資料如下圖所示。

 

 

對兩表進行交叉連線查詢:

SELECT * FROM tb_Class a CROSS JOIN tb_Student b
SELECT * FROM tb_Student c CROSS JOIN tb_Class d 

得到以下查詢結果:

 

3 小知識

1) 交叉連線不能使用ON關鍵字,但可以使用WHERE子句定義連線條件。

SELECT * FROM tb_Class a CROSS JOIN tb_Student b WHERE a.classid=b.classid

此時,與以下查詢結果一致。
SELECT * FROM tb_Class a ,tb_Student b WHERE a.classid=b.classid

所以,如果添加了WHERE子句,則交叉聯接的行為將與內部聯接行為相似。

2 )交叉連線返回的資料行數為第一個表中符合條件的資料行數乘以第二個表中符合條件的資料行數。

例項中的 tb_Class表有4資料,tb_Student表有3行資料,所以返回的結果有12行。