今天去面试遇到了一个问题,左连接查询的问题
2016-09-11 10:45
423 查看
问:(左(外)连接)左连接查询主数据一定能查询到数据吗?
答:一定能?
答案是错误的,现在想想好傻,如果一定能查询到数据,连表查询条件有什么作用呢?
以下有两张表做了测试:
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(右(外)连接)
的话!结果相反。
如果是INNER JOIN(等值连接)的话!需要两个条件都成立才能查询到数据
答:一定能?
答案是错误的,现在想想好傻,如果一定能查询到数据,连表查询条件有什么作用呢?
以下有两张表做了测试:
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 ;
相关文章推荐
- 今天遇到一个问题,linq语句的写法,查询动态字段
- 今天遇到的一个问题(windows的ssh客户端连接不到虚拟机Ubuntu)
- 今天遇到一个问题:在程序中加入的定时触发器,当时出现这样一个问题,触发器定时2秒,程序从后台查询数据经过复杂处理后时间超过了2秒,我查阅好些网络上说有可能触发器等待程序执行完毕后,在触发下一次,也有说
- 今天遇到的一个奇怪的vb.net问题
- 今天遇到一个问题才知道如果安装了命名实例 SSIS Service 需要手动更改配置文件
- 今天做开发时遇到的一个vs2005的问题
- 今天遇到了一个奇怪问题
- 今天更换主键时遇到的一个问题
- 今天看"精通PHP+MySQL应用开发"一个例子遇到的问题
- 今天遇到一个关于STL中排序的问题, 怀疑是sort的bug!
- 今天遇到的一个编译问题
- 今天做销售功能时在财务统计上遇到一个问题 想了一个解决方案
- 今天遇到的一个无聊问题
- 今天遇到一个网页抖动的问题,不知道怎么解决才好?
- 今天在处理GridView分页问题时遇到了一个比较常见的分页出错问题。
- 遇到一个问题,在rcp里不能连接上去
- 今天安装 Atlas 时遇到一个小问题
- 昨晚和今天遇到一个好蠢的问题
- 今天遇到vs2008的一个诡异问题
- 今天遇到的一个郁闷的问题。