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');
这三个语句具有相同的结果。除了where不能不使用而不能专有使用的事实之外,在表连接中on是否还有任何特定的原因需要使用where?
where
on
主要区别是使用不同的联接时。
通常,如果使用内部联接,您应该会看到相同的结果,但是一旦开始使用LEFT联接,结果将发生变化。
看下面的例子
并看看下面的文章(非常说明)
编辑@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, t1.Val, t2.ID ID2, t2.Val Val2 FROM Table1 t1,Table2 t2 WHERE t1.ID = t2.ID AND t1.Val = t2.Val; SELECT t1.ID, t1.Val, t2.ID ID2, t2.Val Val2 FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ID = t2.ID AND t1.Val = t2.Val; SELECT t1.ID, t1.Val, t2.ID ID2, t2.Val Val2 FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.ID = t2.ID WHERE t1.Val = t2.Val;