zoukankan      html  css  js  c++  java
  • 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 语句中的括号不是必须的,我个人喜欢这样写而已。

  • 相关阅读:
    数组实战---集合了一些常用函数
    PHP正则表达式函数
    ThinkPHP学习之-------视图
    ThinkPHP小技巧之改变应用名称
    ThinkPHP中常用总结一CURD操作
    PHPExcel从数据库导出数据
    用PHP脚本来拆分字符串并形成两个新字段
    PHPExcel导出数据的基本使用方法
    php 中文切割字符串长度
    Nginx 在configure时的参数
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5577614.html
Copyright © 2011-2022 走看看