免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1238 | 回复: 0
打印 上一主题 下一主题

inner join, left join, right join [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-07 16:02 |只看该作者 |倒序浏览

MySQL支持下列用于SELECT语句的JOIN句法:
table_reference, table_reference
table_reference [CROSS] JOIN table_reference
table_reference INNER JOIN table_reference
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference ON conditional_expr
table_reference LEFT [OUTER] JOIN table_reference USING (column_list)
table_reference NATURAL LEFT [OUTER] JOIN table_reference
{ oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr }
上述最后的LEFT OUTER
JOIN的句法只是为了与ODBC兼容而存在的。
  • 一个表可以是使用aliasedtbl_name AS alias_name或tbl_name
    alias_name的起的别名。 mysql> select t1.name, t2.salary from employee AS t1, info AS t2
               where t1.name = t2.name;
  • INNER
    JOIN和,(逗号)在语义上是等价的,都是进行一个在使用的表之间的全联结。通常,你指定表应该如何用WHERE条件联结起来。
  • ON条件是可以用在一个WHERE子句形式的任何条件。
  • 如果在一个LEFT
    JOIN中没有右表的匹配记录,一个所有列设置为NULL的行被用于右表。你可以使用这个事实指出表中在另一个表中没有对应记录的记录:
    mysql> select table1.* from table1
               LEFT JOIN table2 ON table1.id=table2.id
               where table2.id is NULL;
    这个例子找出在table1中所有的行,其id值在table2中不存在(即,所有table1中的在table2中没有对应行的行)。当然这假定table2.id被声明为NOT
    NULL。
  • USING (column_list)子句命名一系列必须存在于两个表中的列。
    例如一个USING子句: A LEFT JOIN B USING (C1,C2,C3,...)
    被定义成在语义上等同一个这样的ON表达式:
    A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...
  • 2个表的NATURAL LEFT
    JOIN被定义为在语义上等同于一个有USING子句命名在两表中存在的所有列的一个LEFT
    JOIN。
  • STRAIGHT_JOIN等同于JOIN,除了左表在右表之前被读入,这能用于这些情况,联结优化器将表的顺序放错了。

一些例子:
mysql> select * from table1,table2 where table1.id=table2.id;
mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id;
mysql> select * from table1 LEFT JOIN table2 USING (id);
mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id
           LEFT JOIN table3 ON table2.id=table3.id;
如果上面的看的不太明白,请看下面的总结:
-----------------------------------------------------------------------
inner join   就是所有记录都要有,左边的表和右边的表都要有记录。  left join   就是只要满足左边的表的条件就行,右边的表有无记录都可以。right join   就是只要满足右边的表的条件就行,右边的表有无记录都可以。
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1222/showart_316801.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP