码迷,mamicode.com
首页 > 数据库 > 详细

db2构建临时结果集

时间:2018-01-08 12:13:29      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:tar   数据   两种   pre   入职   博士   word   数据类型   论坛   

values  (‘1‘,2,3)   为一行   ‘1’   2    3   行数据类型可以不同  values  (‘1‘,2,3),(‘f‘,5,6) 为两行

(values  1,2,3)   为一列 

1

2

3

所以数据类型必须一样,不然报错

二  with做临时表,with还可以递归查询

二.1 with可以和select语句组合做临时表

CREATE TABLE USER  
(  
NAME VARCHAR(20) NOT NULL,--姓名  
DEGREE INTEGER NOT NULL,--学历(1、专科 2、本科 3、硕士 4、博士)  
STARTWORKDATE date NOT NULL,--入职时间  
SALARY1 FLOAT NOT NULL,--基本工资  
SALARY2 FLOAT NOT NULL--奖金  
); 

假设现在让你查询一下那些 1、学历是硕士或博士  2、学历相同,入职年份也相同,但是工资(基本工资+奖金)却比相同条件员工的平均工资低的员工。(哈哈,可能是要涨工资),不知道你听明白问题没有?该怎么查询呢?

对比两种方式:

a

WITH TEMP1(NAME,DEGREE,WORDDATE,SALARY) AS   
(  
SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALARY FROM USER WHERE DEGREE IN (3,4)  
),  
TEMP2 (DEGREE,WORDDATE,AVG_SALARY) AS  
(  
SELECT DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, AVG(SALARY1+SALARY2) AS AVG_SALARY   
FROM USER WHERE DEGREE IN (3,4)  
GROUP BY DEGREE,YEAR(STARTWORKDATE)  
)  
SELECT NAME FROM TEMP1, TEMP2 WHERE   
TEMP1.DEGREE=TEMP2.DEGREE   
AND TEMP1.WORDDATE=TEMP2.WORDDATE   
AND SALARY<AVG_SALARY;  

b

WITH TEMP1(NAME,DEGREE,WORDDATE,SALARY) AS   
(  
SELECT NAME,DEGREE,YEAR(STARTWORKDATE) AS WORDDATE, SALARY1+SALARY2 AS SALARY FROM USER WHERE DEGREE IN (3,4)  
),  
TEMP2 (DEGREE,WORDDATE,AVG_SALARY) AS  
(  
SELECT DEGREE,WORDDATE, AVG(SALARY) AS AVG_SALARY   
FROM TEMP1  
GROUP BY DEGREE,WORDDATE  
)  
SELECT NAME FROM TEMP1, TEMP2 WHERE   
TEMP1.DEGREE=TEMP2.DEGREE   
AND TEMP1.WORDDATE=TEMP2.WORDDATE   
AND SALARY<AVG_SALARY;  

递归用法:

论坛首页  
--数据库开发  
----DB2  
------DB2 文章1  
--------DB2 文章1 的评论1  
--------DB2 文章1 的评论2  
------DB2 文章2  
----Oracle  
--Java技术  
CREATE TABLE BBS  
(  
PARENTID INTEGER NOT NULL,  
ID INTEGER NOT NULL,  
NAME VARCHAR(200) NOT NULL---板块、文章、评论等。  
);  
insert into bbs (PARENTID,ID,NAME) values   
(0,0,论坛首页),  
(0,1,数据库开发),  
(1,11,DB2),  
(11,111,DB2 文章1),  
(111,1111,DB2 文章1 的评论1),  
(111,1112,DB2 文章1 的评论2),  
(11,112,DB2 文章2),  
(1,12,Oracle),  
(0,2,Java技术); 

查询一下DB2的所有文章及评论,怎么办?

WITH TEMP(PARENTID,ID,NAME) AS  
(  
SELECT PARENTID,ID,NAME FROM BBS WHERE NAME=DB2---语句1  
UNION ALL---语句2  
SELECT B.PARENTID,B.ID,B.NAME FROM BBS AS B, TEMP AS T WHERE B.PARENTID=T.ID---语句3  
)  
SELECT NAME FROM TEMP;---语句4  

 

db2构建临时结果集

标签:tar   数据   两种   pre   入职   博士   word   数据类型   论坛   

原文地址:https://www.cnblogs.com/revo/p/8241791.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!