MySQL必知必会学习笔记(6)—— 联结表
程序员文章站
2022-05-03 18:33:43
...
1 创建联结
- 原数据表
SELECT vend_name,prod_name,prod_price
from vendors,products
WHERE vendors.vend_id=products.vend_id
order by vend_name,prod_name;
- 在一条
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;
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;
- 使用子查询
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'));
- 使用联结
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';
上一篇: Spring Boot整合swagger
下一篇: 一、Mysql基础学习