前言:
当前小伙伴们对“sqlserver左连接和右连接”大概比较关切,看官们都想要学习一些“sqlserver左连接和右连接”的相关资讯。那么小编在网络上网罗了一些有关“sqlserver左连接和右连接””的相关文章,希望大家能喜欢,朋友们快快来了解一下吧!在本文中,我将通过实例解释Join和Join的类型。 在这里,我们将使用SQL Server 2017,或者您可以使用SQL Server 2008或更高版本。
介绍
Join用于从数据库的两个或多个相关表中获取/检索数据。通常,表通过外键约束相互关联。
Join的类型
在SQL Server中有四种连接类型。
Inner Join(内连接)Outer Join(外连接)Cross Join(交叉连接)Self Join(自连接)
同样,Outer Join(外连接)分为三种类型。
左连接(Left Join)或左外连接(Left Outer Join)右连接(Right Join)或右外连接(Right Outer Join)完全连接(Full Join)或完全外连接(Full Outer Join)
现在,我将通过示例解释不同类型的连接以及它们之间的区别。
先决条件
推荐SQL Server 2017,也可以使用SQL Server 2008或更高版本。
现在,首先我们将创建一个数据库和两个表来应用连接以便于理解。
创建数据库和两个表
步骤1 - 创建一个数据库
打开SQL服务器并使用下面的脚本创建“chittadb”数据库。
Create database chittadb
现在,选择脚本查询,然后按F5或单击Execute按钮来执行上面的脚本。
您应该会看到一条消息,“命令成功完成”,这意味着您的新数据库已经创建。
步骤2 - 创建第一个表
打开SQL服务器并使用以下脚本创建表“tbl_Department”。
create table tbl_Department ( DeptId int primary key not null identity(1,1), DeptName nvarchar(50), DeptHead nvarchar(50), Location nvarchar(100) )
执行上面的查询来创建“bl_Department”。
您应该会看到一条消息,“命令成功完成”。
现在,数据被插入到表中。
Insert into tbl_Department values ( 'IT', 'Chitta', 'Chennai') Insert into tbl_Department values ( 'Payroll', 'Akhil', 'Odisha') Insert into tbl_Department values ( 'HR', 'Ram', 'Pune') Insert into tbl_Department values ( 'Timesheet', 'Kannan', 'chennai')
执行上面的查询,您应该会看到一条消息,“命令成功完成”。
现在从“tbl_Department”表检索所有数据。
select * from tbl_Department
输出
步骤3 - 创建第二个表
打开SQL服务器并使用以下脚本创建表“tbl_Employee”。
Create table tbl_Employee ( EmpID int primary key not null identity(1,1), Name nvarchar(50), Gender nvarchar(50), country nvarchar(20), Salary int, DepartmentId int foreign key references tbl_Department(DeptId) )
执行上面的查询来创建“tbl_Employee”。
您应该会看到一条消息,“命令成功完成”。
现在,数据被插入到表中。
Insert into tbl_Employee values ( 'Jitu', 'Male','India',4000, 1) Insert into tbl_Employee values ( 'Rani', 'Female','India', 5000, 3) Insert into tbl_Employee values ( 'Rohit', 'Male','India', 5500, 1) Insert into tbl_Employee values ( 'Dibas', 'Male','India', 6500, 2) Insert into tbl_Employee values ( 'Gajendra', 'Male','India', 3800, 2) Insert into tbl_Employee values ( 'Raja', 'Male','India', 9000, 1) Insert into tbl_Employee values ( 'Jeni', 'Female','India', 5800, 3) Insert into tbl_Employee values ( 'Chandin', 'Female','India', 8500, 1) Insert into tbl_Employee values ( 'pintu', 'Male','India', 9500, NULL) Insert into tbl_Employee values ( 'Subrat', 'Male','India', 9800, NULL)
执行上面的查询,您应该会看到一条消息,“命令成功完成”。
现在检索“tbl_Employee”表中的所有数据。
select * from tbl_Employee
输出
连接的一般公式如下。
SELECT ColumnList (whatever column you want to display) FROM LeftTableName JOIN_TYPE RightTableName ON
INNER JOIN(内连接)
内连接只返回两个表之间匹配的行,去除了不匹配的行。
例子
编写查询从tbl_Employee和tbl_Department表检索名称、性别、国家、薪水和部门。
INNER JOIN内连接查询
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee INNER JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
或者
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
请注意
Join和Inner Join是一样的,但一般习惯性使用Inner Join。
或者
select emp.Name,emp.Gender,emp.country,emp.Salary,dept.DeptName from tbl_Employee emp inner join tbl_Department dept on emp.DepartmentId=dept.DeptId
输出
LEFT JOIN(左连接)或LEFT OUTER JOIN(左外连接)
Left Join或Left Outer Join只返回两个表之间匹配的行,加上左表中不匹配的行。
例子
编写查询从tbl_Employee和tbl_Department表检索名称、性别、国家、薪水和部门。
左连接或左外连接查询
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee LEFT OUTER JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
或者
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee LEFT JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
请注意
可以使用左连接或左外连接,OUTER关键字是可选的。
或者
select emp.Name,emp.Gender,emp.country,emp.Salary,dept.DeptName from tbl_Employee emp LEFT JOIN tbl_Department dept on emp.DepartmentId=dept.DeptId
Right Join(右连接)或Right Outer Join(右外连接)
右连接或右外连接只返回两个表之间匹配的行,加上右表中不匹配的行。
例子
编写查询从tbl_Employee和tbl_Department表检索名称、性别、国家、薪水和部门。
右连接或右外连接查询
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee RIGHT JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
或者
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee RIGHT OUTER JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
请注意
可以使用右连接或右外连接,OUTER关键字是可选的。
或者
select emp.Name,emp.Gender,emp.country,emp.Salary,dept.DeptName from tbl_Employee emp RIGHT JOIN tbl_Department dept on emp.DepartmentId=dept.DeptId
输出
Full Join(完全连接)或Full Outer Join(完全外连接)
完全连接或完全外部连接返回两个表(左表和右表)中的所有行,包括两个表中不匹配的行。
例子
编写查询从tbl_Employee和tbl_Department表检索名称、性别、国家、薪水和部门。
完全连接或完全外部连接查询
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee FULL OUTER JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
或者
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee FULL JOIN tbl_Department ON tbl_Employee.DepartmentId = tbl_Department.DeptId
请注意
可以使用完全连接或完全外连接。OUTER关键字是可选的。
或者
select emp.Name,emp.Gender,emp.country,emp.Salary,dept.DeptName from tbl_Employee emp FULL JOIN tbl_Department dept on emp.DepartmentId=dept.DeptId
输出
Cross Join(交叉连接)
交叉连接,产生两个表的笛卡尔积。
例如,在tbl_Employee表中有10行,在tbl_Department表中有4行。因此,这两个表之间的交叉连接将产生40行。交叉连接不应该有ON子句。
例子
编写一个查询,从tbl_Employee和tbl_Department表检索名称、性别、国家、薪水和部门。
交叉连接查询
SELECT Name, Gender,country, Salary, DeptName FROM tbl_Employee CROSS JOIN tbl_Department
或者
select emp.Name,emp.Gender,emp.country,emp.Salary,dept.DeptName from tbl_Employee emp cross JOIN tbl_Department dept
输出
Self Join(自连接)
一张表自己和自己连接起来查询数据
请注意
使用自连接的时候必须给表起别名
select * from tbl_Employee,tbl_Employee --errorSELECT * FROM tbl_Employee te1, tbl_Employee te2 --success
结论
在本文中,我通过示例解释了SQL Server中的Join连接操作,希望这篇文章能帮助您很好地理解这个主题。
标签: #sqlserver左连接和右连接