看看下面三个关联查询的 SQL 语句有何区别?

1SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id)

2SELECT * FROM film JOIN film_actor USING (film_id)

3SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id

最大的不同更多是语法糖,但有一些有意思的东西值得关注。

为了方便区别,我们将前两种写法称作是 ANSI 风格,第三种称为 Theta 风格。

Theta 风格

在 FROM 短语中列出了关联的表名,而 WHERE 短语则指定如何关联。

这种写法被认为是古老的方式,有些时候比较难以理解,请看下面查询:

1SELECT * FROM film, film_actor WHERE film.film_id = film_actor.film_id AND actor_id = 17AND film.length > 120

上述查询列出片长超过 120 分钟的电影,其中包括演员编号是 17 的条件。别在意查询结果,查询本身如何呢?WHERE 表达式中包含三个条件,要看出哪个条件是关联,哪个条件是过滤还是稍费点事的。不过还是相对简单的,但如果是 5 个表,20 多个条件呢?

ANSI 风格: ON

使用 JOIN ... ON 可以将表关联的条件和记录过滤条件分开,将上面的语句重写后的结果如下:

1SELECT * FROM film JOIN film_actor ON (film.film_id = film_actor.film_id) WHERE actor_id = 17 AND film.length > 120

看起来清晰许多。

注意: ON 语句中的括号不是必须的,我个人喜欢这样写而已。

MySQL 三种关联查询的方式: ON vs USING vs 传统风格相关推荐

  1. delete from删除几张表关联和mysql几种连接查询总结

    delete from删除几张表关联和mysql几种连接查询总结 一.delete from删除几张表关联 ① 在多表连接时删除数据(错误删除示例): delete from sys_role_men ...

  2. MySQL中,关联查询的3种写法…

    原文地址:MySQL中,关联查询的3种写法(USING/ON) 作者:王小安 看看下面三个关联查询的 SQL 语句有何区别? [sql]  view plain copy SELECT * FROM  ...

  3. MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?

    这里写目录标题 MySQL多表关联查询对比多次单表查询,哪个效率高? 疑问: 高手解答: <阿里巴巴JAVA开发手册>里面写超过三张表禁止join 这是为什么?这样的话那sql要怎么写? ...

  4. MySQL中的关联查询

    MySQL中的关联查询 (1)Question:关联是什么 关联是SQL语言中使用SELECT操作表的一种操作机制,用来联系两个或者多个表.SELECT是SQL中的查询语句,用于查询数据库中的数据.将 ...

  5. c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...

    基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...

  6. 浅淡Webservice、WSDL三种服务访问的方式(附案例)

    Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...

  7. 关联查询mysql_《MySQL数据库》关联查询

    原标题:<MySQL数据库>关联查询 一.关联查询 1.概念 在查询数据时,所需要的数据不只在一张表中,可能在两张或多张表中.这个时候,需要同时操作这些表来查询数据,即关联查询. 关联查询 ...

  8. powerdesigner 怎么关联两张表_【PL/SQL数据库】 三种关联机制 - 执行计划

    看完这章你会学习到以下内容: 1. 三种关联分别是什么? 2. 什么时候那个适合用哪个?(总结) 一共有三种关联机制: Nest Loop 嵌套循环 (大小表) Sort Merge 排序合并 (添加 ...

  9. zynq学习03 zynq中三种实现GPIO的方式

    http://m.blog.csdn.net/article/details?id=52123465 http://blog.chinaaet.com/songhuangong/p/43084 本文介 ...

最新文章

  1. python django -5 进阶
  2. Express调用mssql驱动公共类dbHelper
  3. Eclipse 一直Building Workspace 的解决办法
  4. 知识库使用VIEW视图实现内部用户、组关联关系和flowable内置表打通
  5. canvas笔记-画一个五角星(含算法)
  6. Memcache的分布式应用
  7. Asp.net ajax、Anthem.net、Ajax pro三大ajax框架那一种使用比较方便?易于配置?
  8. Web前端开发最佳实践(3):前端代码和资源的压缩与合并
  9. PCL中将回调函数封装到类中
  10. MySQL Binlog--事务日志和BINLOG落盘参数对磁盘IO的影响
  11. html切西瓜游戏源码,html5切水果源码(水果忍者)
  12. 教你在电脑中学会视频格式批量转换
  13. 计算机磁盘在线分区,电脑硬盘分区知多少 怎么分区才合理?
  14. 【生活中的逻辑谬误】对人不对事和两难陷阱
  15. cpp调用c头文件引用方法
  16. 基础知识系列博客——计算机组成原理
  17. java excel 批注_Java 添加、读取和删除 Excel 批注的操作代码
  18. Angular 的 ngOnInit 和 Constructor 的区别
  19. 笔记本处理器排名_【笔记本】AMD YES,霸占性能排行榜前四
  20. Python万年历(含农历、节气等)

热门文章

  1. Oracle EBS-SQL (BOM-19):主BOM与替代BOM互换.sql
  2. 思科修复NSA报告的Nexus 交换机DoS漏洞及其它
  3. CISA:攻击者正在利用开源Zabbix服务器中的多个漏洞!
  4. 最常被利用的三大 API 漏洞:是什么、为什么、如何阻止?
  5. 谷歌修复另一枚已遭利用的 Chrome 释放后使用0day,细节未公开
  6. GitHub 在热门 Node.js changelog 开源库Standard Version中发现 RCE 漏洞
  7. istio组件介绍和启动流程
  8. 动态传参, 名称空间, 嵌套, gloabal, nonlocal
  9. 通过Nethogs查看服务器网卡流量情况
  10. 【转】C++11 标准新特性: 右值引用与转移语义