熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL Server >> 正文

SQL入門:表表達式

2013-11-15 14:38:38  來源: SQL Server 

  表表達式
  如果只需要單個查詢的視圖定義可使用表表達式
  
  表表達式是臨時的只在 SQL 語句的使用期限內有效表表達式不能共享但它們比視圖更靈活任何授權的用戶都可共享視圖定義
  
  本節描述如何在查詢中使用公共表表達式和嵌套表表達式
  
  公共表表達式
  
  公共表表達式是在全查詢的開頭使用 WITH 關鍵字定義的命名結果表公共表表達式是您創建以在復雜查詢之中使用的表表達式在查詢的開頭使用 WITH 子句定義並命名公共表表達式對公共表表達式的重復引用使用同一個結果集相比之下如果使用嵌套表表達式或視圖則每次都將重新生成結果集其結果可能各不相同
  
  下列示例列出公司中教育級別大於 平均工資比那些同時雇用的且有同樣教育級別的人低的所有人在該查詢後面會更詳細地描述查詢的各個部分
  
  ()
  
   WITH
      PAYLEVEL AS
       (SELECT EMPNO YEAR(HIREDATE) AS HIREYEAR EDLEVEL
           SALARY+BONUS+COMM AS TOTAL_PAY
         FROM EMPLOYEE
         WHERE EDLEVEL > )
  
  ()
      PAYBYED (EDUC_LEVEL YEAR_OF_HIRE AVG_TOTAL_PAY) AS
       (SELECT EDLEVEL HIREYEAR AVG(TOTAL_PAY)
         FROM PAYLEVEL
         GROUP BY EDLEVEL HIREYEAR)
  
  ()
  
   SELECT EMPNO EDLEVEL YEAR_OF_HIRE TOTAL_PAY DECIMAL(AVG_TOTAL_PAY)
    FROM PAYLEVEL PAYBYED
    WHERE EDLEVEL=EDUC_LEVEL
     AND HIREYEAR = YEAR_OF_HIRE
     AND TOTAL_PAY < AVG_TOTAL_PAY            
  
  
  ()這是名為 PAYLEVEL 的公共表表達式此結果表包括雇用某個人的年份該雇員的總收入以及他(或她)的教育級別只包括雇員的教育級別大於 的那些行
  
  ()這是名為 PAYBYED(或 PAY by education)的公共表表達式該表達式使用在前一個公共表表達式中創建的 PAYLEVEL 表來確定每個教育級別同一年雇用的雇員的教育級別雇用年份以及平均收入此表返回的列被賦予的名稱與選擇列表中所使用的列名不同(如 EDUC_LEVEL)這會生成命名為 PAYBYED 的結果集與嵌套表表達式示例中產生的結果相同
  
  ()最後我們獲得能產生期望結果的實際查詢連接這兩個表(PAYLEVELPAYBYED)以確定總收入比同年雇用的人的平均收入低的那些人注意PAYBYED 是以 PAYLEVEL 為基礎所以在完整語句中有效地存取了 PAYLEVEL 兩次兩次都使用同一組行來計算查詢
  最終結果如下
  
   
  
  嵌套表表達式
  嵌套表表達式是一個臨時視圖其中的定義被嵌套(直接定義)在主查詢的 FROM子 句中
  
  下列查詢使用嵌套表表達式來尋找那些教育級別超過 的雇員的平均總收入教育級別以及雇用年份
  
  
   SELECT EDLEVEL HIREYEAR DECIMAL(AVG(TOTAL_PAY) )
    FROM (SELECT YEAR(HIREDATE) AS HIREYEAR EDLEVEL
           SALARY+BONUS+COMM AS TOTAL_PAY
         FROM EMPLOYEE
         WHERE EDLEVEL > ) AS PAY_LEVEL
    GROUP BY EDLEVEL HIREYEAR
    ORDER BY EDLEVEL HIREYEAR
  
  
  結果如下
  
  educitycn/img_///jpg >
From:http://tw.wingwit.com/Article/program/SQLServer/201311/22104.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.