数据库 in(数据库in的用法)
大家好,今天来为大家分享数据库 in的一些知识点,和数据库in的用法的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
数据库中in的用法
数据库中in的用法的用法你知道吗?下面我就跟你们详细介绍下数据库中in的用法的用法,希望对你们有用。
数据库中in的用法的用法如下:
IN:确定给定的值是否与子查询或列表中的值相匹配。
IN关键字使您得以选择与列表中的任意一个值匹配的行。
SELECT ProductID, ProductName FROM Northwind.dbo.Products WHERECategoryID IN(1, 4, 5)
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:指定一个子查询,检测行的存在。
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的用法
数据库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
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运算符的。
InSql是什么类型的数据库
InSQL是世界上第一种面向工厂的高性能的实时关系型数据库。它将关系型数据库的功能、灵活性与实时数据库的高速、压缩集成于同一产品以适用于工厂生产层管理。InSQL集成了微软公司的MS SQL Server并对其进行了的扩展,使其不仅具有高速的数据采集速度,高效数据压缩和数据存储等实时数据库性能,而且可以集成事件、概要、生产和配置等一般存于关系型数据库中的工厂数据。数百个客户端应用可访问到全部的工厂信息,使其在工业软件领域具有了最好的开放性和灵活性。由于WW有世界上最好的图控软件InTouch及I/O Server,使它与工厂自动化系统有着更紧密的联系。
数据库中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)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!