`
java378656992
  • 浏览: 40947 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

SQL--JOIN之完全用法

阅读更多

from:http://blog.csdn.net/fjp813/archive/2005/04/15/348996.aspx

外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:

LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

FULL JOIN 或 FULL OUTER 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
SQL Server 支持 SQL-92 外联接语法,以及在 WHERE 子句中使用 *= 和 =* 运算符指定外联接的旧式语法。由于 SQL-92 语法不容易产生歧义,而旧式 Transact-SQL 外联接有时会产生歧义,因此建议使用 SQL-92 语法。

使用左向外联接
假设在 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

下面是结果集:

au_fname au_lname pub_name
-------------------- ------------------------------ -----------------
Reginald Blotchet-Halls NULL
Michel DeFrance NULL
Innes del Castillo NULL
Ann Dull NULL
Marjorie Green NULL
Morningstar Greene NULL
Burt Gringlesby NULL
Sheryl Hunter NULL
Livia Karsen NULL
Charlene Locksley NULL
Stearns MacFeather NULL
Heather McBadden NULL
Michael O'Leary NULL
Sylvia Panteley NULL
Albert Ringer NULL
Anne Ringer NULL
Meander Smith NULL
Dean Straight NULL
Dirk Stringer NULL
Johnson White NULL
Akiko Yokomoto NULL
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems

(23 row(s) affected)

不管是否与 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

下面是结果集:

au_fname au_lname pub_name
-------------------- ------------------------ --------------------
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems
NULL NULL Binnet & Hardley
NULL NULL Five Lakes Publishing
NULL NULL GGG&G
NULL NULL Lucerne Publishing
NULL NULL New Moon Books
NULL NULL Ramona Publishers
NULL NULL Scootney Books

(9 row(s) affected)

使用谓词(如将联接与常量比较)可以进一步限制外联接。下例包含相同的右向外联接,但消除销售量低于 50 本的书籍的书名:

USE pubs
SELECT s.stor_id, s.qty, t.title
FROM sales s RIGHT OUTER JOIN titles t
ON s.title_id = t.title_id
AND s.qty > 50
ORDER BY s.stor_id ASC

下面是结果集:

stor_id qty title
------- ------ ---------------------------------------------------------
(null) (null) But Is It User Friendly?
(null) (null) Computer Phobic AND Non-Phobic Individuals: Behavior
Variations
(null) (null) Cooking with Computers: Surreptitious Balance Sheets
(null) (null) Emotional Security: A New Algorithm
(null) (null) Fifty Years in Buckingham Palace Kitchens
7066 75 Is Anger the Enemy?
(null) (null) Life Without Fear
(null) (null) Net Etiquette
(null) (null) Onions, Leeks, and Garlic: Cooking Secrets of the
Mediterranean
(null) (null) Prolonged Data Deprivation: Four Case Studies
(null) (null) Secrets of Silicon Valley
(null) (null) Silicon Valley Gastronomic Treats
(null) (null) Straight Talk About Computers
(null) (null) Sushi, Anyone?
(null) (null) The Busy Executive's Database Guide
(null) (null) The Gourmet Microwave
(null) (null) The Psychology of Computer Cooking
(null) (null) You Can Combat Computer Stress!

(18 row(s) affected)

有关谓词的更多信息,请参见 WHERE。

使用完整外部联接
若要通过在联接结果中包括不匹配的行保留不匹配信息,请使用完整外部联接。Microsoft® SQL Server™ 2000 提供完整外部联接运算符 FULL OUTER JOIN,不管另一个表是否有匹配的值,此运算符都包括两个表中的所有行。

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

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

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

下面是结果集:

au_fname au_lname pub_name
-------------------- ---------------------------- --------------------
Reginald Blotchet-Halls NULL
Michel DeFrance NULL
Innes del Castillo NULL
Ann Dull NULL
Marjorie Green NULL
Morningstar Greene NULL
Burt Gringlesby NULL
Sheryl Hunter NULL
Livia Karsen NULL
Charlene Locksley NULL
Stearns MacFeather NULL
Heather McBadden NULL
Michael O'Leary NULL
Sylvia Panteley NULL
Albert Ringer NULL
Anne Ringer NULL
Meander Smith NULL
Dean Straight NULL
Dirk Stringer NULL
Johnson White NULL
Akiko Yokomoto NULL
Abraham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems
NULL NULL Binnet & Hardley
NULL NULL Five Lakes Publishing
NULL NULL GGG&G
NULL NULL Lucerne Publishing
NULL NULL New Moon Books
NULL NULL Ramona Publishers
NULL NULL Scootney Books

(30 row(s) affected)


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=348996

分享到:
评论

相关推荐

    非常详细的SQL--JOIN之完全用法

    非常详细的SQL--JOIN之完全用法 本篇文章将详细介绍 SQL 中的 JOIN 操作,包括 LEFT JOIN、RIGHT JOIN、FULL JOIN 等多种类型的外联接,及其在实际应用中的使用方法。 什么是 JOIN 操作? JOIN 操作是 SQL 中的一...

    x-pack-sql-jdbc.rar

    X-Pack SQL JDBC驱动支持大部分标准SQL语法,包括SELECT、INSERT、UPDATE、DELETE等,同时也支持JOIN操作和聚合函数,使得对Elasticsearch的数据操作更加便捷。同时,它还提供了与Elasticsearch特有的功能,如全文...

    x-pack-sql-jdbc-7.4.2

    7.4.2版本确保了与多种SQL语法的兼容性,包括SELECT、INSERT、UPDATE、DELETE等基础语句,以及JOIN、GROUP BY、HAVING等复杂查询。这使得开发人员能够利用熟悉的SQL语法在Elasticsearch中进行数据操作,而无需学习新...

    SQL join 完全用法

    SQL join 完全用法 SQL join 完全用法 学习sql join

    SQL-Front_Setup MySql

    用户可以编写并运行各种类型的SQL语句,包括SELECT、INSERT、UPDATE、DELETE,以及更复杂的JOIN、子查询和聚合函数。编辑器还提供了查询结果的可视化展示,包括网格视图和文本视图,以便用户更好地理解和分析数据。 ...

    SQL:SQL-92,SQL-99和SQL-2003的BNF语法

    SQL-92是SQL的第一个正式标准,它为SQL提供了更严谨的定义,引入了新的关键字和语句,如`JOIN`、`INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN`等,以及`DECLARE`、`BEGIN`、`END`等用于创建存储过程的控制结构。...

    elasticsearch-sql-7.9.2.0(maven包)

    Elasticsearch SQL是将SQL查询语句引入到Elasticsearch中的一个插件,它使得习惯于使用SQL的用户...通过熟悉Elasticsearch的基本概念和SQL插件的使用方法,你可以更高效地管理和分析存放在Elasticsearch中的大数据。

    sql-jion 用法

    SQL JOIN是数据库操作中的关键部分,用于合并来自两个或多...理解这些JOIN的原理和用法对于写出高效的SQL查询至关重要,尤其是在处理大数据集时。在编写SQL查询时,应该根据业务需求和数据结构来决定最合适的JOIN类型。

    SQL 之JOIN 用法完全版.rar

    在这个“SQL之JOIN用法完全版”中,我们将深入探讨JOIN的不同类型及其应用。 1. **INNER JOIN**: INNER JOIN返回两个表中匹配的行。这意味着只有当第一个表中的某行与第二个表中的某行在指定的列上具有相同的值时...

    SqlServer中Group By高级使用--Inner Join分组统计

    今天我们将深入探讨如何在SQL Server中使用Group By与Inner Join结合来实现更复杂的分组统计。 首先,理解Group By的基本用法至关重要。Group By语句将结果集按照一个或多个列进行分组,这样我们可以对每个组应用...

    sql语句中join的用法

    ### SQL语句中JOIN的用法详解 在SQL查询语言中,`JOIN`是一个非常重要的概念,它允许我们从两个或多个表中提取数据。通过使用不同类型的JOIN操作,我们可以根据表之间的关系来灵活地组织数据。下面我们将详细介绍几...

    sql-92-bnf.tar.gz_BNF SQL92_bnf_sql b_sql server bnf_sql92 bnf

    - **递归定义**:BNF经常使用递归定义,如在SQL中,`<表达式>` 可能包含其他更复杂的表达式,形成语法树。 - **选择与重复**:`|` 表示选择,即非终结符可以是其后面一系列选项之一;`*` 和 `+` 分别表示零次或多...

    SQL语句left join/right join/inner join 的用法比较

    本篇文章将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法,并通过实例进行对比,帮助理解它们之间的差异。 1. LEFT JOIN(左连接) LEFT JOIN返回所有左表(在本例中为A表)的记录,即使在右表(B表)中没有...

    SQL中的left outer join,inner join,right outer join用法详解

    SQL 中的左外连接、内连接、右外连接用法详解 SQL 中的连接操作是数据库管理系统中最基本的操作之一,它能够将多个表中的数据结合起来,生成一个新的结果集。本文将对 SQL 中的左外连接、内连接、右外连接进行详细...

    SQL - Simply SQL - by rudy limeback

    - **多表连接**: 使用JOIN操作符连接多个表以获取所需数据。 - **子查询**: 在FROM子句中嵌套另一个SELECT语句,以创建临时结果集。 ##### 2.3 WHERE子句 第四章专注于WHERE子句,这是用来过滤结果集的关键部分。 ...

    from-sql-to-excel-using-sql-statments.rar_excel sql_sql server e

    标题中的"from-sql-to-excel-using-sql-statements"暗示了我们将探讨如何利用SQL语句将数据从SQL Server数据库导出到Excel电子表格。在IT领域,这是一项常见的任务,尤其是在数据分析和报告生成中。SQL(结构化查询...

    SQL-SERVER上机考试题.docx

    根据提供的文档内容,我们可以归纳出一系列关于SQL Server的数据管理和查询相关的知识点。这些知识点不仅涵盖了基本的数据完整性约束,还包括了各种SQL查询技巧,如简单的选择查询、数据汇总、连接查询以及子查询的...

    Laravel开发-with-join

    这个包可能通过扩展Eloquent的查询构建器,添加了一个方法或者修饰器,允许开发者在进行`with`预加载关联时,指定使用LEFT JOIN而不是默认的子查询。这有助于减少查询的复杂性和提高性能。 5. **使用示例**: ...

    cours-sql-sh-.zip_cours SQL_sql

    8. **联接操作**:掌握JOIN操作,如INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN,用于合并来自两个或更多表的数据。 9. **子查询**:理解如何在SQL查询中嵌套查询,以实现更复杂的数据筛选。 10. **聚合...

    sql-2003-bnf.tar.gz_bnf_sql 2003_sql2003

    在SQL 2003的BNF规范中,你将找到类似这样的语法规则,详细定义了SELECT、FROM、WHERE、GROUP BY、HAVING、JOIN等关键子句以及数据类型、运算符、函数和子查询等元素的使用方式。这些规则不仅对开发者有用,也是DBMS...

Global site tag (gtag.js) - Google Analytics