首页数据库数据库in用法?数据库in的用法

数据库in用法?数据库in的用法

编程之家2023-10-20112次浏览

大家好,关于数据库in用法很多朋友都还不太明白,今天小编就来为大家分享关于数据库in的用法的知识,希望对各位有所帮助!

数据库in用法?数据库in的用法

数据库中in的用法

数据库中in的用法的用法你知道吗?下面我就跟你们详细介绍下数据库中in的用法的用法,希望对你们有用。

数据库中in的用法的用法如下:

IN:确定给定的值是否与子查询或列表中的值相匹配。

IN关键字使您得以选择与列表中的任意一个值匹配的行。

SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERECategoryID IN(1, 4, 5)

IN关键字之后的项目必须用逗号隔开,并且括在括号中。

数据库in用法?数据库in的用法

NOT IN:通过 NOT IN关键字引入的子查询也返回一列零值或更多值。

以下查询查找没有出版过商业书籍的出版商的名称。

SELECTpub_name FROM publishers WHERE pub_id NOT IN(SELECT pub_id FROM titles WHEREtype='business')

使用 EXISTS和 NOT EXISTS引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。

差集包含只属于两个集合中的第一个集合的元素。

EXISTS:指定一个子查询,检测行的存在。

数据库in用法?数据库in的用法

SELECT DISTINCT pub_name FROM publishers WHERE EXISTS(SELECT*FROM titles WHERE pub_id= publishers.pub_id AND type=

'business')

SELECTdistinct pub_name FROM publishers WHERE pub_id IN(SELECT pub_id FROM titlesWHERE type='business')

两者的区别:

EXISTS:后面可以是整句的查询语句如:SELECT*FROM titles

IN:后面只能是对单列:SELECTpub_id FROM titles

NOT EXISTS:

例如,要查找不出版商业书籍的出版商的名称:

SELECTpub_name FROM publishers WHERE NOT EXISTS(SELECT* FROM titles WHERE pub_id=publishers.pub_id AND type=

'business')

下面的查询查找已经不销售的书的名称:

SELECT titleFROM titles WHERE NOT EXISTS(SELECT title_id FROM sales WHERE title_id=titles.title_id)

例子:

//验证有发布产品的公司个数

select id,name from company where exists(select* from product where comid=company.id)

select id,name from company where id in(select comid from product)

//验证没有发布产品的公司个数

select id,name from company where not exists(select* from product where comid=company.id)

select id,name from company where id not in(select comid from product)

数据库中in、on、with的用法及示例。

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 a.xx= b.xx

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 ROOT.PID, ROOT.ID, ROOT.NameFROM 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)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。

数据库in的用法

数据库in的用法的用法你知道吗?下面我就跟你们详细介绍下数据库in的用法的用法,希望对你们有用。

数据库in的用法的用法如下:

MySQL IN语法

IN运算符用于 WHERE表达式中,以列表项的形式支持多个选择,语法如下:

WHERE column IN(value1,value2,...)

WHERE column NOT IN(value1,value2,...)

当 IN前面加上 NOT运算符时,表示与 IN相反的意思,即不在这些列表项内选择。

IN使用实例

选取 uid为 2、3、5的用户数据:

SELECT* FROM user WHERE uid IN(2,3,5)

返回查询结果如下:

uid

username

password

email

regdate

2小明 a193686a53e4de85ee3f2ff0576adf01 xiao@163.com 1278063917

3 Jack 0193686a35e4de85ee3f2ff0567adf490 jack@gmail.com 1278061380

5 5idev a193686a53e4de85ee3f2ff0576adf01 5idev@5idev.com 1291107029

IN子查询

更多情况下,IN列表项的值是不明确的,而可能是通过一个子查询得到的:

SELECT* FROM article WHERE uid IN(SELECT uid FROM user WHERE status=0)

在这个 SQL例子里,我们实现了查出所有状态为 0的用户(可能是被禁止)的所有文章。首先通过一个查询得到所有所有 status=0的用户:

SELECT uid FROM user WHERE status=0

然后将查询结果作为 IN的列表项以实现最终的查询结果,注意在子查询中返回的结果必须是一个字段列表项。

IN运算符补充说明

IN列表项不仅支持数字,也支持字符甚至时间日期类型等,并且可以将这些不同类型的数据项混合排列而无须跟 column的类型保持一致:

SELECT* FROM user WHERE uid IN(1,2,'3','c')

一个 IN只能对一个字段进行范围比对,如果要指定更多字段,可以使用 AND或 OR逻辑运算符:

SELECT* FROM user WHERE uid IN(1,2) OR username IN('admin','5idev')

使用 AND或 OR逻辑运算符后,IN还可以和其他如 LIKE、>=、=等运算符一起使用。

关于 IN运算符的效率问题

如果 IN的列表项是确定的,那么可以用多个 OR来代替:

SELECT* FROM user WHERE uid IN(2,3,5)

//等效为:

SELECT* FROM user WHERE(uid=2 OR aid=3 OR aid=5)

一般认为,如果是对索引字段进行操作,使用 OR效率高于 IN,但对于列表项不确定的时候(如需要子查询得到结果),就必须使用 IN运算符。另外,对于子查询表数据小于主查询的时候,也是适用 IN运算符的。

数据库中in、on、with的用法及示例

in

select*fromtabwherefieldin('A','B','C')

等价于select*fromtabwherefield='A'orfield='B'orfield='C'

on永在表连接的时候

select*fromainner/left/rightjoinbona.xx=b.xx

with用法:

创建一个表:

createtableregr(pidinteger,idinteger,namechar(20))

altertableregralteridsetnotnulladdprimarykey(id)

insertintoregrvalues(-1,1,'library'),(1,2,'news'),(2,3,'worldnews'),(2,4,'politics'),(2,5,'bussiness')

(2,6,'science'),(2,7,'technology'),(1,8,'sports'),(8,9,'local'),(8,10,'collegiate'),(8,11,'')

(9,12,'soer'),(10,13,'soer'),(11,14,'soer'),(9,15,'football'),(10,16,'football'),(11,17,'football'

使用with得到数据树

WITHRPL(PID,ID,name)AS

(SELECTROOT.PID,ROOT.ID,ROOT.NameFROMregrROOT

WHEREROOT.PID=8

UNIONALL

SELECTCHILD.PID,CHILD.ID,CHILD.Name

FROMRPLPARENT,regrCHILD

WHEREPARENT.ID=CHILD.PID)

SELECTDISTINCTPID,ID,Name

FROMRPL

ORDERBYPID,ID,Name

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

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

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

文章到此结束,如果本次分享的数据库in用法和数据库in的用法的问题解决了您的问题,那么我们由衷的感到高兴!

dota2游戏协调服务器 运行dota2时出现正在协调服务器怎么办oracle数据库迁移(怎么将oracle数据库的数据迁移(oracle数据库迁移怎么操作))