看看下面三个关联查询的 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 语句中的括号不是必须的,我个人喜欢这样写而已。

最新文章

  1. css3+jquery制作3d旋转相册
  2. 算法导论----贪心算法,删除k个数,使剩下的数字最小
  3. shell学习之路:shell基础大全2
  4. mac 下搭建php 编程环境全过程
  5. jq点击和鼠标移上效果以及一个等号"=" 二个等号"==" 三个等号"===" 的区别
  6. 【iOS】通知监听
  7. 针对css3特性浏览器兼容 封装less
  8. 通过改变计算机策略来解决“只能通过Chrome网上应用商店安装该程序”的方法及模版文件下载
  9. PLSQL_性能优化系列08_Oracle Insert / Direct Insert性能优化
  10. C++利用注册表添加桌面右键新建菜单
  11. [GeekBand]C++高级编程技术(2)
  12. java单例模式使用及注意事项
  13. [Gauss]POJ2947 Widget Factory
  14. java过滤html标签函数
  15. Document Classification
  16. spotlight 索引重建
  17. 第一个 HTML5Plus 移动应用
  18. Linux/Unix--设备类型
  19. XGBoost算法--学习笔记
  20. mobile_点透_传透_touch-action

热门文章

  1. hdu 4639
  2. jsonp跨域请求实现示例
  3. CodeForces - 320B Ping-Pong (Easy Version)
  4. loadrunner 并发操作集合点配置
  5. BZOJ1573: [Usaco2009 Open]牛绣花cowemb
  6. [CERC2015]Digit Division
  7. LINUX 下 ipv6 socket 编程
  8. Java中Cookie常用操作类(Spring中操作Cookie)
  9. SqlSugar最容易使用的ORM
  10. Office WORD WPS如何取消拼写检查