当前位置:首页 » 编程语言 » sqlonin

sqlonin

发布时间: 2022-05-05 21:47:54

sql 语句 in的优化。

假设原来的句子是
select * from t1 where t1.f1 in (select t2.f2 from t2 where t2.f2=xxx)
和你的很类似
你用子查询 很慢
我们现在修改为:
select t1.* from t1 ,t2 where t1.f1 = t2.f2 and t2.f2=xxxx
这里使用了关联查询代替了子查询大大提高效率。
其次你可以考虑在表t1.f1上加索引,提高查询速度。

⑵ 这SQL语句里的ON 是什么意思啊

on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

on、where、having这三个都可以加条件的子句中,on是最先执行,where次之,having最后。有时候如果这先后顺序不影响中间结果的话,那最终结果是相同的。但因为on是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的。

根据上面的分析,可以知道where也应该比having快点的,因为它过滤数据后才进行sum,所以having是最慢的。但也不是说having没用,因为有时在步骤3还没出来都不知道那个记录才符合要求时,就要用having了。

在两个表联接时才用on的,所以在一个表的时候,就剩下where跟having比较了。在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where可以使用rushmore技术,而having就不能,在速度上后者要慢。

(2)sqlonin扩展阅读

SQL中on条件与where条件的区别:

where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

在多表联接查询时,on比where更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where进行过滤,然后再计算,计算完后再由having进行过滤。由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里。

join过程可以这样理解:首先两个表做一个笛卡尔积,on后面的条件是对这个笛卡尔积做一个过滤形成一张临时表,如果没有where就直接返回结果,如果有where就对上一步的临时表再进行过滤。

数据库中 in on,with等关键字的用法及示例,请高手帮忙!!!!!

1) in
select * from tab where field in ('A', 'B', 'C')
等价于select * from tab where field = 'A' or field = 'B' or field = 'C'

2) on永在表连接的时候
select * from a inner/left/right join b on a.xx = b.xx

3)with
我用过的就db2里面会用到,作为递归的时候用,不是sql通用关键字,不是那么容易解释的,
网络有解释,很清楚,你自己看看
DB2 with用法
2009-09-24 23:40
1,创建一个表

create table regr (pid integer,id integer, name char(20))
alter table regr alter id set not null add primary key(id)
insert into regr values(-1,1,'library'),(1,2,'news'),(2,3,'world news'),(2,4,'politics'),(2,5,'bussiness'),(2,6,'science'),(2,7,'technology'),(1,8,'sports'),(8,9,'local'),(8,10,'collegiate'),(8,11,'professional'),(9,12,'soccer'),(10,13,'soccer'),(11,14,'soccer'),(9,15,'football'),(10,16,'football'),(11,17,'football')

2,使用with得到数据树

WITH RPL (PID, ID, name) AS
(
SELECT ROOT.PID, ROOT.ID, ROOT.Name
FROM regr ROOT
WHERE ROOT.PID = 8
UNION ALL
SELECT CHILD.PID, CHILD.ID, CHILD.Name
FROM RPL PARENT, regr CHILD
WHERE PARENT.ID = CHILD.PID
)
SELECT DISTINCT PID, ID, Name
FROM RPL
ORDER BY PID, ID, Name

让我们研究这个查询的组件:

RPL 作为一个具有以下三列的虚拟表:PID、ID 和 name。

WITH 子句内的第一个 SELECT 语句是初始化表。它只执行一次。它的结果形成虚拟表的初始内容以作为递归的种子。在上面的示例中,种子是 PID 为 8 的一行或多行。

第二个 SELECT 语句执行多次。将种子作为输入(JOIN 中的辅助表)传递给第二个 SELECT 语句以产生下一个行集合。将 JOIN 的结果添加(UNION ALL)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。

⑷ sql server中的关键字in和on有什么区别

IN指的是某字段的值在某个集合当中。也就是该字段的取值范围。
如:Select * from name where name In ('a','s','d')
ON主要实在表之间进行连接时指明连接条件的,有内连接,外连接等如:
SELECT * FROM apps INNER JOIN
altapp ON apps.app_name = altapp.source_name

⑸ sql语句中in的用法问题

IN的用法没有错,可能是数据里面没有'南京'的数据,或者你IN放的位置不对

⑹ 请问一下,那位高手知道数据库语句中 in ,on ,with 等关键字的用法啊,求解.......

这个问题不太明确,in,谓词,用来查找属性值属于指定集合的元组 ,可以作为一个where条件 select * from table where id in ('1','2'),还可以组合成关键字;ON 是连接时候的条件 join on 两个表的关系 ;wiht可单独使用,提供不同功能,例如 with chenk option等,还有一种常用的用法是 with as,
WITH 通常与AS连用,也叫做子查询部分。用法:
1). 可用来定义一个SQL片断,该片断会被整个SQL语句所用到。
2). 为了让SQL语句的可读性更高
3). 也有可能是在UNION ALL的不同部分,作为提供数据的部分。特别对于UNION ALL比较有
用。因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本
太高,所以可以使用WITH AS短语,则只要执行一遍即可。
例如:下面两种表达的是同一种意思:
①with alias as (select * from pra)
②select * from pra;

⑺ SQL:exists和in使用原来及区别;inner jon...ON的用法

请查阅SQL相关命令

⑻ sql server中的关键字in和on有什么区别

IN是在什么什么范围中。
如:Select * from Appuser where UserID In (101,102,103,104)
ON主要是用来做两个表的连接的。
如:
select distinct customers.customerid,customers.companyname
from customers join orders on
(customers.customerid=orders.customerid
)
where orders.shippeddate>2002-05-09

热点内容
解压升降机 发布:2024-05-19 20:51:11 浏览:967
请稍作停留密码是什么意思 发布:2024-05-19 20:37:12 浏览:244
linux结束符 发布:2024-05-19 20:33:05 浏览:817
招标服务器云 发布:2024-05-19 20:04:19 浏览:584
搭建小米云服务器 发布:2024-05-19 19:43:17 浏览:131
苹果手机备忘录怎么加密 发布:2024-05-19 18:57:57 浏览:16
光荣脚本 发布:2024-05-19 18:57:48 浏览:997
pythonjson字符串 发布:2024-05-19 18:51:43 浏览:253
什么是服务器厂商介绍 发布:2024-05-19 18:50:09 浏览:371
服务器网卡硬件型号怎么看 发布:2024-05-19 18:36:41 浏览:667