欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL必知必会学习笔记(6)—— 联结表

程序员文章站 2022-05-03 18:33:43
...

1 创建联结

  • 原数据表
    MySQL必知必会学习笔记(6)—— 联结表
    MySQL必知必会学习笔记(6)—— 联结表

SELECT vend_name,prod_name,prod_price
from vendors,products
WHERE vendors.vend_id=products.vend_id
order by vend_name,prod_name;

MySQL必知必会学习笔记(6)—— 联结表


  • 在一条 select 语句中联结几个表时,相应的关系是在运行中构造的。在数据库表中的定义不存在能指示MySQL如何对表进行联结的东西;
  • 当联结两个表时,实际上是将第一个表中的每一行与第二个表中的每一行配对;where子句作为过滤条件,它只包含那些匹配给定条件(这里的联结条件)的行。
  • 没有 where 子句,第一个表中的每一行将与第二个表中的每个行配对;
  • 不要忘记where子句, 应该保证所有联结都有 where子句,否则 MySQL 将返回比想要的数据多得多的数据。

1.1 笛卡尔积

由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

2 内部联结

到目前所用的联结称为等值联结,它基于两个表之间的相等测试,这种联结也称为内部联结

SELECT vend_name,prod_name,prod_price
from vendors INNER JOIN products
ON vendors.vend_id=products.vend_id;

MySQL必知必会学习笔记(6)—— 联结表

2.1 联结多个表

SELECT vend_name,prod_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;

MySQL必知必会学习笔记(6)—— 联结表


  • 使用子查询
SELECT cust_name,cust_contact from customers
where cust_id in (SELECT cust_id from orders
WHERE order_num in(SELECT order_num from orderitems WHERE prod_id='TNT2'));

MySQL必知必会学习笔记(6)—— 联结表

  • 使用联结
SELECT cust_name,cust_contact 
from customers,orders,orderitems
where customers.cust_id=orders.cust_id
AND orderitems.order_num=orders.order_num
AND prod_id='TNT2';

MySQL必知必会学习笔记(6)—— 联结表