當前位置 主頁 > 網站技術 > 代碼類 > 最大化 縮小

    mysql派生表(Derived Table)簡單用法實例解析

    欄目:代碼類 時間:2019-12-31 12:06

    本文實例講述了mysql派生表(Derived Table)簡單用法。分享給大家供大家參考,具體如下:

    關于這個派生表啊,我們首先得知道,派生表是從select語句返回的虛擬表。派生表類似于臨時表,但是在SELECT語句中使用派生表比臨時表簡單得多,因為它不需要創建臨時表的步驟。所以當SELECT語句的FROM子句中使用獨立子查詢時,我們將其稱為派生表。廢話不多說,我們來具體的解釋:

    SELECT 
      column_list
    FROM
    *  (SELECT 
    *    column_list
    *  FROM
    *    table_1) derived_table_name;
    WHERE derived_table_name.column > 1...
    
    

    其中標記星號的地方就使用了派生表。為了詳細點,咱們來看個具體的例子。咱們接下來要從數據庫中的orders表和orderdetails表中獲得2018年銷售收入最高的前5名產品。先來看下表的字段:

    咱們先來看下面這條sql:

    SELECT 
      productCode, 
      ROUND(SUM(quantityOrdered * priceEach)) sales
    FROM
      orderdetails
        INNER JOIN
      orders USING (orderNumber)
    WHERE
      YEAR(shippedDate) = 2018
    GROUP BY productCode
    ORDER BY sales DESC
    LIMIT 5;
    
    

    這條sql是以兩張表中共有的orderNumber字段為聯合查詢的節點,完事之后,以時間為條件,再以那個什么productCode字段為分組依據,完事獲取分組字段和計算之后的別稱字段,再以sales字段為排序依據,最后提取前五條結果。大概就是這么回事,完事結果集我們可以看做是一張臨時表或者別的什么。大家來看個結果集:

    +-------------+--------+
    | productCode | sales |
    +-------------+--------+
    | S18_3232  | 103480 |
    | S10_1949  | 67985 |
    | S12_1108  | 59852 |
    | S12_3891  | 57403 |
    | S12_1099  | 56462 |
    +-------------+--------+
    5 rows in set
    
    

    完事呢,既然是學習派生表,我們當然可以使用此查詢的結果作為派生表,并將其與products表相關聯。其中,products表的結構如下所示:

    mysql> desc products;
    +--------------------+---------------+------+-----+---------+-------+
    | Field       | Type     | Null | Key | Default | Extra |
    +--------------------+---------------+------+-----+---------+-------+
    | productCode    | varchar(15)  | NO  | PRI |     |    |
    | productName    | varchar(70)  | NO  |   | NULL  |    |
    | productLine    | varchar(50)  | NO  | MUL | NULL  |    |
    | productScale    | varchar(10)  | NO  |   | NULL  |    |
    | productVendor   | varchar(50)  | NO  |   | NULL  |    |
    | productDescription | text     | NO  |   | NULL  |    |
    | quantityInStock  | smallint(6)  | NO  |   | NULL  |    |
    | buyPrice      | decimal(10,2) | NO  |   | NULL  |    |
    | MSRP        | decimal(10,2) | NO  |   | NULL  |    |
    +--------------------+---------------+------+-----+---------+-------+
    20 rows in set
    
    

    表結構既然了解完事了,我們就來看下面的sql:

    SELECT 
      productName, sales
    FROM
    #  (SELECT 
    #    productCode, 
    #    ROUND(SUM(quantityOrdered * priceEach)) sales
    #  FROM
    #    orderdetails
    #  INNER JOIN orders USING (orderNumber)
    #  WHERE
    #    YEAR(shippedDate) = 2018
    #  GROUP BY productCode
    #  ORDER BY sales DESC
    #  LIMIT 5) top5_products_2018
    INNER JOIN
      products USING (productCode);
    
    

    上面#號部分是咱們之前的那條sql,方便大家理解,我使用#標記了出來,大家寫的時候可不能用啊。完事我們來看下這條sql是神馬意思呢?它是把我們用#標記的部分當做一個表,來做一個簡單的聯合查詢而已。然而這個表,我們就叫它派生表,它會在使用過后即時清除的,所以我們在簡化復雜查詢的時候可以考慮使用。廢話不多說,我們來看下結果集:

    下一篇:沒有了
青海十一选五开奖数据