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

 我来答
crj_0
2018-03-18 · TA获得超过9174个赞
知道小有建树答主
回答量:55
采纳率:100%
帮助的人:1.6万
展开全部
  1. in

    select * from tab where field in ('A', 'B', 'C')

    等价于select * from tab where field = 'A' or field = 'B' or field = 'C'

  2. on永在表连接的时候

    select * from a inner/left/right join b on a.xx = b.xx

  3. 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

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

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

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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式