子查询、联合查询和连接查询

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;

猜你喜欢

转载自blog.csdn.net/lcczpp/article/details/79905217