SQL:这两种关联写法各有什么优缺点吗?

创建学生表

CREATE TABLE IF NOT EXISTS student (
    id INT PRIMARY KEY,
    name CHAR(20),
    s_id INT
);

图片描述

创建学校表

CREATE TABLE IF NOT EXISTS school (
    id INT PRIMARY KEY,
    name VARCHAR(64)
);

图片描述

将学生与学校关联起来有以下另种方式

(1) SELECT a.name, b.name FROM Student a, School b WHERE a.s_id = b.id;
(2) SELECT a.name, b.name FROM Student a INNER JOIN School b ON a.s_id = b.id;

图片描述

平时都习惯用方式(1),但是看前辈们的代码都喜欢用方式(2),这个只是个人习惯问题还是说方式(2)更适用于复杂的SQL呢?比较基础的问题还望赐教...

阅读 4.9k
4 个回答

两种都是inner join, 我是1/2都用.

(1)应该会有性能问题吧,好像是先生成笛卡尔集再筛选。

新手上路,请多包涵

从写程序的角度来说,第二种方式比较容易写变量进行扩展 -。-

从性能来说,两种写法的执行方式是完全一样的,除非数据库的查询优化器有问题。
从语义来说:

  1. inner join 是SQL规范中的关键字,清晰的表达了查询中这两张表的关系。假想一下有10张表join的查询,where的写法更简短,而inner join的写法意义表达更清楚。

  2. 如果连接关系变化,需要改为outer join,inner join的写法更容易改。

这个答案说的蛮清楚的
http://stackoverflow.com/questions/1018822/inner-join-on-vs-where-clause

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进