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

1 创建联结

  • 原数据表
    MySQL必知必会学习笔记(6)—— 联结表_第1张图片
    MySQL必知必会学习笔记(6)—— 联结表_第2张图片

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)—— 联结表_第3张图片


  • 在一条 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)—— 联结表_第4张图片

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)—— 联结表_第5张图片


  • 使用子查询
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)—— 联结表_第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)—— 联结表_第7张图片

你可能感兴趣的:(#,SQL必知必会学习笔记)