MySQL 三种关联查询的方式: ON vs USING vs 传统风格
看看下面三个关联查询的 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 语句中的括号不是必须的,我个人喜欢这样写而已。
最新文章
- css3+jquery制作3d旋转相册
- 算法导论----贪心算法,删除k个数,使剩下的数字最小
- shell学习之路:shell基础大全2
- mac 下搭建php 编程环境全过程
- jq点击和鼠标移上效果以及一个等号";="; 二个等号";=="; 三个等号";==="; 的区别
- 【iOS】通知监听
- 针对css3特性浏览器兼容 封装less
- 通过改变计算机策略来解决“只能通过Chrome网上应用商店安装该程序”的方法及模版文件下载
- PLSQL_性能优化系列08_Oracle Insert / Direct Insert性能优化
- C++利用注册表添加桌面右键新建菜单
- [GeekBand]C++高级编程技术(2)
- java单例模式使用及注意事项
- [Gauss]POJ2947 Widget Factory
- java过滤html标签函数
- Document Classification
- spotlight 索引重建
- 第一个 HTML5Plus 移动应用
- Linux/Unix--设备类型
- XGBoost算法--学习笔记
- mobile_点透_传透_touch-action