关于数据库的知识点
表的子查询,联合查询,连接查询
子查询
查询中嵌套查询。把子查询的结果作为父查询的查询对象
如
select * from (
select CName,CId from TblClass
union
select DName,DId from Department
) as t1
order by cname
联合查询
将多个结果集合并成一个结果集,前提是列数相同,并且相应的列的类型相同。判断标准以第一个表的结果集为准。
执行结果集的特点:结果集的列名以第一个为准;
如上面的语句的结果集为在第一个表的基础上,插入第二个表的数据。列数和原来一致,只增加行数。
使用union关键字
自动排序、消除重复项
使用union all关键字
不自动排序,也不消除重复项
SQL数据库中有两张表,一张人员(T_Person)表、一张卡(T_Card)表,人基本上都那么几张卡,像银行卡、饭卡、水卡、电费卡……
连接查询
做多个表的数据查询。有时,结果集中的数据被包含在多个表中,则需要使用连接查询。
自连接inner join …on
在实际开发过程中,如果几个表(实体)满足树状结构,每个表处于单独一级,且观察发现表的结构非常类似,于是考虑将这些表合成一张表,这个时候就可以用自连接。
1.内连接(inner join 或 join)
内连接是等值连接,它使用“=、>、<、<>”等运算符根据每个表共有的列的值匹配两个表中的行 共有的
查询语句:
select * from T_Person inner join T_Card on T_Person.CardId = T_Card.CardId
外连接
2.左连接(left join 或 left outer join)
左连接又称左向外连接,查询的结果集包括SQL语句中左表的所有行,右表中匹配的行。如果左表的某行在右表中没有匹配行,则用空值表示
select * from T_Person left join T_Card on T_Person.CardId = T_Card.CardId
3.右连接(right join 或 right outer join)
右连接也成右向外连接,查询的结果集包括SQL语句中右表的所有行,左表中匹配的行。如果右表的某行在左表中没有匹配的行,则用空值表示
查询语句:
select * from T_Person right join T_Card on T_Person.CardId = T_Card.CardId
4.完全外连接(full join 或 full outer join)
完全外连接,查询的结果集包括SQL语句中左表和右表的所有行。如果某行在另一个表中没有匹配行时,则用空值表示。
select * from T_Person full join T_Card on T_Person.CardId = T_Card.CardId
left join:左表中的信息全部出现,右表中的信息必须能够匹配的才出现
未匹配的项使用null填充
right join:右表中的信息全部出现,左表中的信息必须能够匹配的才出现
未匹配的项使用null填充
full join:所有数据都会出现,不匹配的项使用null填充
只要想做连接查询,必须分析出两个表间的关系
总结
SQL中连接查询分内、外连接,外连接分左连接、右连接和完全外连接,它们的功能与视图差不多。其中左右连接查询是相对应的,即把连接类型和左表、右表互换位置就可得到相同的结果集。