联合查询
解释:联合查询可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为UNION或UNION ALL。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。
- Union All:对两个结果集进行并集操作,包括重复行,不进行排序。
- 前提:列数相同,并且相应的列的类型相同
select * from (
select cname,cid from TblClass
union
select DName,DId from Department
) as t1
order by cname
select cid from TblClass
union all
select did from Department
select oname,SUM(ocount*oprice) as 销售总价
from tblorders
group by oname
union all
select '合计',SUM(ocount*oprice)
from tblorders
对于
select oname,SUM(ocount*oprice) as 销售总价
from tblorders
错误提示:
选择列表中的列 'tblorders.oname' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
--一次插入多条数据,这也是一种子查询,这种插入不需要写values关键字
insert into tblorders
select '瓜子',10,10 union all
select '二锅头',43,72
--完成表的备份
select * into tblOrders_bak--要求:表tblOrders_bak不存在
from tblorders
select * from tblOrders_bak
--快速插入二
insert into tblOrders_bak
select oname,ocount,oprice from tblOrders
连接查询
详细
做多个表的数据查询,主要包括内连接、外连接等。结果集中的数据被包含在多个表中,则需要使用连接查询。
- 内连接:inner join …on
例如:查询学生姓名及对应的班级名称
select tClassName,tSName
from TblClass
inner join tblstudent on TblClass.tClassId=TblStudent.tSClassId
--查询部门名称及对应的公司名称
--需要从部门表和公司表连接查询
select department.gname,company.gname
from groups as department
inner join groups as company
on department.gparent=company.gid
数据源:
结果:
补充:
select语句及执行顺序
5…select 5.2->distinct 7…top n [percent] 5.1->列名 聚合函数(1.2->列名或表达式)
1…1.1->from 表名
2…where 条件
3…group by … 4…having …
6…order by …
- 外连接
left join:左表中的信息全部出现,右表中的信息必须能够匹配的才出现
未匹配的项使用null填充
right join:右表中的信息全部出现,左表中的信息必须能够匹配的才出现
未匹配的项使用null填充
full join:所有数据都会出现,不匹配的项使用null填充
select * from Department left join Employee on department.DId=employee.edid
--查询所有学生(参加及未参加考试)的学生姓名、年龄、成绩,如果没有参加考试显示“缺考”,如果小于60分显示不及格
select TblStudent.tSName,
isnull(cast(TblScore.tEnglish as varchar(10)),'缺考'),
isnull(cast(TblScore.tMath as varchar(10)),'缺考')
from tblstudent
left join TblScore on TblStudent.tSId=TblScore.tSId