SQL表连接中ON和WHERE子句之间的区别
发布时间:2021-03-18 17:17:36 所属栏目: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的“此数据库没有有效所有者”问题
- sql-server – 在SQL Server 2005中创建一个新的db用户
- 如何在SQL Server中将多行连接成一列?
- sql – 查询滚动日期范围内不同值的计数
- sql-server – 如何防止在列上创建统计信息?
- sql-server – 如何找出是谁/什么是锤击SQL Server TempDB
- sql-server-2008 – SQL 2008每10分钟执行一次CHECKDB,任何
- sql-server – 在SQL Server 2005中使用数据生成脚本
- sql-server – 识别未使用的存储过程
站长推荐
热点阅读


