join on的条件问题

xyq1986 2008-04-08 05:39:51
select distinct * from t_User
left join t_UserInRole
on t_User.UserId=t_UserInRole.UserId
and t_User.UserId<10
这样写为什么连UserId>=10的也显示出来,
我知道可以用where,但我想知道一下写在on后面和写在where里的区别。
...全文
239 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JL99000 2008-04-08
  • 打赏
  • 举报
回复
首先,left join 的执行是有顺序的
他先用左边的第一条记录来右边的进行比较,找出符合条件的(如果没有符合条件的,则用左边的作为查询结果的左半部分,右边用空null来填充),依次执行左边的每一条记录,直到最后一条用,将所有结果拼在一起

注意:左连接结果的行数最少为左表的行数

其次,在加如了where条件后,where不是连接查询语句的一部分,他是在做完连接查询以后在做的过滤,因此他可以将做完左外连接的数据再过滤

xiaomeixiang 2008-04-08
  • 打赏
  • 举报
回复
翻了个以前的老贴,看了应该就能明白 JOIN 和 WHERE 是怎么执行的:

http://topic.csdn.net/t/20060922/21/5042110.html
zccmy22 2008-04-08
  • 打赏
  • 举报
回复
用 LEFT JOIN 运算 创建左边外部联接.左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

用RIGHT JOIN 运算 创建 右边外部联接.右边外部联接将包含了从第二个(右边)开始的两个表中的全部记录,即使在第一个(左边)表中并没有匹配值的记录。

例如,可以使用 LEFT JOIN 与部门(左边)及员工(右边)表来选择所有的部门,包含了没有分配到员工的部门。可以使用 RIGHT JOIN 选择所有的员工,包含了没有分配到部门的员工。

下列示例显示
所以加了条件应没有用。呵呵。
xiaomeixiang 2008-04-08
  • 打赏
  • 举报
回复
where对连接完成的表进行过滤,join只针对符合on后面条件的记录进行连接
zccmy22 2008-04-08
  • 打赏
  • 举报
回复
weher t_User.UserId <10 就可以了,
liangCK 2008-04-08
  • 打赏
  • 举报
回复
inner join没有区别
outer join就有区别.

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧