转自:http://blog.csdn.net/huanghanqian/article/details/52847835

四种join的区别已老生常谈:

  • INNER JOIN(也可简写为JOIN): 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

那么问题来了,还有一种常见的写法是将表用逗号隔开,那这个又是怎么连接的呢。

先看这两张表。

使用逗号隔开的方法来连接表:

SELECT *
FROM employee,department
WHERE employee.DepartmentID = department.DepartmentID

输出结果:

可以很明显发现:这不就是inner join嘛!

没错,答案正是这样:sql用逗号连接多张表对应的是 inner join。

为了严谨性,我到处找sql的官方文档来证实这一点。然而搜不出来sql的文档(谁知道网址请务必发我),最后还是在维基百科上找到了可以当作论据的话。

SQL 定义了两种不同语法方式去表示"连接"。首先是"显式连接符号",它显式地使用关键字 JOIN,其次是"隐式连接符号",它使用所谓的"隐式连接符号"。隐式连接符号把需要连接的表放到 SELECT 语句的 FROM 部分,并用逗号隔开。这样就构成了一个"交叉连接",WHERE 语句可能放置一些过滤谓词(过滤条件)。那些过滤谓词在功能上等价于显式连接符号. SQL 89标准只支持内部连接与交叉连接,因此只有隐式连接这种表达方式;SQL 92标准增加了对外部连接的支持,这才有了JOIN表达式。

也就是说,

SELECT *
FROM employee
INNER JOIN department
ON employee.DepartmentID = department.DepartmentID

等价于:

SELECT *
FROM employee,department
WHERE employee.DepartmentID = department.DepartmentID

至于哪个效率高一点,其实两者是一回事,没有区别。只是内连接是由SQL 1999规则定的书写方式而已。

另外,在写sql语句测试4种join的时候,发现mysql对于full join返回的结果和inner join一模一样。经查阅资料,才发现原来mysql不支持full join啊。

见:http://stackoverflow.com/questions/4796872/full-outer-join-in-mysql

参考资料:

1.维基百科 https://zh.wikipedia.org/wiki/%E8%BF%9E%E6%8E%A5_(SQL)

2.w3school http://www.w3school.com.cn/sql/sql_join.asp

3.CSDN博客最后一段话 http://www.cnblogs.com/huangfr/archive/2012/06/20/2555530.html

sql用逗号连接多张表对应哪个join?的更多相关文章

  1. 转载:sql用逗号连接多张表对应哪个join?

    http://blog.csdn.net/huanghanqian/article/details/52847835 四种join的区别已老生常谈: INNER JOIN(也可简写为JOIN): 如果 ...

  2. 【转】sql用逗号连接多张表对应哪个join?

    逗号连接查询(用where连接条件): select order.id, order.orderdate,employee.id,employee.name from order,employee w ...

  3. SQL中的每一张表都必须设有主键吗

    问题描述: 公司的数据库表有时候会看到没有主键的,SQL中的每一张表都必须设有主键吗? 主键的作用: 1)保证实体的完整性: 2)加快数据库的操作速度: 3)在表中添加新记录时,数据库ACCESS会自 ...

  4. Azure SQL Database (21) 将整张表都迁移到Azure Stretch Database里

    <Windows Azure Platform 系列文章目录>  Azure SQL Database (19) Stretch Database 概览      Azure SQL Da ...

  5. sql语句 怎么从一张表中查询数据插入到另一张表中?

    sql语句 怎么从一张表中查询数据插入到另一张表中?  ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...

  6. 自关联映射:一个表自己关联自己,此时从同一个表中查询,通过起别名将一张表变成两张表,使用join语句。

    实例1:id自关联. 隐式内连接: 实例二:编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id .返回结果 不要求顺序 . 查询结果格式如下例: Weather +--- ...

  7. SQL 把数据从一张表更新到另一张表

    代码写多了,有些使用过的方法和技巧会一时半会想不起来,平日记录下来,方便自己和有需要的人日后查阅. UPDATE tb1 SET tb1.fieldOne = tb2.fieldOne /* 将原始表 ...

  8. SQL数据库查询出一张表中重复的数据,按某个字段来查找。

    例如表名为Course 需要查询出name重复的有那些??? 解答如下: 补充: 如:查询每个姓名出现大于2次,SQL如下 SELECT COUNT(NAME) as '出现次数',  NAME FR ...

  9. sql server2008怎么给一张表加一个用户

    有时候我们要对数据库进行权限管理,防止有人误操作或者窃取数据,那么小编这篇文章就是实现这个的操作过程. 百度经验:jingyan.baidu.com 工具/原料   sql server2008数据库 ...

随机推荐

  1. Oracle聚合连接字符串

    问题需求 现有一个数据表,如下: ID    CODE    NAME 1    A    张三 2    A    李四 3    B    王五 4    C    赵六 5    C    孙七 ...

  2. android中Snackbar(Design Support)的使用

    Snackbar是Android Design Support Library中的一个组件,想使用Snackbar,必须先引入Design Support,我这里引入的是当前的最新版本: implem ...

  3. OS 获取用户相册。保存图片。编辑图片为圆形

    // // ViewController.m // YunPhoto // // Created by qingyun on 3/4/14. // Copyright (c) 2014 qingyun ...

  4. js 判断l对象类型

    var obj = {}; obj.isObject = function (obj) { return Object.prototype.toString.call(obj) == '[object ...

  5. Javascript网页特效开发技巧

    Javascript网页特效开发技巧 相信很多人跟我一样,做网站开发已经有两到三年了,但大部分时间还是复制别人的代码,虽然能看懂别人的代码,同时也觉得别人写的代码很简单,但自己却写不出来: 我总结了一 ...

  6. linux2.6.30.4内核移植(3)——yaffs文件系统移植

    内核源码:linux2.6.30.4 交叉编译工具:3.4.5 移植linux内核至:TQ2440 工作基础:http://www.cnblogs.com/nufangrensheng/p/36696 ...

  7. sync_binlog

    sync_binlogMySQL提供一个sync_binlog参数来控制数据库的binlog刷到磁盘上去.虽然binlog也有binlog cache,但是MySQL并没有控制binlog cache ...

  8. Android学习笔记五:四大组件(转)

    转自:http://blog.csdn.net/shenggaofei/article/details/52450668 Android四大组件分别为activity.service.content ...

  9. 【Java多线程】线程同步方法概览

    一:使用syncrhoized内置锁实现同步 使用互斥来实现线程间的同步,保证共享数据在同一时刻只被一个线程使用.Java中最基本的互斥手段就是syncrhoized关键字. syncrhoized的 ...

  10. 关于Git HEAD^与HEAD~的关系

    关于Git HEAD^与HEAD~的关系 请参考下图,来自stackoverflow http://stackoverflow.com/questions/2221658/whats-the-diff ...