SQL SERVER实现连接与合并查询

创建测试表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

外部链接

左外联接,关键字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

右外联接

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

完整外联接

关键字是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

交叉联接(笛卡尔积)

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

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

UNION ALL

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

UNION和联接查询有什么区别

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

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

(0)

相关推荐

  • SQL Server中的连接查询详解

    在查询多个表时,我们经常会用"连接查询".连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 什么是连接查询呢? 概念:根据两个表或多个表的列之间的关系,从这些表中查询数据. 目的:实现多个表查询操作. 知道了连接查询的概念之后,什么时候用连接查询呢? 一般是用作关联两张或两张以上的数据表时用的.看起来有点抽象,我们举个例子,做两张表:学生表(T_student)和班级表(T_class). T_student T_class 连接标准语法格式: SQL-9

  • SQLSERVER中union,cube,rollup,cumpute运算符使用说明

    /* --1 UNION 运算符是将两个或更多查询的结果组合为单个结果集 使用 UNION 组合查询的结果集有两个最基本的规则: 1.所有查询中的列数和列的顺序必须相同. 2.数据类型必须兼容 a.UNION的结果集列名与第一个select语句中的结果集中的列名相同,其他select语句的结果集列名被忽略 b.默认情况下,UNION 运算符是从结果集中删除重复行.如果使用all关键字,那么结果集将包含所有行并且不删除重复行 c.sql是从左到右对包含UNION 运算符的语句进行取值,使用括号可以

  • SQL Server 2012 多表连接查询功能实例代码

    废话不多说了,直接给大家贴代码了,具体代码如下所示: -- 交叉连接产生笛卡尔值 (X*Y) SELECT * FROM Student cross Join dbo.ClassInfo --另外一种写法 SELECT * FROM Student , ClassInfo -- 内连接 (Inner 可以省略) SELECT * FROM Student JOIN dbo.ClassInfo ON dbo.Student.Class = dbo.ClassInfo.ID; -- Inner Jo

  • SQL Server连接查询的实用教程

    前沿小补充 例3.48 查询平均成绩大于等于80分的学生学号和平均成绩 SELECT Sno,AVG(Grade) FROM SC WHERE AVG(Grade)>=80 GROUP BY Sno; SELECT * FROM SC; 此时发现: 这是因为WHERE子句中是不能用聚集函数作为条件表达式的,正确的查询语句应该是: SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade)>=80; SELECT * FROM SC;

  • SQL Server中的集合运算: UNION, EXCEPT和INTERSECT示例代码详解

    SQL Server中的集合运算包括UNION(合并),EXCEPT(差集)和INTERSECT(相交)三种. 集合运算的基本使用 1.UNION(合并两个查询结果集,隐式DINSTINCT,删除重复行) --合并两个提取表/派生表(derived table), 返回结果为:[a,b,c,d,e] SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC) UNION SELECT FC FROM (VALUES('a'),('b'),

  • 深入SQL SERVER合并相关操作Union,Except,Intersect的详解

    对于结果集有几个处理,值得讲解一下1. 并集(union,Union all)这个很简单,是把两个结果集水平合并起来.例如SELECT * FROM AUNIONSELECT * FROM B[注意]union会删除重复值,也就是说A和B中重复的行,最终只会出现一次,而union all则会保留重复行. 2. 差异(Except)就是两个集中不重复的部分.例如SELECT * FROM AEXCEPTSELECT * FROM B这个的意思是,凡是不出现在B表中的A表的行. 3. 交集(inte

  • sqlserver Union和SQL Union All使用方法

    SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列的顺序必须相同. SQL UNION 语法SELECT column_name(s) FROM table_name1UNIONSELECT column_name(s) FROM table_name2 注释:默认地,UNION 操作符选取不同的值,即UNION是去了重

  • SQL SERVER实现连接与合并查询

    创建测试表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','上海

  • 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器

    今早开机发现,打开SQL Server 2008 的 SQL Server Management Studio,输入sa的密码发现,无法登陆数据库?提示以下错误: "在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)" 在网上看到他人说使用将服务器(local

  • SQL2005 provider: 命名管道提供程序 error: 40 无法打开到 SQL Server 的连接

    ASP.net连接SQL 2005数据库出现错误提示:在建立与服务器的连接时出错.在连接到 SQL Server 2005 时,在默认的设置下 SQL Server 不允许进行远程连接可能会导致此失败. (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接) 解决方法: 1.确保使用连接的用户名和密码可以正确登录到SQL2005.       2.确保服务器端的数据库允许远程连接,登录SQL2005企业管理器后,右键本机数据库点击"属性&qu

  • SQL Server 性能调优之查询从20秒至2秒的处理方法

    一.需求 需求很简单,就是需要查询一个报表,只有1个表,数据量大约60万左右,但是中间有些逻辑. 先说明一下服务器配置情况:1核CPU.2GB内存.机械硬盘.Sqlserver 2008 R2.Windows Server2008 R2 SP1和阿里云的服务器,简单说就是阿里云最差的服务器. 1.原始表结构 非常简单的一张表,这次不讨论数据冗余和表字段的设计,如是否可以把Project和Baojian提出成一个表等等,这个是原始表结构,这个目前是没有办法改变的. 2.查询的sql语句为 sele

  • SQL Server远程连接的设置步骤(图文)

    SQL Server正常连接时,若不需要远程操控其他电脑,可以用Windows身份验证模式,但是涉及到远程处理时,需要通过SQL Server身份验证登录.具体操作如下. 首先,我们在登录时,选择Windows身份验证,然后连接到服务器. 进入到登录主页面后,右击当前的对象资源管理器,选择属性,弹出如下图所示的页面,选择安全性,将服务器身份验证勾选为SQL Server和Windows身份验证模式,(若在安装软件时已选择第二种验证模式,可直接通过账号登录)如图2所示. 图2. 图3. 如图3所示

  • SQL Server高级内容之子查询和表链接概述及使用

    1.子查询概念 (1)就是在查询的where子句中的判断依据是另一个查询的结果,如此就构成了一个外部的查询和一个内部的查询,这个内部的查询就是自查询. (2)自查询的分类 1)独立子查询 ->独立单值(标量)子查询(=) 复制代码 代码如下: Select testID,stuID,testBase,testBeyond,testPro from Score where stuID=( select stuID from Student where stuName='Kencery' ) ->

  • 浅述SQL Server的聚焦强制索引查询条件和Columnstore Index

    前言 本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解. 强制索引查询条件 前面我们也讲了一点强制索引查询的知识,本节我们再来完整的讲述下 (1)SQL Server使用默认索引 USE TSQL2012 GO SELECT * FROM Sales.Orders 上述就不用我再啰嗦了,使用默认主键创建的聚集索引来执行查询执行计划. (2)SQL Server使用强制索引 USE TSQL2012 GO SELECT custid FROM Sales.Orde

  • SQL Server 远程连接服务器详细配置(sp_addlinkedserver)

    远程链接服务器详细配置 --建立连接服务器 EXEC sp_addlinkedserver '远程服务器IP','SQL Server' --标注存储 EXEC sp_addlinkedserver @server = 'server', --链接服务器的本地名称.也允许使用实例名称,例如MYSERVER\SQL1 @srvproduct = 'product_name' --OLE DB数据源的产品名.对于SQL Server实例来说,product_name是'SQL Server' , @

  • 远程连接局域网内的sql server 无法连接 错误与解决方法

    第一个错误"SQL Server 不存在或访问被拒绝"通常是最复杂的,错误发生的原因比较多,需要检查的方面也比较多 .一般说来,有以下几种可能性: 1.SQL Server名称或IP地址拼写有误: 2.服务器端网络配置有误: 3.客户端网络配置有误. 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因. 首先,检查网络物理连接: ping <服务器IP地址> 或者 ping <服务器名称> 如果 ping <服务器IP地址> 失败,说

  • 在ACCESS和SQL Server下Like 日期类型查询区别

    最近在用ACCESS数据库是遇到的问题总结: 一.在ACCESS中LIKE的用法 Access里like的通配符用法是这样: "?"表示任何单一字符: "*"表示零个或多个字符: "#"表示任何一个数字 所以应该是: select * from databasename where fieldname like '*XX*' 但在SQL SERVER 里是用%表示零个或多个字符 二.如何在ACCESS查询datetime类型字段的日期范围数据 如

随机推荐