今天去面试遇到了一个问题,左连接查询的问题
16lz
2021-01-22
问:(左(外)连接)左连接查询主数据一定能查询到数据吗?
答:一定能?
答案是错误的,现在想想好傻,如果一定能查询到数据,连表查询条件有什么作用呢?
以下有两张表做了测试:
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 ;
更多相关文章
- 如何从databse中提取数据到2d数组中?
- php curl模拟登陆抓取数据
- 在PHP中从JSON获取数据
- 自动同步vps服务器或本地文件的数据到百度网盘
- 这是什么原因啊,没有找出错来啊(数据库用的是mysql)
- 将数据从一个流传输到另一个流
- 使用ORM在不在数据库中的表上的外键
- PHP5中数据库抽象层: PDO
- PHP用于解析JSON并添加到数据库mysql