欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL Server中交叉聯(lián)接的用法詳解

 更新時間:2021年04月21日 10:13:36   作者:郝光明  
這篇文章主要介紹了SQL Server中交叉聯(lián)接的用法介紹,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

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

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

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

select * from t1 cross join t2

2、交叉聯(lián)接的語法格式

select * from t1 cross join t2;--常用寫法 
select * from t1, t2;-- SQL:1989的規(guī)范 
select * from t1 cross join t2 
where t1.col1=t2.col2;--等價于內(nèi)部聯(lián)接 
select * from t1 inner join t2  on t1.col1=t2.col2 

3、交叉查詢的使用場景

3.1 交叉聯(lián)接可以查詢?nèi)繑?shù)據(jù)

-- 示例

-- 員工表 
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 交叉聯(lián)接優(yōu)化查詢性能

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

4、總結(jié)

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

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

相關(guān)文章

  • SQL SERVER2012中新增函數(shù)之字符串函數(shù)CONCAT詳解

    SQL SERVER2012中新增函數(shù)之字符串函數(shù)CONCAT詳解

    SQL Server 2012有一個新函數(shù),就是CONCAT函數(shù),連接字符串非它莫屬。比如在它出現(xiàn)之前,連接字符串是使用"+"來連接,如遇上NULL,還得設(shè)置參數(shù)與配置,不然連接出來的結(jié)果將會是一個NULL。本文就介紹了關(guān)于SQL SERVER 2012中CONCAT函數(shù)的相關(guān)資料,需要的朋友可以參考。
    2017-03-03
  • sql server利用不同語種語言顯示報錯錯誤消息的方法示例

    sql server利用不同語種語言顯示報錯錯誤消息的方法示例

    這篇文章主要給大家介紹了關(guān)于sql server利用不同語種語言顯示報錯錯誤消息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用sql server具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • SQL Server代理服務(wù)無法啟動的解決方法

    SQL Server代理服務(wù)無法啟動的解決方法

    錯誤MSSQLSERVERSQLServerAgent could not be started (reason: SQLServerAgent 必須能夠以 SysAdmin 身份連接到 SQLServer,但“(未知)”不是 SysAdmin 角色的成員)
    2013-02-02
  • SQL SERVER 數(shù)據(jù)庫備份的三種策略及語句

    SQL SERVER 數(shù)據(jù)庫備份的三種策略及語句

    這篇文章主要介紹了SQL SERVER 數(shù)據(jù)庫備份的三種策略及語句,需要的朋友可以參考下
    2017-02-02
  • SqlServer 實用操作小技巧集合

    SqlServer 實用操作小技巧集合

    包括安裝時提示有掛起的操作、收縮數(shù)據(jù)庫、壓縮數(shù)據(jù)庫、轉(zhuǎn)移數(shù)據(jù)庫給新用戶以已存在用戶權(quán)限、檢查備份集、修復(fù)數(shù)據(jù)庫等.
    2009-10-10
  • SQL Server中統(tǒng)計每個表行數(shù)的快速方法

    SQL Server中統(tǒng)計每個表行數(shù)的快速方法

    這篇文章主要介紹了SQL Server中統(tǒng)計每個表行數(shù)的快速方法,本文不使用傳統(tǒng)的count()函數(shù),因為它比較慢和占用資源,本文講解的是另一種方法,需要的朋友可以參考下
    2015-02-02
  • SQL?Sever無法連接服務(wù)器圖文解決辦法

    SQL?Sever無法連接服務(wù)器圖文解決辦法

    SQL數(shù)據(jù)庫不能連接服務(wù)器是指在使用SQL數(shù)據(jù)庫時,無法建立與服務(wù)器的連接,這可能是由于多種原因?qū)е碌?包括網(wǎng)絡(luò)問題、配置錯誤、權(quán)限限制等,下面這篇文章主要給大家介紹了關(guān)于SQL?Sever無法連接服務(wù)器的解決辦法,需要的朋友可以參考下
    2024-06-06
  • MSSQL安全設(shè)置的具體步驟和方法小結(jié)

    MSSQL安全設(shè)置的具體步驟和方法小結(jié)

    MSSQL安全設(shè)置的具體步驟和方法小結(jié),使用sql2000的朋友可以參考下,建議普通賬戶運行
    2012-06-06
  • sql2000報錯Successfully re-opened the local eventlog解決方法

    sql2000報錯Successfully re-opened the local eventlog解決方法

    這篇文章主要介紹了sql2000報錯Successfully re-opened the local eventlog解決方法,需要的朋友可以參考下
    2014-12-12
  • SQL根據(jù)指定分隔符分解字符串實現(xiàn)步驟

    SQL根據(jù)指定分隔符分解字符串實現(xiàn)步驟

    想要在MS SQL中根據(jù)給定的分隔符把這個字符串分解成各個元素,本文將詳細(xì)介紹此功能的實現(xiàn),需要了解的朋友可以參考下
    2012-11-11

最新評論