SQL表连接中ON和WHERE子句之间的区别
发布时间:2021-03-19 01:51:19 所属栏目:MsSql教程 来源:网络整理
导读:select e.last_name,e.hire_datefrom employees e join employees mon (m.last_name = 'Davies')and (e.hire_date m.hire_date);select e.last_name,e.hire_datefrom employees e join employees mon (m.last_name = 'Davies')where (e.hire_date m.hire_dat
select e.last_name,e.hire_date from employees e join employees m on (m.last_name = 'Davies') and (e.hire_date > m.hire_date); select e.last_name,e.hire_date from employees e join employees m on (m.last_name = 'Davies') where (e.hire_date > m.hire_date); select e.last_name,e.hire_date from employees e join employees m on (e.hire_date > m.hire_date) where (m.last_name = 'Davies'); 这三个陈述具有相同的结果.除了不能单独使用,不使用on的事实,是否有任何特殊的理由在表连接中使用哪里? 解决方法主要区别在于使用不同的连接时.通常,如果要使用内部联接,则应该看到相同的结果,但是一旦开始使用LEFT联接,结果将会更改. 看看下面的例子 SQL Fiddle DEMO And have a look at the following article (very explanatory) 编辑@ShannonSeverance 架构和测试数据 CREATE TABLE Table1 ( ID INT,Val VARCHAR(20) ); INSERT INTO Table1 VALUES (1,'a'); INSERT INTO Table1 VALUES (2,'a'); CREATE TABLE Table2 ( ID INT,Val VARCHAR(20) ); INSERT INTO Table2 VALUES (1,'a'); 和测试 SELECT t1.ID,t1.Val,t2.ID ID2,t2.Val Val2 FROM Table1 t1 INNER JOIN Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val; SELECT t1.ID,t2.Val Val2 FROM Table1 t1,Table2 t2 WHERE t1.ID = t2.ID AND t1.Val = t2.Val; SELECT t1.ID,t2.Val Val2 FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val; SELECT t1.ID,t2.Val Val2 FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ID = t2.ID WHERE t1.Val = t2.Val; (编辑:百科站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 何时在重建索引时使用sort_in_tempdb?
- iis – 如何隐藏DMZ中的连接字符串
- sql-server – 尝试查找值上次更改的时间
- sql-server – IntelliSense无法正常工作但已启用
- sql-server – 为什么在列大小增加后创建索引需要更长的时间
- sql-server – 关于作为Head Blocker的SQL连接,我该怎么办?
- sql替换语句怎样做批量数据管理操作?
- sql-server – 根据Sql Server中的选定行生成插入脚本?
- sql – 在两个varchar字段上创建Unqiue不区分大小写的约束
- sql – 将动态生成的数据透视表转换为临时表
站长推荐
热点阅读

