Union-SQL Server学习笔记
1、简单笔记
数据库查询语句中,通过UNION组合查询语句,可以将两个或更多查询的结果组合为单个结果集,该结果集包含组合查询中的所有查询的全部行。
利用UNION语句可以实现将不同数据表中符合条件,不同列种的数据信息,显示在另一个表中.
语法格式:
select 语句 union select 语句 where 条件表达式 ;
在使用Union运算符时遵循以下准则:
(1)所有选择列表的表达式的数目必须相同(列名,算术表达式,聚合函数等)
select stu_id as 学号,stu_math as 数学成绩 from Score where stu_english>60 union select stu_id as 学号,stu_age as 年龄 from Students where stu_sex=0;
(2)在查询结果集中的相应列或个别查询中使用的任意列的子集必须具有相同的数据类型,并且两种数据类型之间必须存在可能的隐性数据转换,或者提供显示数据转换
select 学生姓名 from Students union select convert(varchar(20),总分) from Grade where 总分>600 union select 课程名称 from Course;
(3)用Union运算符组合个各语句中对应的结果集列出现的顺序必须相同,因为Union运算符是按照各个查询给定的顺序逐个比较各列
(4)在Union操作中组合不同的数据类型时,这些数据类型将使用数据类型优先级的规则进行转换。例如int值转换成float,因为float类型的优先权比Int类型高
(5)通过Union生成的表中的列名来自Union语句中的第一个单独的查询,若要用新列名引用结果集中的某列,必须按照第一个select语句中的方式引用该列
2、对组合查询后的结果进行排序
select 年龄 as 信息 from Students union select 学分 from Grade union select 课程编号 from Scourse order by 信息 ASC
3、获取组合查询中两个结果集的交集
select 学生编号,学生姓名 from Students intersect select 学生编号,学生姓名 from Score;
4、获取组合查询中两个结果集的差集
select 学生编号,学生姓名 from Students except select 学生编号,学生姓名 from Score;
等值连接与自然连接的区别:
select Students.stu_id,stu_name,stu_age,stu_sex,stu_birthday,Score.stu_math from Students inner join Score on Students.stu_id=Score.stu_id;
什么是内连接查询?
内连接是用比较运算符将要连接数据列的值连接,内连接INNER JOIN只返回同时和两个表或结果集匹配的数据行
什么是等值连接?
等值连接是指在连接条件中使用等号(=)运算符比较连接数据列的值,在查询结果中列出本连接表中的所有数据列,包括其中的重复数据列,等值连接用于返回所有连接表中具有匹配值的行,而排除其他的行。
不等连接<>
通常不等连接只有与自然连接同时使用才有意义
select stu1.* from Students as stu1 inner join stu2 as stu2 on stu1.所在学院<>stu2.所在学院 and stu2。Name='张三';
二、外连接
外连接OUTER JOIN包括左外连接LEFT OUTER JOIN 和 右外连接RIGHT OUTER JOIN。
外连接OUTER JOIN要求数据库系统返回的不仅是和所指定的判断标准匹配的行信息,同时也需要把连接体中的不匹配的信息返回,利用左外连接可以实现统计数据的功能。
左外连接:Left outer join查询--将左外连接左边的数据表的所有数据记录都包含在查询结果集中,而只将右边数据表中有匹配的数据记录添加到结果集
select st.姓名,st.性别,st.年龄,gr.总分 from tb_Student as st left outer join tb_Grade as gr on st.学生编号=gr.学生编号;
右外连接:Right outer join查询--将右外连接右边的数据表的所有数据记录都包含在查询结果集中,而只将左边数据表中有匹配的数据记录添加到结果集
select st.姓名,st.性别,st.年龄,gr.总分 from tb_Student as st Right outer join tb_Grade as gr on st.学生编号=gr.学生编号;