关键词不能为空

当前您在: 主页 > 英语 >

SQL中ON和WHERE的区别

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-01-29 02:58
tags:

-分量

2021年1月29日发(作者:lookover)


SQL



ON



WHERE


的区别




数据库在通过连接两张或多张表来返回记录时,


都会生成一张中 间的临时表,


然后再将这张


临时表返回给用户。



在使用


left jion


时,


on



where


条件的区别如下:



1



on


条 件是在生成临时表时使用的条件,它不管


on


中的条件是否为真 ,都会返回左边表


中的记录。



2< /p>



where


条件是在临时表生成好后, 再对临时表进行过滤的条件。这时已经没有


left


join


的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。



假设有两张表:




1



tab2


id size


1 10


2 20


3 30



2

< p>


tab2


size name


10 AAA


20 BBB


20 CCC



两条


SQL:


1



select


*


form


tab1


left


join


tab2


on


(


=


)


where


=

< br>’


AAA




2



select


*


form


tab1


left


join


tab2


on


(


=


and


=



AAA



)



第一条


SQL


的过程:


1



中间表


on


条件


:



=







1 10 10 AAA


2 20 20 BBB


2 20 20 CCC


3 30 (null) (null)



2


< p>
再对中间表过滤


where


条件:


=



AAA








1 10 10 AAA



第二条


SQL


的过程:


1


、中间表


on


条件


: = and =



AAA



(



件不为真也会返回左 表中的记录


)


1 10 10 AAA


2 20 (null) (null)


3 30 (null) (null)



其实以上结果的关键原因就是


left


join,right


join,full


join


的特殊性,不管


on


上的条


件是否为真都会返回


left



right


表中的记录,


full


则具有


left



right


的特性的并集。




inner join


没这个特殊性 ,则条件放在


on


中和


where


中,返回的结果集是相同的。


on


为了反映 外连接中一方的全连接,而


where


没有这个功能,内连接配 对是可以的。




======= ================================================== =========



on



where



having


的区别




on



where



hav ing


这三个都可以加条件的子句中,


on

是最先执行,


where


次之,


h aving


最后。有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。但 因为


on


是先


把不符合条件的记录过滤 后才进行统计,


它就可以减少中间运算要处理的数据,


按理说应 该


速度是最快的。





根据上面的分析,可以知道


wh ere


也应该比


having


快点的, 因为它过滤数据后才进行


sum



所以


having


是最慢的。


但也不是说< /p>


having


没用,


因为有时在步骤


3


还没出来都不知道


那个记录才符合要求时 ,就要用


having


了。





在两个表联接时才用


on


的,所以在一个表的时候,就剩下


where



having


比较了。在


这单表查询统计的情况下,


如果要过滤的条件没有涉及到要计算 字段,


那它们的结果是一样


的,只是


w here


可以使用


rushmore


技 术,而


having


就不能,在速度上后者要慢。





如果要涉及 到计算的字段,就表示在没计算之前,这个字段的值是不确定的,根据上篇


写的工作流程 ,


where


的作用时间是在计算之前就完成的,而

< p>
having


就是在计算后才起作


用的,所以在这 种情况下,两者的结果会不同。





在多表联接查询时,


on



where


更早起作用。系统首先根据各个 表之间的联接条件,把


多个表合成一个临时表后,再由


wher e


进行过滤,然后再计算,计算完后再由


having


进行


过滤。


由此可见,


要想过滤条件起到正确的作用,


首先要明白这个条件应该在什幺时候起作


用,然后再决定放在那里



JOIN


联表中


ON,WHERE


后面跟条件的区别




对于


JOIN


的连表操作,这里就不细述了,当我们在对表进行

< p>
JOIN


关联操作时,对于


ON

< br>和


WHERE


后面的条件,不清楚大家有没有注意过,有 什幺区别,可能有的朋友会认为跟在它们


后面的条件是一样的,你可以跟在


ON


后面,如果愿意,也可以跟在


WHERE


后面。它们在


ON



WHERE


后面究竟有一个什幺样的区别呢?




JOIN


操作里,有几种情况。

< br>LEFT JOIN,RIGHT JOIN,INNER JOIN


等。




为了清楚的表达主题所描述的问题,我简要的对


LEFT,RIGHT,INN ER


这几种连接方式作一个


说明。




下面就拿一个普通的博客系统的日志表

(post)


和分类表


(category)


来描述吧。




这里我 们规定有的日志可能没有分类,有的分类可能目前没有属于它的文章。




JOIN:


(保证找出左联表中的所有行)



查出所有文章,并显示出他们的分类:



SELECT ,ry_name


FROM post p


LEFT JOIN category c ON = 2.



RIGHT JOIN:


(保证找出右联表中的所有行)



查询所有的分类,并显示出该分类所含有的文章数。



SELECT COUNT(),ry_name


FROM post p


RIGHT JOIN category c ON = 3.

-分量


-分量


-分量


-分量


-分量


-分量


-分量


-分量



本文更新与2021-01-29 02:58,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/583155.html

SQL中ON和WHERE的区别的相关文章