SQL SERVER实现连接与合并查询


Posted in SQL Server onFebruary 24, 2022

创建测试表MyStudentInfo

CREATE table MyStudentInfo
(
Id int not null primary key,
Name varchar(16),
Age int,
Gender varchar(2),
Phone varchar(16),
Address varchar(50),
GradeId int
)

联合插入多条数据

INSERT INTO MyStudentInfo
SELECT 1,'张三',20,'1','15801258912','上海',1 UNION
SELECT 2,'李四',22,'1','12345678901','北京',1 UNION
SELECT 3,'王五',16,'1','13976891234','天津',2 UNION
SELECT 4,'赵六',19,'1','18676891234','重庆',3 UNION
SELECT 5,'小红',21,'2','17776891234','广州',4 UNION
SELECT 6,'小王',25,'2','13176891234','深圳',5 UNION
SELECT 7,'小刘',18,'2','13374591234','南京',6 UNION
SELECT 8,'小张',16,'1','13974596734','长沙',6 UNION
SELECT 9,'小罗',27,'1','13175122786','武汉',7 UNION
SELECT 10,'小袁',21,'2','17715872346','石家庄',8

创建测试表GradeInfo

CREATE table GradeInfo
(
Id int not null primary key,
GradeName varchar(16)
)

联合插入多条数据

INSERT INTO GradeInfo
SELECT 1,'.NET' UNION
SELECT 2,'Android' UNION
SELECT 3,'PHP' UNION
SELECT 4,'UI' UNION
SELECT 5,'HTML5' UNION
SELECT 6,'JAVA' UNION
SELECT 9,'HADOOP' UNION
SELECT 10,'大数据'

内链接

内链接是从结果表中删除其他被链接表中没有匹配的所有行,所以我们说内链接可能丢失数据

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s INNER JOIN GradeInfo g ON s.GradeId=g.Id

SQL SERVER实现连接与合并查询

外部链接

左外联接,关键字LEFT JOIN

左外联接,结果集中包括左表中的所有行,如果左表的某一行在右表中没有匹配行,则在关联的结果集行中,

来自右表的所有选择列表均为NULL

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s LEFT JOIN GradeInfo g ON s.GradeId=g.Id

SQL SERVER实现连接与合并查询

右外联接

GIGHT JOIN进行联接

是左外联接的反向联接,将返回右表的所有行,如果右表的某一行在左表中没有匹配行,则将为左表返回NULL

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s RIGHT JOIN GradeInfo g ON s.GradeId=g.Id

SQL SERVER实现连接与合并查询

完整外联接

关键字是FULL JOIN

完整外联接使用了FULL JOIN进行联接,当某一行在另一表中没有匹配行,另一表的选择列表将返回NULL

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s FULL JOIN GradeInfo g ON s.GradeId=g.Id

SQL SERVER实现连接与合并查询

交叉联接(笛卡尔积)

CORSS JOIN 没有where 也没有on,返回行数是两表行数的乘积

SELECT s.Id,s.Name,s.Age,s.Gender,s.Phone,s.GradeId,g.GradeName
FROM MyStudentInfo s CROSS JOIN GradeInfo g

SQL SERVER实现连接与合并查询

UNION:UNION操作符用于合并两个或多个 SELECT 语句的结果集

UNION必须遵循

  • 1.两个SELECT语句选择列表中的列数目必须一样,而且对应位置上的列的数据类型必须相同或者兼容,每条 SELECT 语句中的列的顺序必须相同
  • 2.UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名
  • 3.union默认自动去除重复行
  • 4.如果需要手动排序,order by语句必须加在最后一个select语句之后,但是他所使用的排序列名必须是第一个select选择列表中的列名
SELECT Age,Name FROM MyStudentInfo
UNION
SELECT Id,GradeName FROM GradeInfo
ORDER BY Age DESC

SQL SERVER实现连接与合并查询

UNION ALL

  • 1.加上ALL关键字之后,功能就是不删除重复行,也不对行进行自动排序
  • 2.如果希望把不同数据类型的字段合并查询,必须进行类型转换使其相对应的数据类型相同或者兼容
  • 3.当合并两个表,列数不同时.只要向其中一个表源中添加列,就可以使其两个表的列数相同
SELECT Age,Name,Address FROM MyStudentInfo
UNION ALL
SELECT Id,GradeName,NULL FROM GradeInfo
ORDER BY Age DESC

SQL SERVER实现连接与合并查询

UNION和联接查询有什么区别

  • 1.在合并中,两个表的数量和数据类型必须相同 ; 在联接中,一个表的行可能与另一个表的行有很大的区别
  • 2.在合并中,行的数量是两个表行的"和" ; 在联接中,行的最大数目是他们的"乘积"

到此这篇关于SQL SERVER实现连接与合并查询的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

SQL Server 相关文章推荐
SQL Server基本使用和简单的CRUD操作
Apr 05 SQL Server
SQLServer 日期函数大全(小结)
Apr 08 SQL Server
SQL Server中交叉联接的用法详解
Apr 22 SQL Server
mybatis调用sqlserver存储过程返回结果集的方法
May 08 SQL Server
解决sql server 数据库,sa用户被锁定的问题
Jun 11 SQL Server
SQLServer中exists和except用法介绍
Dec 04 SQL Server
SQL Server查询某个字段在哪些表中存在
Mar 03 SQL Server
MySQL 中如何归档数据的实现方法
Mar 16 SQL Server
Sql Server 行数据的某列值想作为字段列显示的方法
Apr 20 SQL Server
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
May 25 SQL Server
SQL中的连接查询详解
Jun 21 SQL Server
SQLServer中exists和except用法介绍
SQL Server2019数据库备份与还原脚本,数据库可批量备份
SQL中的三种去重方法小结
Nov 01 #SQL Server
SQL Server表分区删除详情
Spark SQL 2.4.8 操作 Dataframe的两种方式
Windows环境下实现批量执行Sql文件
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
Sep 04 #SQL Server
You might like
一个好用的分页函数
2006/11/16 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
php实现执行某一操作时弹出确认、取消对话框
2013/12/30 PHP
php生成txt文件标题及内容的方法
2014/01/16 PHP
PHP保存带BOM文件的方法
2015/02/12 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
JavaScript实现x秒后自动跳转到一个页面
2013/01/03 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
JavaScript包装对象使用介绍
2013/08/29 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
2015/09/12 Javascript
JS实现3D图片旋转展示效果代码
2015/09/22 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
Vue弹出菜单功能的实现代码
2018/09/12 Javascript
vue 集成jTopo 处理方法
2019/08/07 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Python2和3字符编码的区别知识点整理
2019/08/08 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
会走动的图形html5时钟示例
2014/04/27 HTML / CSS
启动一个线程是用run()还是start()
2016/12/25 面试题
人力资源经理的岗位职责
2014/03/02 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
详解MySQL多版本并发控制机制(MVCC)源码
2021/06/23 MySQL