DB2公共表表达式的用法_DB2_数据库_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 数据库 > DB2 > DB2公共表表达式的用法

DB2公共表表达式的用法

 2013/8/9 17:21:16    程序员俱乐部  我要评论(0)
  • 摘要:DB2公共表表达式属于临时表,下面就为您详细介绍DB2公共表表达式的使用方法,希望可以让您对DB2公共表表达式有更深的认识。DB2使用公共表表达式DB2公共表表达式是一个本地临时表,可以在一条SQL语句中引用多次。这个临时表只能存在于定义它的SQL语句的生命周期内。每次公共表表达式被引用时,其结果都是相同的。临时表是在SQL语句中用WITH子句定义的。下面是具体的语法:WITH<COMMONNAME1>AS(<SELECTEXPRESSION>),<
  • 标签:用法 表达式

DB2公共表表达式属于临时表,下面就为您详细介绍DB2公共表表达式的使用方法,希望可以让您对DB2公共表表达式有更深的认识。

DB2使用公共表表达式

DB2公共表表达式是一个本地临时表,可以在一条 SQL 语句中引用多次。这个临时表只能存在于定义它的 SQL 语句的生命周期内。每次公共表表达式被引用时,其结果都是相同的。临时表是在 SQL 语句中用 WITH 子句定义的。下面是具体的语法:

WITH <COMMON NAME1> AS ( <SELECT EXPRESSION>), <COMMON NAME2>

AS (<SELECT EXPRESSION), & SELECT <COLUMN> FROM <TABLE_NAME> <WHERE_CLAUSE>
 
<table_name> 是数据库中的一个表,也可以是由一个包括 WITH 子句的 SQL 语句定义的 <Common name>。 下面是一个例子

    class="dp-xml">
  1. WITH PROD_QUANTITY AS  
  2.  
  3. (SELECT PRODUCT_ID, SUM (QUANTITY) AS QUANTITY  
  4.  
  5.     FROM CUSTOMER_ORDER_ITEM  
  6.  
  7.     GROUP BY PRODUCT_ID),  
  8.  
  9.  
  10. TOTALS AS  
  11.  
  12. (SELECT -1 AS PRODUCT_ID, SUM(QUANTITY) AS TOTAL)  
  13.  
  14.  
  15. SELECT PRODUCT_ID, QUANTITY   
  16.  
  17. FROM PROD_QUANTITY  
  18.  
  19. UNION  
  20.  
  21. SELECT PRODUCT_ID, TOTALS  
  22.  
  23. FROM TOTALS  
  24.  
  25. ORDER BY 1 DESC  

在上述例子中,prod_quantity 被定义为一个公共表表达式。它与一个名为 totals 的公共表表达式一起使用。最终的 SELECT 语句将从两个公共表表达式中进行选择。

下面看另一个例子:

  1. WITH  
  2.  
  3. PAYLEVEL AS                                                   
  4.  
  5.     (SELECT EMPNO, EDLEVEL, YEAR(HIREDATE) AS HIREYEAR,             
  6.  
  7.         SALARY+BONUS+COMM AS TOTAL_PAY                                       
  8.  
  9.         FROM EMPLOYEE                                                           
  10.  
  11.         WHERE EDLEVEL > 16),                                                         
  12.  
  13.  
  14. PAYBYED (EDUC_LEVEL, YEAR_OF_HIRE, AVG_TOTAL_PAY) AS           
  15.  
  16.     (SELECT EDLEVEL, HIREYEAR, AVG(TOTAL_PAY)                    
  17.  
  18.          FROM PAYLEVEL                                              
  19.  
  20.          GROUP BY EDLEVEL, HIREYEAR)  
  21.  
  22.  
  23. SELECT EMPNO, EDLEVEL, YEAR_OF_HIRE, TOTAL_PAY, DECIMAL(AVG_TOTAL_PAY,7,2)  
  24.  
  25.     FROM PAYLEVEL, PAYBYED                                               
  26.  
  27.     WHERE EDLEVEL = EDUC_LEVEL                                          
  28.  
  29.         AND HIREYEARYEAR_OF_HIRE                                
  30.  
  31.         AND TOTAL_PAY < AVG_TOTAL_PAY       

这个公共表表达式包含了 PAYLEVEL。这个结果表包括员工编号、该员工被雇年份、该员工的总工资以及该员工的受教育程度。只需要包括受教育程度大于 16 的那些员工的记录。

该列表还包括一个名为 PAYBYED(“pay by education” 的缩写)的公共表表达式。它通过使用 PAYLEVEL 表来确定受教育程度、被雇年份和同年被雇的具有同等受教育程度的员工的平均工资。由这个表中得到的列的列名(例如 EDUC_LEVEL)与选择列表中使用的列名不同。

最后,我们得到能够产生所需结果的实际查询。该查询连接两个表(PAYLEVEL、PAYBYED),确定工资低于同年雇用的所有员工平均工资的员工。注意,PAYBYED 是基于 PAYLEVEL 的,所以在整个语句中,PAYLEVEL 实际上被访问了两次。在这两次中,计算查询时都用到了同一组行。

在定义一个公共表表达式之后,就可以像使用其他表一样 SQL 语句中使用它。可以任意次地使用公共表表达式。甚至可以在之前创建的公共表表达式的基础上,再创建一个公共表表达式。

发表评论
用户名: 匿名