sql server中如何將表A 和表B的數據合並成乘積方式,也就是說表A有2條數據,表B有3條數據,乘積后有6條數據,
這就要用到sql中的笛卡爾積方式了
1、什么是笛卡爾積
笛卡爾積在SQL中的實現方式既是交叉連接(Cross Join)。所有連接方式都會先生成臨時笛卡爾積表,笛卡爾積是關系代數里的一個概念,
表示兩個表中的每一行數據任意組合。如果分步驟理解的話,內連接可以看做先對兩個表進行了交叉連接后,再通過加上限制條件(SQL中通過關鍵字on)
剔除不符合條件的行的子集,得到的結果就是內連接了
2、實現方式
--1、創建模擬的數據表--- --1.1)產品分類表 create table GoodsCate( Mid int not null, Code varchar(10) not null, Name varchar(20) not null, ) --1.2)產品類別表 create table GoodsLevel( Mid int not null, Name varchar(10) not null ) --2、添加模擬數據-- --2.1)添加產品分類數據 insert into GoodsCate(Mid,Code,Name) values(1,'6801','電子儀器') insert into GoodsCate(Mid,Code,Name) values(2,'6802','激光儀器') insert into GoodsCate(Mid,Code,Name) values(3,'6803','掃描儀器') --2.2)添加產品類別數據 insert into GoodsLevel(Mid,Name) values(1,'Ⅰ類') insert into GoodsLevel(Mid,Name) values(2,'Ⅱ類') insert into GoodsLevel(Mid,Name) values(3,'Ⅲ類') --3、查詢數據表-- select * from GoodsCate select * from GoodsLevel --4、簡單的笛卡爾積使用-- select * from GoodsCate A cross join GoodsLevel B
3、顯示查詢結果
那如何我要顯示產品編碼+產品類別(6801_1), 最后數據為這樣格式,該怎么修改呢?
6801_1 6801 電子儀器 Ⅰ類
6802_1 6802 激光儀器 Ⅰ類
6803_1 6803 掃描儀器 Ⅰ類
6801_2 6801 電子儀器 Ⅱ類
6802_2 6802 激光儀器 Ⅱ類
6803_2 6803 掃描儀器 Ⅱ類
6801_3 6801 電子儀器 Ⅲ類
6802_3 6802 激光儀器 Ⅲ類
6803_3 6803 掃描儀器 Ⅲ類
--5、查詢經營范圍(6801_1)方法-- select (CAST(A.Code as varchar(20))+'_'+CAST(B.Mid as varchar(20))) CateLevel, A.Code CateCode,A.Name CateName,B.Name LevelName from GoodsCate A cross join GoodsLevel B
最后結果
ps:
詳細了解笛卡爾積網址:http://www.360doc.com/content/14/1229/21/7635_436727229.shtml