SQL 语句时,查询的内联接,外联接,空值和联接
2007-06-04 17:44
211 查看
出自:msdn的帮助文档
联接类型
当联接表时,创建的联接类型影响出现在内联接仅显示两个联接表中的匹配行的联接。(这是查询设计器中的默认联接类型。)例如,可以联接
titles表和
publishers表以创建显示每个书名的出版商名称的结果集。在内联接中,结果集内不包含没有出版商信息的书名,也不包含没有书名的出版商。这类联接所得到的SQL可能象下面这样:
·
SELECTtitle,pub_name
·
FROMtitlesINNERJOIN
publishersONtitles.pub_id=publishers.pub_id
注意当创建内联接时,包含NULL的列不与任何值匹配,因此不包括在结果集内。空值不与其它的空值匹配。
有关创建内联接的更多信息,请参见
外联接甚至包括在联接表中没有相关行的行的联接。可以创建外联接的三个变化形式来指定所包括的不匹配行:
左向外联接包括第一个命名表("左"表,出现在JOIN子句的最左边)中的所有行。不包括右表中的不匹配行。例如,下面的SQL语句说明
titles表和
publishers表之间的左向外联接包括所有的书名,甚至包括那些没有出版商信息的书名:
·
SELECTtitles.title_id,
·[code]titles.title,
·
publishers.pub_name
·
FROMtitlesLEFTOUTERJOINpublishers
·
ONtitles.pub_id
=publishers.pub_id
右向外联接包括第二个命名表("右"表,出现在JOIN子句的最右边)中的所有行。不包括左表中的不匹配行。例如,在
titles和
publishers表之间的右向外联接将包括所有的出版商,甚至包括那些在
titles表中没有书名的出版商。所得到的SQL可能象下面这样:
·
SELECTtitles.title_id,
·[code]titles.title,
·
publishers.pub_name
·
FROMtitlesRIGHTOUTERJOINpublishers
·
ONtitles.pub_id
=publishers.pub_id
完整外部联接包括所有联接表中的所有行,不论它们是否匹配。例如,
titles表和
publishers表之间的完整外部联接显示所有书名和所有出版商,甚至包括那些在另一个表中没有匹配值的书名和出版商。
·
SELECTtitles.title_id,
·[code]titles.title,
·
publishers.pub_name
·
FROMtitlesFULLOUTERJOINpublishers
·
ONtitles.pub_id
=publishers.pub_id
·有关创建外联接的更多信息,请参见
交叉联接在这类联接的结果集内,两个表中每两个可能成对的行占一行。例如,在通过作者CROSSJOIN出版商输出的结果集内,每个可能的作者/出版商组合占一行。所得到的SQL可能象下面这样:
·
SELECT*
FROMauthorsCROSSJOINpublishers
有关创建完全联接的更多信息,请参见
请参见
访问和更改关系数据 |
空值和联接
如果要联接的表的列中有空值,则这些空值互相不匹配。如果其中一个联接表的列中出现空值,只能通过外联接返回这些空值(除非WHERE子句不包括空值)。下面的两个表中,每个表在要参与联接的列中均包含NULL值:
table1table2
abcd
--------------------------
1oneNULLtwo
NULLthree4four
4join4
将列a中的值与列c中的值进行比较的联接在包含NULL值的列上不能获得匹配结果:
SELECT*
FROMtable1t1JOINtable2t2
ONt1.a=t2.c
ORDERBYt1.a
只返回列a和c值为4的一行:
abcd
----------------------------------
4join44four
(1row(s)affected)
从基表返回的空值和从外联接返回的空值也很难区分。例如,下面的SELECT语句对这两个表进行左向外联接:
SELECT*
FROMtable1t1LEFTOUTERJOINtable2t2
ONt1.a=t2.c
ORDERBYt1.a
下面是结果集:
abcd
----------------------------------
NULLthreeNULLNULL
1oneNULLNULL
4join44four
(3row(s)affected)
结果并不能使数据中的NULL值和表示联接失败的NULL值容易区分。如果要联接的数据出现空值,最好用常规联接将这些空值从结果中省略。
请参见
相关文章推荐
- SQL语句汇总(终篇)—— 表联接与联接查询
- 模糊查询/空值处理/数据排序oreder by/数据分组group by/SQL语句执行顺序
- SQL Server之 (二) SQL语句 模糊查询 空值处理 聚合函数
- SQL语句汇总(终篇)—— 表联接与联接查询
- sql查询语句的结果字段中有空值
- sql 遍历所有表中 某项 值为已知数的查询语句
- sql语句查询指定日期数据字段
- sql查询语句中查询指定行号的方法
- 在Excel中使用SQL语句查询和筛选
- SQL多条件查询Sql语句
- 常用SQL与ACCESS数据查询语句的区别
- 浅谈MySQL中优化sql语句查询常用的30种方法
- SQL查询语句
- 查询文章的上下篇Sql语句
- 【转】用标准的SQL语句实现查询记录分页
- 如何查询mysql中执行效率低的sql语句
- 【三十三】thinkphp之SQL查询语句(全)
- Sql语句查询某列A相同值的另一列B最大值的数据
- sql查询语句中like不能查出null字段的数据
- ASPNETCOREAPI 跨域处理 SQL 语句拼接 多条件分页查询 ASPNET CORE 核心 通过依赖注入(注入服务)