婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > SQL Server中交叉聯接的用法詳解

SQL Server中交叉聯接的用法詳解

熱門標簽:外呼系統會封嗎 萬利達綜合醫院地圖標注點 股票配資電銷機器人 南京電銷外呼系統哪家好 電銷機器人 深圳 實體店地圖標注怎么標 武漢AI電銷機器人 在電子版地圖標注要收費嗎 地圖標注如何弄全套標

今天給大家介紹SQLServer中交叉聯接的用法,希望對大家能有所幫助!

1、交叉聯接(cross join)的概念

交叉聯接是聯接查詢的第一個階段,它對兩個數據表進行笛卡爾積。即第一張數據表每一行與第二張表的所有行進行聯接,生成結果集的大小等于T1*T2。

select * from t1 cross join t2

2、交叉聯接的語法格式

select * from t1 cross join t2;--常用寫法 
select * from t1, t2;-- SQL:1989的規范 
select * from t1 cross join t2 
where t1.col1=t2.col2;--等價于內部聯接 
select * from t1 inner join t2  on t1.col1=t2.col2 

3、交叉查詢的使用場景

3.1 交叉聯接可以查詢全部數據

-- 示例

-- 員工表 
CREATE TABLE [dbo].[EmpInfo]( 
  [empId] [int] IDENTITY(1,1) NOT NULL, 
  [empNo] [varchar](20) NULL, 
  [empName] [nvarchar](20) NULL, 
 CONSTRAINT [PK_EmpInfo] PRIMARY KEY CLUSTERED  
( 
  [empId] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF 
, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
 
-- 獎金表 
CREATE TABLE [dbo].[SalaryInfo]( 
  [id] [int] IDENTITY(1,1) NOT NULL, 
  [empId] [int] NULL, 
  [salary] [decimal](18, 2) NULL, 
  [seasons] [varchar](20) NULL, 
 CONSTRAINT [PK_SalaryInfo] PRIMARY KEY CLUSTERED  
( 
  [id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF 
, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
-- 季度表 
CREATE TABLE [dbo].[Seasons]( 
  [name] [nchar](10) NULL 
) ON [PRIMARY] 
 
GO 
SET IDENTITY_INSERT [dbo].[EmpInfo] ON  
 
INSERT [dbo].[EmpInfo] ([empId], [empNo], [empName]) VALUES (1, N'A001', N'王強') 
INSERT [dbo].[EmpInfo] ([empId], [empNo], [empName]) VALUES (2, N'A002', N'李明') 
INSERT [dbo].[EmpInfo] ([empId], [empNo], [empName]) VALUES (3, N'A003', N'張三') 
 
INSERT [dbo].[SalaryInfo] ([id], [empId], [salary], [seasons]) 
 VALUES (1, 1, CAST(3000.00 AS Decimal(18, 2)), N'第一季度') 
INSERT [dbo].[SalaryInfo] ([id], [empId], [salary], [seasons]) 
 VALUES (2, 3, CAST(5000.00 AS Decimal(18, 2)), N'第一季度') 
INSERT [dbo].[SalaryInfo] ([id], [empId], [salary], [seasons]) 
 VALUES (3, 1, CAST(3500.00 AS Decimal(18, 2)), N'第二季度') 
INSERT [dbo].[SalaryInfo] ([id], [empId], [salary], [seasons]) 
 VALUES (4, 3, CAST(3000.00 AS Decimal(18, 2)), N'第二季度 ') 
INSERT [dbo].[SalaryInfo] ([id], [empId], [salary], [seasons]) 
 VALUES (5, 2, CAST(4500.00 AS Decimal(18, 2)), N'第二季度') 
 
INSERT [dbo].[Seasons] ([name]) VALUES (N'第一季度') 
INSERT [dbo].[Seasons] ([name]) VALUES (N'第二季度') 
INSERT [dbo].[Seasons] ([name]) VALUES (N'第三季度') 
INSERT [dbo].[Seasons] ([name]) VALUES (N'第四季度') 
 
-- 查詢每個人每個季度的獎金情況 如果獎金不存在則為0 
SELECT a.empName,b.name seasons ,isnull(c.salary,0) salary  
FROM EmpInfo a  
CROSS JOIN Seasons b 
LEFT OUTER JOIN SalaryInfo c ON a.empId=c.empId AND b.name=c.seasons

3.2 交叉聯接優化查詢性能

針對一些情況可以采用交叉聯接的方式替代子查詢,通過減少子查詢造成的多次表掃描,從而可以提高優化查詢的性能。

4、總結

交叉聯接雖然支持使用WHERE子句篩選行,由于笛卡兒積占用的資源可能會很多,如果不是真正需要笛卡兒積的情況下,則應當避免地使用CROSS JOIN。建議使用INNER JOIN代替,效率會更高一些。如果需要為所有的可能性都返回數據聯接查詢可能會非常實用。

到此這篇關于SQL Server中交叉聯接的用法介紹的文章就介紹到這了,更多相關SQL Server交叉聯接內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 淺談SQL Server交叉聯接 內部聯接
  • SQL Server 2005通用分頁存儲過程及多表聯接應用

標簽:武威 安徽 臺州 泰安 濟寧 廣東 汕頭 濟源

巨人網絡通訊聲明:本文標題《SQL Server中交叉聯接的用法詳解》,本文關鍵詞  SQL,Server,中,交叉,聯接,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《SQL Server中交叉聯接的用法詳解》相關的同類信息!
  • 本頁收集關于SQL Server中交叉聯接的用法詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 璧山县| 澎湖县| 达州市| 闽侯县| 肥东县| 安徽省| 伊吾县| 阳谷县| 彭州市| 永济市| 都昌县| 绥化市| 安陆市| 谷城县| 读书| 大名县| 玉龙| 丹棱县| 台州市| 都安| 罗田县| 中西区| 什邡市| 石台县| 惠来县| 渑池县| 曲麻莱县| 万年县| 常州市| 古交市| 抚宁县| 谢通门县| 肥乡县| 静乐县| 资中县| 高密市| 罗定市| 泽州县| 卢湾区| 浙江省| 抚州市|