看看下面三个关联查询的 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 语句中的括号不是必须的,我个人喜欢这样写而已。 (责任编辑:好模板) |