您当前的位置:钢材 > 型钢 > 市场分析

数据库中交叉连接,sql交叉连接查询

来源:头条 作者: chanong
分享到
关注德勤钢铁网在线:
  • 扫描二维码

    关注√

    德勤钢铁网微信

在线咨询:
  • 扫描或点击关注德勤钢铁网在线客服

这次我将介绍如何在SQL Server中使用交叉连接,希望对大家有用。

1. 交叉连接概念交叉连接是连接查询的第一步,它执行两个数据表的笛卡尔积。即,将第一个数据表的每一行与第二个数据表的每一行进行连接,得到的结果集大小等于T1*T2。

select * from t1cross join t22,交叉连接语法格式select * from t1cross join t2;--常用写法select * from t1, t2;--SQL:1989规范select * from t1cross join t2where t1.col1=t2.col2; - - 相当于inner join select * from t1 inner join t2 on t1.col1=t2.col23,交叉查询使用场景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,[工资] [十进制](18, 2) NULL,[季节] [varchar [PRIMARY] -- 季度表CREATE TABLE [dbo].[Seasons]([name] [nchar](10) NULL) ON [PRIMARY]GOSET 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], [工资], [季节]) VALUES (1, 1, CAST(3000.00 AS Decimal(18, 2)), N'Q1' )INSERT [ dbo ] .[SalaryInfo] ([id], [empId], [薪水], [季节]) VALUES (2, 3, CAST(5000.00 AS Decimal(18, 2)), N'Q1' )INSERT [dbo ] . [SalaryInfo] ([id], [empId], [薪水], [季节]) VALUES (3, 1, CAST(3500.00 AS Decimal(18, 2)), N'Q2' )INSERT [dbo] .[SalaryInfo ] ([id], [empId], [工资], [季节]) VALUES (4, 3, CAST(3000.00 AS Decimal(18, 2)), N'Q2' )INSERT [dbo]. [SalaryInfo] ([id], [empId], [薪水], [季节]) VALUES (5, 2, CAST(4500.00 AS Decimal(18, 2)), N'Q2')INSERT [dbo] .[ 季节] ([名称]) VALUES (N'第一季度')INSERT [dbo].[季节] ([名称]) VALUES (N'第二季度')INSERT [dbo].[季节] ([名称] ) VALUES ( N'Q3')INSERT [dbo].[Season] ([name]) VALUES (N'Q4') -- 查询每个季度每个人的奖金状态。如果不存在奖励,则0SELECT a。 empName,b.name Season ,isnull(c.salary,0) Salary FROM EmpInfo a CROSS JOIN Seasons bLEFT OUTER JOIN SalaryInfo c ON a.empId=c.empId AND b.name=c.seasons 3.2 优化交叉联接查询性能在某些情况下,您可以使用交叉联接来替换子查询,并通过减少子查询导致的多次表扫描来提高优化查询的性能。

4.总结交叉连接支持使用WHERE子句过滤行,但是笛卡尔积会占用大量资源,因此如果您实际上不需要笛卡尔积,则应避免使用CROSS JOIN。我们建议改用更高效的INNER JOIN。当您需要返回所有可能性的数据时,连接查询非常有用。

责任编辑:德勤钢铁网 标签:

热门搜索

相关文章

广告
德勤钢铁网 |市场分析

数据库中交叉连接,sql交叉连接查询

chanong

|

这次我将介绍如何在SQL Server中使用交叉连接,希望对大家有用。

1. 交叉连接概念交叉连接是连接查询的第一步,它执行两个数据表的笛卡尔积。即,将第一个数据表的每一行与第二个数据表的每一行进行连接,得到的结果集大小等于T1*T2。

select * from t1cross join t22,交叉连接语法格式select * from t1cross join t2;--常用写法select * from t1, t2;--SQL:1989规范select * from t1cross join t2where t1.col1=t2.col2; - - 相当于inner join select * from t1 inner join t2 on t1.col1=t2.col23,交叉查询使用场景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,[工资] [十进制](18, 2) NULL,[季节] [varchar [PRIMARY] -- 季度表CREATE TABLE [dbo].[Seasons]([name] [nchar](10) NULL) ON [PRIMARY]GOSET 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], [工资], [季节]) VALUES (1, 1, CAST(3000.00 AS Decimal(18, 2)), N'Q1' )INSERT [ dbo ] .[SalaryInfo] ([id], [empId], [薪水], [季节]) VALUES (2, 3, CAST(5000.00 AS Decimal(18, 2)), N'Q1' )INSERT [dbo ] . [SalaryInfo] ([id], [empId], [薪水], [季节]) VALUES (3, 1, CAST(3500.00 AS Decimal(18, 2)), N'Q2' )INSERT [dbo] .[SalaryInfo ] ([id], [empId], [工资], [季节]) VALUES (4, 3, CAST(3000.00 AS Decimal(18, 2)), N'Q2' )INSERT [dbo]. [SalaryInfo] ([id], [empId], [薪水], [季节]) VALUES (5, 2, CAST(4500.00 AS Decimal(18, 2)), N'Q2')INSERT [dbo] .[ 季节] ([名称]) VALUES (N'第一季度')INSERT [dbo].[季节] ([名称]) VALUES (N'第二季度')INSERT [dbo].[季节] ([名称] ) VALUES ( N'Q3')INSERT [dbo].[Season] ([name]) VALUES (N'Q4') -- 查询每个季度每个人的奖金状态。如果不存在奖励,则0SELECT a。 empName,b.name Season ,isnull(c.salary,0) Salary FROM EmpInfo a CROSS JOIN Seasons bLEFT OUTER JOIN SalaryInfo c ON a.empId=c.empId AND b.name=c.seasons 3.2 优化交叉联接查询性能在某些情况下,您可以使用交叉联接来替换子查询,并通过减少子查询导致的多次表扫描来提高优化查询的性能。

4.总结交叉连接支持使用WHERE子句过滤行,但是笛卡尔积会占用大量资源,因此如果您实际上不需要笛卡尔积,则应避免使用CROSS JOIN。我们建议改用更高效的INNER JOIN。当您需要返回所有可能性的数据时,连接查询非常有用。


市场分析