首页 > 数据库 > 文库 > 正文

SQL 的连接查询

2023-05-28 13:18:00
字体:
来源:转载
供稿:网友

连接查询主要有这几个:

(1)内连接 inner join

与where相同 select * from @a Aa join @b Bb on Aa.a=Bb.a

(2)左外连接 left join

返回左边表所有符合条件的记录 select * from @a Aa left join @b Bb on Aa.a=Bb.a

(3)右外连接 right join

 返回右边表所有符合条件的记录 select * from @a Aa right join @b Bb on Aa.a=Bb.a

(4)全连接  full join

左向外连接和右向外连接的合集 select * from @a Aa full join @b Bb on Aa.a=Bb.a

(5)交叉连接 cross join

也称笛卡儿积。返回左表中的每一行与右表中所有行的组合

仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行,只要这些行符合任何 WHERE 或 HAVING 搜索条件。将检索通过左向外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行。完整外部联接中两个表的所有行都将返回。

Microsoft SQL Server 2000 对在 FROM 子句中指定的外联接使用以下 SQL-92 关键字:

LEFT OUTER JOIN 或 LEFT JOIN

RIGHT OUTER JOIN 或 RIGHT JOIN

FULL OUTER JOIN 或 FULL JOIN

使用左向外联接

假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet 和 Cheryl Carson)。

若要在结果中包括所有的作者,而不管出版商是否住在同一个城市,请使用 SQL-92 左向外联接。下面是 Transact-SQL 左向外联接的查询:

USE pubs
        SELECT a.au_fname, a.au_lname, p.pub_name 
           FROM authors a LEFT OUTER JOIN publishers p
          ON a.city = p.city 
          ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

不管是否与 publishers 表中的 city 列匹配,LEFT OUTER JOIN 均会在结果中包含 authors 表的所有行。注意:结果中所列的大多数作者都没有相匹配的数据,因此,这些行的 pub_name 列包含空值。

使用右向外联接

 假设在 city 列上联接 authors 表和 publishers 表。结果只显示在出版商所在城市居住的作者(本例中为 Abraham Bennet 和 Cheryl Carson)。SQL-92 右向外联接运算符 RIGHT OUTER JOIN 指明:不管第一个表中是否有匹配的数据,结果将包含第二个表中的所有行。

若要在结果中包括所有的出版商,而不管城市中是否还有出版商居住,请使用 SQL-92 右向外联接。下面是 Transact-SQL 右向外联接的查询:

USE pubs
         SELECT a.au_fname, a.au_lname, p.pub_name 
               FROM authors AS a RIGHT OUTER JOIN publishers AS p
              ON a.city = p.city 
              ORDER BY p.pub_name ASC, a.au_lname ASC, a.au_fname ASC

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表