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

sql server中的关键字in和on有什么区别,第1张

IN是在什么什么范围中。

如:Select from Appuser where UserID In (101,102,103,104)

ON主要是用来做两个表的连接的。

如:

select distinct customerscustomerid,customerscompanyname

from customers join orders on

(customerscustomerid=orderscustomerid

)

where ordersshippeddate>2002-05-09

是ln不是in,是自然对数的意思,即底数为e的对数,e的来源是(1+1/n)的n次方,对n求极限。

它有很多奇妙的性质,如lnx的导数是它本身。

主要应用:1+lnx≤x,(x>0),在x=1时取等

其实lz在进高中之后就知道了,它是个很常见的东西,不过我很佩服楼主的探索精神,我在进高中之前是一点都没有去了解这些东西的

如果真的是in的话那就是英语吧,在。。。里面

in

select from tab where field in ('A', 'B', 'C')

等价于select from tab where field = 'A' or field = 'B' or field = 'C'

on永在表连接的时候

select from a inner/left/right join b on axx = bxx

with用法:

创建一个表:

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'

使用with得到数据

WITH RPL (PID, ID, name) AS      

(SELECT ROOTPID, ROOTID, ROOTNameFROM regr ROOT      

WHERE ROOTPID = 8

UNION ALL    

SELECT CHILDPID, CHILDID, CHILDName

FROM RPL PARENT, regr CHILD

WHERE PARENTID = CHILDPID)

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 嵌套查询中 IN是取数据集需要通过查询得到的,而当数据集中数据唯一时可以将 IN 换成‘=’。例中第一个必须为IN 第二个可以是IN也可以是= 。

例;SELECT 学号,姓名

FROM 学生

WHERE 学号 IN( SELECT 学号

FROM 选课

WHERE 课程号 =(SELECT课程号

FROM课程

WHERE 课程名=‘高等数学’));

1exist,not exist一般都是与子查询一起使用 In可以与子查询一起使用,也可以直接in (a,b)。

2exist会针对子查询的表使用索引 not exist会对主子查询都会使用索引 in与子查询一起使用的时候,只能针对主查询使用索引 not in则不会使用任何索引 注意,一直以来认为exists比in效率高的说法是不准确的。

in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。

你这样构造in的范围不对。你这样是把in后面处理成一个字符串了。而in后面跟的应该是一个范围。

你可以自己写一个返回数据集的函数来将aaddid值处理成in的范围, 类似于:

假设函数: ft01(nvarchar(1000)) returns table tb (val int)。

那么, 这样更新里面子查询的in条件:

where id in (select val from ft01(aaddid))。

另外, 此解决方法只是从in条件上来说。

如果子查询只有1条记录,in和=是没有区别,如果子查询有多条记录,用=会出错的,所以in是无论只查询有多少条记录都可以使用,而=只有当子查询只有1条记录的时候才能使用。

in和exists理解上其实是差不多,但对数据库而言,in的执行顺序是先执行只查询条件,然后把记录和外查询核对,找符合条件的。

而exists是先执行外查询,再执行子查询,找到外查询记录后和只查询对比符合条件的,如果外查询和子查询的条目数差异很大,那么效率相差很明显的。

以上就是关于sql server中的关键字in和on有什么区别全部的内容,包括:sql server中的关键字in和on有什么区别、数学中in表示什么、数据库中in、on、with的用法及示例。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9334320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存