Sql Server 连接查询
在操作数据库的时候,经常会使用到inner join,left join,right join,full join。今天用了一个简单的例子记录一下这几个的区别。
1 测试数据
为了方便测试,就不用搞那么多复杂的数据了,新建了两张表:Student,Course,分别是学生表和课程表。
sql脚本如下
GO
/****** Object: Table [dbo].[Course] Script Date: 2020/1/2 16:27:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Course]([stuNo] [varchar](50) NULL,[course] [varchar](50) NULL
) ON [PRIMARY]GO
SET ANSI_PADDING OFF
GO
/****** Object: Table [dbo].[Student] Script Date: 2020/1/2 16:27:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Student]([stuNo] [varchar](50) NULL,[stuName] [varchar](50) NULL
) ON [PRIMARY]GO
SET ANSI_PADDING OFF
GO
INSERT [dbo].[Course] ([stuNo], [course]) VALUES (N'003', N'Science')
INSERT [dbo].[Course] ([stuNo], [course]) VALUES (N'001', N'Math')
INSERT [dbo].[Course] ([stuNo], [course]) VALUES (N'001', N'English')
INSERT [dbo].[Course] ([stuNo], [course]) VALUES (N'002', N'English')
INSERT [dbo].[Course] ([stuNo], [course]) VALUES (N'005', N'CS')
INSERT [dbo].[Student] ([stuNo], [stuName]) VALUES (N'004', N'ChenYuan')
INSERT [dbo].[Student] ([stuNo], [stuName]) VALUES (N'001', N'ZhangWei')
INSERT [dbo].[Student] ([stuNo], [stuName]) VALUES (N'002', N'HuangHua')
INSERT [dbo].[Student] ([stuNo], [stuName]) VALUES (N'003', N'YangYi')
执行结果如下:
SELECT * FROM dbo.Student WITH (NOLOCK) ORDER BY stuNo
SELECT * FROM dbo.Course WITH (NOLOCK) ORDER BY stuNo
2 inner join 内连接
inner join是两张表连接查询的时候,只返回这两张表中条件完全匹配的结果。比如执行下面的查询:
SELECT * FROM dbo.Student AS A
INNER JOIN dbo.Course AS B
ON A.stuNo = B.stuNo
ORDER BY A.stuNo
这两张表都有001,002,003的学生学号stuNo。因此查询出来的时候两边只有这三个学号的信息。
004号在学生表中有数据,但没事在课程表里面没有对应的stuNo = 004,因此不会查询出来。
3 left join 左连接
left join是以以左边的表为基准,返回左边表的所有数据,不管查询条件里面符不符合,都全部显示出来,如果右表没有对应的数据,那就返回NULL。而右边的表只显示ON条件里面的符合的数据。
SELECT * FROM dbo.Student AS A
LEFT JOIN dbo.Course AS B
ON A.stuNo = B.stuNo
ORDER BY A.stuNo
这里面的左右是以"left join"为基准的,写在"left join"之前的就是左表,写在"left join"右边的就是右表。
比如这里面"dbo.Student"就是左表,返回它的所有数据。"dbo.Course"就是右表,返回符合条件的数据。查询结果如下:
“004”在Course表中没有数据,所以course表中的那一项为空。
4 right join 右连接
跟左连接差不多,就是和左连接反过来而已。返回右表的所有数据,即使没有和左表匹配上,返回左表中符合条件的数据。
SELECT * FROM dbo.Student AS A
RIGHT JOIN dbo.Course AS B
ON A.stuNo = B.stuNo
5 full join 全连接
这个是返回左表和右表所有的行,如果条件符合那就匹配,没有的话就返回NULL。查询结果就是left join和right join的并集。
SELECT * FROM dbo.Student AS A
FULL JOIN dbo.Course AS B
ON A.stuNo = B.stuNo
ORDER BY A.stuNo
原文发于:https://hjxlog.com/posts/20200102a1.html
Sql Server 连接查询相关推荐
- SQL server连接查询
目录 前沿小补充 等值与非等值连接查询 自身连接 外连接 多表连接 前沿小补充 例3.48 查询平均成绩大于等于80分的学生学号和平均成绩 SELECT Sno,AVG(Grade) FROM SC ...
- SQL Server 连接查询(多表连接查询)
多表连接查询 1.查询的信息来源于多张表,则可以通过两两相连的方式建立多表连接查询 以下是正常多表查询语法,查询三张表的所有数据信息 2.简单多表查询要比多表查询写法更简单,效果是一样的, 简单多表查 ...
- SQL Server 连接查询(内连接查询)
内连接查询 1.内连接基于连接谓词on,它将两张表的列组合在一起,产生新的结果表 两个表的每一行连接列进行比较,如果满足连接谓词则会组合成一行数据 2.要想进行内连接查询,就必须有连接列,这样才能建立 ...
- mysql不同服务器查询_实战操作SQL Server连接查询不同服务器表数据
今日产品部要导批数据,但是需要连接查询查询的几个表不在同一服务器上.所以我开始是这么干的: 1.查询一台服务器的数据,并导入本地Excel 2.查询另一台服务器的数据,并导入本地Excel 3.Exc ...
- 数据库-SQL Server数据库查询速度慢(连接超时)原因及优化方法
SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列 ...
- SQL错误提示档案(3):SQL Server连接中的四个最常见错误
SQL Server连接中的四个最常见错误: 一."SQL Server 不存在或访问被拒绝" 一般说来,有以下几种可能性: ...
- 优化SQL Server数据库查询方法
本文详细介绍了优化SQL Server数据库查询方法. SQL Server数据库查询速度慢的原因有很多,常见的有以下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) ...
- SQL Server 2005查询处理结构-用户模式计划(UMS)
SQL Server 2005查询处理结构-用户模式计划(UMS) 在对数据库进行性能调优时,必须全面的考虑各种可能造成系统性能瓶颈的各种因素,因此深入了解SQL Server 2005的查询处理机构 ...
- 用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接相关联
message: 用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接相关联.这个问题该如何解决?=============一.控制面板->服务->MS SQL SERV ...
最新文章
- python教学视频下载-董付国老师Python精品教学,视频教程下载
- 错误602,未能在sysindexes中找到数据库 的解决办法
- 如何理解ScanDef的概念
- 看文艺青年怎么玩微信客户端
- oracle节点1关闭节点2的集群,[Oracle] Oracle两个节点分裂,识别不到对方节点的状态...
- JavaEE基础(05):过滤器、监听器、拦截器,应用详解
- 笨办法学 Python · 续 第三部分:数据结构
- C++ STL vector容器的插入和删除
- 在web服务器启动时: java.util.zip.ZipException: error in opening zip file
- UbuntuSkills
- 国密SM2/SM3算法
- 基于卷积神经网络的人脸识别
- Python常用模块-20个常用模块总结
- 数据分析师面试题目_数据分析师常见的10道面试题解答
- DH(Diffie-Hellman)算法本元根(原根)求法
- 再谈BOM和DOM(1):BOM与DOM概述
- SQL练习题共50道附答案(MySQL)
- Python入门学习笔记——12.文件操作
- NdisFilter驱动数据全部转发到应用层的性能之优化(使用共享环形队列方式)
- littlevgl之cont 控件(容器控件)