问:(左(外)连接)左连接查询主数据一定能查询到数据吗?

答:一定能?

答案是错误的,现在想想好傻,如果一定能查询到数据,连表查询条件有什么作用呢?

以下有两张表做了测试:

user 表,里面有两条数据,


活动表action,里面有一条数据:


SELECT 
  *,action.`id` AS action_id
FROM
  `users` LEFT JOIN ACTION ON users.`id`=action.`id`
LIMIT 0, 1000 ;


能查到数据,尽管action 的数据为空:


SELECT 
  *,action.`id` AS action_id
FROM
  `users` LEFT JOIN ACTION ON users.`id`=action.`id` WHERE users.`id`=3
LIMIT 0, 1000 ;


加上用户表的id=3,action是没有改条数据的,也是能查询到数据:


如果把action.`id`=2作为条件,尽管action能查询到数据可是users主表没有数据,所以无法查询到数据:


SELECT 
  *,action.`id` AS action_id
FROM
  `users` LEFT JOIN ACTION ON users.`id`=action.`id` WHERE action.`id`=2
LIMIT 0, 1000 ;




综上:我们可以得到:

1、如果主表作为条件【或者没有条件】有数据并且被连接表不作为条件,不管被连接是否有数据都能查询到有数据

2、如果被连接表作为查询条件能查询该表数据(无法查询数据),如果主表无法查询到数据的话,则不会查询到数据。


话外:

如果是right join(右(外)连接) 的话!结果相反。

(
SELECT 
  *,action.`id` AS action_id
FROM
  `users` RIGHT JOIN ACTION ON users.`id`=action.`id` 
LIMIT 0, 1000 ;)

如果是INNER JOIN(等值连接)的话!需要两个条件都成立才能查询到数据

SELECT 
  *,
  action.`id` AS action_id 
FROM
  `users` 
  INNER JOIN ACTION 
    ON users.`id` = action.`id` 
LIMIT 0, 1000 ;






更多相关文章

  1. 如何从databse中提取数据到2d数组中?
  2. php curl模拟登陆抓取数据
  3. 在PHP中从JSON获取数据
  4. 自动同步vps服务器或本地文件的数据到百度网盘
  5. 这是什么原因啊,没有找出错来啊(数据库用的是mysql)
  6. 将数据从一个流传输到另一个流
  7. 使用ORM在不在数据库中的表上的外键
  8. PHP5中数据库抽象层: PDO
  9. PHP用于解析JSON并添加到数据库mysql

随机推荐

  1. 图解IntelliJ IDEA 13版本对Android SQLi
  2. Android(安卓)使用 AIDL 实现进程间通信,
  3. Android漫游记(1)---内存映射镜像(memory
  4. Android(安卓)Dialog 全屏
  5. Android基本框架笔记
  6. Android 开发简介-系统架构
  7. android使用文件进行存储
  8. Android 面试题总结之Android 进阶(二)
  9. Android当中的MVP模式(三)基于分页列表的封
  10. Android创始人安迪 罗宾(Andy Rubin)离职