联合查询&&连接查询

本文深入讲解了SQL中的联合查询与连接查询技术。联合查询可以合并多个相似选择查询的结果集,分为Union和UnionAll两种形式。连接查询用于跨表查询,包括内连接和外连接等。文中通过具体实例演示了各种查询的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

联合查询

  • 解释:联合查询可合并多个相似的选择查询的结果集。等同于将一个表追加到另一个表,从而实现将两个表的查询组合到一起,使用谓词为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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值