子查询、联合查询和连接查询
1.子查询
查询中嵌套查询。
如 select * from (
select CName,CId from TblClass
union
select DName,DId from Department
) as t1
order by cname
2.联合查询
将多个结果集合并成一个结果集,前提是列数相同,并且相应的列的类型相同。判断标准以第一个表的结果集为准。
执行结果集的特点:结果集的列名以第一个为准;
如上面的语句的结果集为在第一个表的基础上,插入第二个表的数据。列数和原来一致,只增加行数。
使用union关键字
自动排序、消除重复项
使用union all关键字
不自动排序,也不消除重复项
3.连接查询
做多个表的数据查询。有时,结果集中的数据被包含在多个表中,则需要使用连接查询。
第一种:内连接 inner join….on或join….on
匹配两张表中都有的数据
select tClassName,tSName
from TblClass
inner join TblStudent on TblClass.tClassId = TblStudent.tSClassId
或
select tClassName,tSName
from TblClass ,TblStudent
where TblClass.tClassId = TblStudent.tSClassId
只有两张表中的数据符合on条件,才会显示结果中。
第二种:外链接 left(outer) join..on , right(outer) join..on和full join.on
(1)left join ….on :左表中的信息全部出现,右表中的信息必须能够匹配的才出现
未匹配的项使用null填充
假设有A,B两张表
select * from A left (outer) join B on A.id = B.id;
或
select * from A ,B where A.id = B.id(+)
(2)right join …on:右表中的信息全部出现,左表中的信息必须能够匹配的才出现
未匹配的项使用null填充
select * from A right (outer) join B on A.id = B.id;
或
select * from A,B where A.id(+) = B.id;
(3)full join…on:所有数据都会出现,不匹配的项使用null填充
只要想做连接查询,必须分析出两个表间的关系
select * from A full join B on A.id = B.id;
还没有评论,来说两句吧...