分享

SQL连接的总结 | OutOfMemory

 quasiceo 2014-02-03

SQL连接的总结

连接(join)可以在SELECT语句的FROM子句或WHERE子句中建立,在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。连接可以对同一个表操作,也可以对多个表操作,对同一个表操作的连接称为自连接(self join)。

连接类型(join type)分为三种:内连接、外连接和交叉连接。

内连接(inner join):使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。
外连接(outer join):与内连接不同的是外连接不只列出与连接条件相匹配的行,而且列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合条件的数据行。
交叉连接(cross join):返回连接表中所有数据行的笛卡尔积。

内链接分为等值连接和不等连接:
等值连接(equijoin):在连接条件中使用等于(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
不等连接(non-equijoin):在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。

注意:自然连接(natural join)是一种特殊的等值连接。它使用选择列表指出查询结果中所包括的列,由此删除连接表中的重复列。

Book数据表

Publishers数据表

自连接
select * from books b1 [inner] join books b2 on b1.price = b2.price

内连接(简称连接)
select * from books b [inner] join publishers p on b.publisher_id = p.publisher_id

自然连接
select b.*, p.name from books b [inner] join publishers p on b.publisher_id = p.publisher_id

左外连接(简称左连接)
select * from books b left [outer] join publishers p on b.publisher_id = p.publisher_id

右外连接(简称右连接)
select * from books b right [outer] join publishers p on b.publisher_id = p.publisher_id

全外连接(简称全连接)
select * from books b full [outer] join publishers p on b.publisher_id = p.publisher_id

交叉连接
select * from books cross join publishers

【2013-07-3更新】下图由 Moffatt在2008年制作:
SQL-Joins

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多