SQL Server数据库培训——多表联接查询
上一篇 / 下一篇 2011-03-31 14:31:27 / 个人分类:数据库
1. 多表联接查询
1.1 交叉联接(cross join)
交叉联接就是取两张表的笛卡儿积,如果一个表有m行数据,另一个表有n含行数据,交叉联接就返回m*n行数据。
在查询的from子句中,可以给表分配一个别名,当两个表的列名有重复的时候,可以用别名区分,如果未分配别名的话,则需要用表的完整名称做前缀。
强烈要求都使用ANSI SQL-92语法。
按ANSI SQL-92语法
selectl.lower_letter,u.upper_letterfromTest_Lower lcross joinTest_Upper uorder byl.lower_letter
按ANSI SQL-89语法
selectl.lower_letter,u.upper_letterfromTest_Lower l, Test_Upper uorder byl.lower_letter
1.1.1 自交叉联接
对一个表的多个实例进行联接就是自联接,所有的基本联接类型都支持自联接。
selectl1.lower_letteraslower_letter1,l2.lower_letteraslower_letter2fromTest_Lower l1cross joinTest_Lower l2order byl1.lower_letter
1.2 内联接(inner join)
内联接就是在交叉的结果集上按指定的条件进行过滤。
内联接使用inner join,也可以去掉inner。
按ANSI SQL-92语法
selectl.lower_id,u.upper_first_id,l.lower_letter,u.upper_letterfromTest_Lower linner joinTest_Upper uonl.lower_id=u.upper_first_id
selectl.lower_id,u.upper_first_id,l.lower_letter,u.upper_letterfromTest_Lower ljoinTest_Upper uonl.lower_id=u.upper_first_id
按ANSI SQL-89语法
selectl.lower_id,u.upper_first_id,l.lower_letter,u.upper_letterfromTest_Lower l, Test_Upper uwherel.lower_id=u.upper_first_id
组合联接就是多条件的内联接
selectl.lower_id,u.upper_first_id,u.upper_second_id,l.lower_letter,u.upper_letterfromTest_Lower linner joinTest_Upper uonl.lower_id=u.upper_first_idandl.lower_id=u.upper_second_id
只包含等号的联接叫等值联接,如果包含等号之外的运算符则叫不等联接。