MSSQL 高级查询

连接类型:

       有五种,CROSS JOIN 交叉连接,INNER JOIN 内连接,LEFT JOIN 或者 LEFT OUTER JOIN 左外连接,RIGHT JOIN 或RIGHT OUTER JOIN 右外连接,FULL JOIN 或FULL OUTER JOIN 

1、交叉连接

    两个表的交叉连接是两个表进行广义笛卡儿积运算。返回的结果数据的行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例如,在“图书”表中有8条记录,在出版社中有5条记录,那么使用交叉连接得到的记录是8*5行。在这类连接的结果集中,其连接只是单纯的广义笛卡尔运算,其结果会产生一些没有意义的元组。所以这类连接实际上很少使用。


2、内连接

    内连接是指当且仅当连接条件成立时,才在结果集中产生一条连接记录。当左表中某记录根据连接条件在右表中没有匹配记录时,该记录便被忽略。一般分为等值连接、不等连接、自连接。

    1)等值连接

        等值连接是在连接条件中使用等于运算符,其查询结果中列出被连接表中的所有列,包括其中的重复列。在实际的使用中一般使用自然连接。自然连接就是在等值连接总把目标列中重复的列去掉。它通过在目标列中指定列的名称,在结果集中显示指定的列。

select * from t_userinfo inner join t_msg on t_userinfo.userid = t_msg.userid

    2)不等连接

        不等连接是在连接条件中使用除了等于运算符外的比较运算符,这些运算符包括>、>=、<=、<、!>、!<、<>等。

select * from t_userinfo inner join t_msg on t_userinfo.userid <> t_msg.userid

    3)自连接

    用户有时需要比较同一表中的两组信息才能获得所需的查询结果。SQL Server中提供了自连接来实现这种查询。所谓自连接就?是表通过与自身连接来获得该表中所需的属性列?

select a.UserName, a.Password,a.UserID, a.Experience
from t_userinfo a inner join T_UserInfo b on a.UserID = b.UserID
group by a.UserName,a.Password,a.UserID,a.Experience

3、外连接

        当至少有一个同属于两表的行符合连接条件时,内链接才返回行。内连接消除与另一个表中任何不匹配的行。如果要在结果集中包含在连接表中没有匹配的数据行,可以创建外连接。外连接会返回FROM子句中提到的至少一个表或视图的所有行,只要这些行符合任何WHERE或HAVING搜索条件。查询将通过左外连接引用左表的所有行,以及通过右外连接引用右外连接表中的所有行。完全连接中两个表所有行都将被返回。在进行一些统计时,常需要外连接。

select  * from t_userinfo a left join t_msg b on a.userid=b.userid


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。