数据库中in、on、with的用法及示例
2023-04-26 · 百度认证:重庆猪八戒网络有限公司官方账号
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)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。