Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说聊一聊SQL Server中Join(连接)[亲测有效],希望能够帮助你!!!。
在本文中,我将通过实例解释Join和Join的类型。 在这里,我们将使用SQL Server 2017,或者您可以使用SQL Server 2008或更高版本。
Join用于从数据库的两个或多个相关表中获取/检索数据。通常,表通过外键约束相互关联。
Join的类型
在SQL Server中有四种连接类型。
同样,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
内连接只返回两个表之间匹配的行,去除了不匹配的行。
例子
编写查询从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只返回两个表之间匹配的行,加上左表中不匹配的行。
例子
编写查询从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
右连接或右外连接只返回两个表之间匹配的行,加上右表中不匹配的行。
例子
编写查询从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
输出
完全连接或完全外部连接返回两个表(左表和右表)中的所有行,包括两个表中不匹配的行。
例子
编写查询从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
输出
交叉连接,产生两个表的笛卡尔积。
例如,在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
输出
一张表自己和自己连接起来查询数据
请注意
使用自连接的时候必须给表起别名
select * from tbl_Employee,tbl_Employee --error
SELECT * FROM tbl_Employee te1, tbl_Employee te2 --success
在本文中,我通过示例解释了SQL Server中的Join连接操作,希望这篇文章能帮助您很好地理解这个主题。
上一篇
已是最后文章
下一篇
已是最新文章