北京SEO

mysql left join用法分析

2019/10/10/17:34:39  阅读:1809  来源:谷歌SEO算法  标签: 发外链

left join这个命令我们会常用到了,LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行,下面我们来看看关于它的一些用法与其它命令配合使用的问题.

先看它的语法:

LEFT JOIN 关键字会从左表(table_name1)那里返回所有的行,即使在右表.

(table_name2) 中没有匹配的行.

LEFT JOIN 关键字语法,代码如下:

  1. SELECTcolumn_name(s)
  2. FROMtable_name1
  3. LEFTJOINtable_name2
  4. ONtable_name1.column_name=table_name2.column_name

给个通俗的解释吧.

  1. 例表a
  2. aidadate
  3. 1a1
  4. 2a2
  5. 3a3
  6. 表b
  7. bidbdate
  8. 1b1
  9. 2b2
  10. 4b4

两个表a,b相连接,要取出id相同的字段,代码如下:

select * from a inner join b on a.aid = b.bid

这是仅取出匹配的数据,此时的取出的是"

1 a1 b1

2 a2 b2

那么left join 指:select * from a left join b on a.aid = b.bid

首先取出a表中所有数据,然后再加上与a,b匹配的的数据,此时的取出的是:

1 a1 b1

2 a2 b2

3 a3 空字符

同样的也有right join,指的是首先取出b表中所有数据,然后再加上与a,b匹配的的数据 ,此时的取出的是:

1 a1 b1

2 a2 b2

4 空字符 b4

在left join中on 与where的分析.

•ON 子句与 WHERE 子句的不同

•一种更好地理解带有 WHERE ... IS NULL 子句的复杂匹配条件的简单方法

ON 条件(“A LEFT JOIN B ON 条件表达式”中的ON)用来决定如何从 B 表中检索数据行.

如果 B 表中没有任何一行数据匹配 ON 的条件,将会额外生成一行所有列为 NULL 的数据,在匹配阶段 WHERE 子句的条件都不会被使用。仅在匹配阶段完成以后,WHERE 子句条件才会被使用。它将从匹配阶段产生的数据中检索过滤.

让我们看一个 LFET JOIN 示例,代码如下:

  1. mysql>CREATETABLE`product`(
  2. `id`int(10)unsignedNOTNULLauto_increment,
  3. `amount`int(10)unsigneddefaultNULL,
  4. PRIMARYKEY(`id`)
  5. )ENGINE=MyISAMAUTO_INCREMENT=5DEFAULTCHARSET=latin1
  6. mysql>CREATETABLE`product_details`(
  7. `id`int(10)unsignedNOTNULL,
  8. `weight`int(10)unsigneddefaultNULL,
  9. `exist`int(10)unsigneddefaultNULL,
  10. PRIMARYKEY(`id`)
  11. )ENGINE=MyISAMDEFAULTCHARSET=latin1
  12. mysql>INSERTINTOproduct(id,amount)
  13. VALUES(1,100),(2,200),(3,300),(4,400);
  14. QueryOK,4rowsaffected(0.00sec)
  15. Records:4Duplicates:0Warnings:0
  16. mysql>INSERTINTOproduct_details(id,weight,exist)
  17. VALUES(2,22,0),(4,44,1),(5,55,0),(6,66,1);
  18. QueryOK,4rowsaffected(0.00sec)
  19. Records:4Duplicates:0Warnings:0
  20. mysql>SELECT*FROMproduct;
  21. +----+--------+
  22. |id|amount|
  23. +----+--------+
  24. |1|100|
  25. |2|200|
  26. |3|300|
  27. |4|400|
  28. +----+--------+
  29. 4rowsinset(0.00sec)
  30. mysql>SELECT*FROMproduct_details;
  31. +----+--------+-------+
  32. |id|weight|exist|
  33. +----+--------+-------+
  34. |2|22|0|
  35. |4|44|1|
  36. |5|55|0|
  37. |6|66|1|
  38. +----+--------+-------+
  39. 4rowsinset(0.00sec)
  40. --phpfensi.com
  41. mysql>SELECT*FROMproductLEFTJOINproduct_details
  42. ON(product.id=product_details.id);
  43. +----+--------+------+--------+-------+
  44. |id|amount|id|weight|exist|
  45. +----+--------+------+--------+-------+
  46. |1|100|NULL|NULL|NULL|
  47. |2|200|2|22|0|
  48. |3|300|NULL|NULL|NULL|
  49. |4|400|4|44|1|
  50. +----+--------+------+--------+-------+
  51. 4rowsinset(0.00sec)

ON 子句和 WHERE 子句有什么不同?

一个问题:下面两个查询的结果集有什么不同么?代码如下:

  1. 1.SELECT*FROMproductLEFTJOINproduct_details
  2. ON(product.id=product_details.id)
  3. ANDproduct_details.id=2;
  4. 2.SELECT*FROMproductLEFTJOINproduct_details
  5. ON(product.id=product_details.id)
  6. WHEREproduct_details.id=2;

用例子来理解最好不过了,代码如下:

  1. mysql>SELECT*FROMproductLEFTJOINproduct_details
  2. ON(product.id=product_details.id)
  3. ANDproduct_details.id=2;
  4. +----+--------+------+--------+-------+
  5. |id|amount|id|weight|exist|
  6. +----+--------+------+--------+-------+
  7. |1|100|NULL|NULL|NULL|
  8. |2|200|2|22|0|
  9. |3|300|NULL|NULL|NULL|
  10. |4|400|NULL|NULL|NULL|
  11. +----+--------+------+--------+-------+
  12. 4rowsinset(0.00sec)
  13. mysql>SELECT*FROMproductLEFTJOINproduct_details
  14. ON(product.id=product_details.id)
  15. WHEREproduct_details.id=2;
  16. +----+--------+----+--------+-------+
  17. |id|amount|id|weight|exist|
  18. +----+--------+----+--------+-------+
  19. |2|200|2|22|0|
  20. +----+--------+----+--------+-------+
  21. 1rowinset(0.01sec)

第一条查询使用 ON 条件决定了从 LEFT JOIN的 product_details表中检索符合的所有数据行.

第二条查询做了简单的LEFT JOIN,然后使用 WHERE 子句从 LEFT JOIN的数据中过滤掉不符合条件的数据行.

广告内容

mysql left join用法分析 mysql left join用法分析 mysql left join用法分析

相关阅读

热门评论

sunshine技术博客 sunshine技术博客

sunshine技术博客

总篇数164

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法