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

数据库中in、on、with的用法及示例,第1张

in

selectfromtabwherefieldin('A','B','C')

等价于selectfromtabwherefield='A'orfield='B'orfield='C'

on永在表连接的时候

selectfromainner/left/rightjoinbonaxx=bxx

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

(SELECTROOTPID,ROOTID,ROOTNameFROMregrROOT

WHEREROOTPID=8

UNIONALL

SELECTCHILDPID,CHILDID,CHILDName

FROMRPLPARENT,regrCHILD

WHEREPARENTID=CHILDPID)

SELECTDISTINCTPID,ID,Name

FROMRPL

ORDERBYPID,ID,Name

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

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

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

String hql="FROM A WHERE AID IN (:alist)";
Query query = getSession()createQuery(hql);
querysetParameterList("alist", a);
加括号


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

原文地址: http://outofmemory.cn/yw/13401123.html

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

发表评论

登录后才能评论

评论列表(0条)

保存