博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL编程题02--where多表查询和inner join区别
阅读量:6933 次
发布时间:2019-06-27

本文共 1110 字,大约阅读时间需要 3 分钟。

表test1   a,b,d;表test2  a,c,f
查找出满足a=a,b=b and c=''的字段a、c、f
select tb1.a,tb1.b,tb2.f from test1 tb1
inner join test2 tb2 on tb1.a=tb2.a and tb1.b=tb2.b and tb2.c='';
  or
select tb1.a,tb1.b,tb2.f from test1 tb1,
test2 tb2 where tb1.a=tb2.a and tb1.b=tb2.b and tb2.c='';
 
 
转自:https://blog.csdn.net/Michaelwubo/article/details/80923248 

在多表查询中,一些SQL开发人员更喜欢使用WHERE来做join,比如:

SELECT a.ID, b.Name, b.Date FROM Customers a, Sales b WHERE a.ID = b.ID;
  • 1

缺点:在上面语句中,实际上是创建了两张表的笛卡尔积,所有可能的组合都会被创建出来。在笛卡尔连接中,在上面的例子中,如果有1000顾客和1000条销售记录,这个查询会先产生1000000个结果,然后通过正确的 ID过滤出1000条记录。 这是一种低效利用数据库资源,数据库多做100倍的工作。 在大型数据库中,笛卡尔连接是一个大问题,对两个大表的笛卡尔积会创建数10亿或万亿的记录。

为了避免创建笛卡尔积,应该使用INNER JOIN :

SELECT a.ID, b.Name, b.Date FROM Customers a INNER JOIN Sales b ON a.ID = b.ID;
  • 1

优点:如上面语句,使用inner join 这样数据库就只产生等于ID 的1000条目标结果。增加了查询效率。

有些数据库系统会识别出 WHERE连接并自动转换为 INNER JOIN。在这些数据库系统中,WHERE 连接与INNER JOIN 就没有性能差异。但是, INNER JOIN 是所有数据库都能识别的,因此DBA会建议在你的环境中使用它。

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。 RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

转载于:https://www.cnblogs.com/feihujiushiwo/p/10979660.html

你可能感兴趣的文章
select 语句的执行顺序
查看>>
wayos利用easyradius实现WEB认证页面的记住密码及到期提醒功能
查看>>
软件工程 软件的估计为什么这么难
查看>>
struts2标签
查看>>
[Cocoa]深入浅出Cocoa之多线程NSThread
查看>>
Silverlight运行原理经典问答。
查看>>
服务器
查看>>
15+ 提升技能的 jQuery 教程
查看>>
.NET的3C:CTS、CLS和CLR 以及 IL
查看>>
VS2010 ASP.NET MVC4 安装失败问题
查看>>
Cocos2d-X数据、动作、消息的基本操作
查看>>
顺序队列及其操作
查看>>
c++,不能声明为虚函数的函数
查看>>
了解了解一下SQLSERVER里的鬼影记录
查看>>
PHP5.4新特性(转)
查看>>
(八)适配器模式详解
查看>>
Android实现导航菜单随着ListView联动,当导航菜单遇到顶部菜单时停止在哪里,并且listview仍能滑动...
查看>>
Hopcroft-Karp算法模版
查看>>
【POJ】2828 Buy Tickets(线段树+特殊的技巧/splay)
查看>>
推荐ThinkJS
查看>>