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

温馨提示:答案为网友推荐,仅供参考