MySQL创建联结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaoxd200808501/article/details/78405344

说明:本文所使用的数据库样例表创建脚本下载地址:https://github.com/zhaoxd298/mysql_scripts
  
  如果要检索的数据存储在多个表中,如何用单条SELECT语句检索出想要的数据?
  答案是使用联结。联结是一种机制,用来在一条SELECT语句中关联表。联结实际在数据库中是不存在的,联结由MySQL根据需要建立,它存在于查询的执行当中。

一、创建联结

  下面例子为通过联结检索供应商ACME的所有产品:

SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id AND vend_name = 'ACME';   

执行结果:
这里写图片描述

  在该例子中通过WHERE子句正确的联结了两个表。第一个联结条件“vendors.vend_id = products.vend_id”指示MySQL匹配vendors表中的vend_id和products表中的vend_id。第二个联结条件“vend_name = ‘ACME’”过滤出供应商ACME的产品。

WHERE子句的重要性:
  在联结两个表时,实际上做的是将第一个表中的每一行与第二个表中的每一行匹配,WHERE子句作为过滤条件,它只匹配给定条件(这是是联结条件)的行。

内部联结
  上面例子所用的联结称为等值联结,它是基于两个表之间的相等测试。这种联结也称为内部联结。对于这种联结可以使用稍微不同的语法来明确指定联结的类型,下面的SELECT语句返回与前面例子完全相同的数据:

SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id AND vend_name = 'ACME';  

执行结果:
这里写图片描述

二、联结多个表

  SQL对一条SELECT语句中可以联结的表的数目没有限制,创建联结的基本规则也相同:首先列出表,然后定义表之间的关系

SELECT prod_name, vend_name, prod_price, quantity
FROM orderitems, products, vendors
WHERE products.vend_id = vendors.vend_id AND
      orderitems.prod_id = products.prod_id AND
      order_num = 20005;    

执行结果:
这里写图片描述

这里FROM子句列出了3个表,WHERE子句定义了两个联结条件,而第三个联结条件用来过滤出订单20005中的物品。

猜你喜欢

转载自blog.csdn.net/zhaoxd200808501/article/details/78405344