您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

MySQL中如何用WHERE子句联结多个表

2024/4/16 19:21:17发布6次查看
where子句的重要性
利用 where 子句建立联结关系似乎有点奇怪,但实际上,有一个很充分的理由。请记住,在一条 select 语句中联结几个表时,相应的关系是在运行中构造的。在数据库表的定义中不存在能指示mysql如何对表进行联结的东西。你必须自己做这件事情。在联结两个表时,你实际上做的是将第一个表中的每一行与第二个表中的每一行配对。 where 子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的行。没有where 子句,第一个表中的每个行将与第二个表中的每个行配对,而不管它们逻辑上是否可以配在一起。
笛卡儿积(cartesian product) 由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
输入:
select vend_name,prod_name,prod_price from vendors,products order by vend_name,prod_name;
分析:相应的笛卡儿积不是我们所想要的。这里返回的数据用每个供应商匹配了每个产品,它包括了
供应商不正确的产品。实际上有的供应商根本就没有产品。
不要忘了 where 子句 应该保证所有联结都有 where 子句,否则mysql将返回比想要的数据多得多的数据。同理,应该保证 where 子句的正确性。不正确的过滤条件将导致mysql返回不正确的数据。
叉联结 有时我们会听到返回称为叉联结(cross join)的笛卡儿积的联结类型。
内部联结
目前为止所用的联结称为等值联结(equijoin),它基于两个表之间的相等测试。这种联结也称为内部联结。其实,对于这种联结可以使用稍微不同的语法来明确指定联结的类型。下面的 select 语句返回与前面例子完全相同的数据:
输入:
select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;
分析:此语句中的 select 与前面的 select 语句相同,但 from 子句不同。这里,两个表之间的关系是 from 子句的组成部分,以 innerjoin 指定。在使用这种语法时,联结条件用特定的 on 子句而不是 where子句给出。传递给 on 的实际条件与传递给 where 的相同。
使用哪种语法 ansi sql规范首选 inner join 语法。此外,尽管使用 where 子句定义联结的确比较简单,但是使用明确的联结语法能够确保不会忘记联结条件,有时候这样做也能影响性能。
联结多个表
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.products.prod_id and order_num = 20005;
输出:
分析:此例子显示编号为 20005 的订单中的物品。订单物品存储在orderitems 表中。每个产品按其产品id存储,它引用 products表中的产品。这些产品通过供应商id联结到 vendors 表中相应的供应商,供应商id存储在每个产品的记录中。这里的 from 子句列出了3个表,而where 子句定义了这两个联结条件,而第三个联结条件用来过滤出订单20005 中的物品。
性能考虑 mysql在运行时关联指定的每个表以处理联结。这种处理可能是非常耗费资源的,因此应该仔细,不要联结不必要的表。联结的表越多,性能下降越厉害。
多做实验 正如所见,为执行任一给定的sql操作,一般存在不止一种方法。很少有绝对正确或绝对错误的方法。性能可能会受操作类型、表中数据量、是否存在索引或键以及其他一些条件的影响。因此,有必要对不同的选择机制进行实验,以找出最适合具体情况的方法。
【相关推荐】
1.什么是mysql子查询?如何利用子查询进行过滤?
2.mysql创建计算字段使用子查询
3.mysql中什么是联结和关系表?
4.为什么使用联结和如何创建联结
以上就是mysql中如何用where子句联结多个表的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录