亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2019年12月31日 10:16:56   作者:luyaran  
這篇文章主要介紹了mysql派生表(Derived Table)簡單用法,結合實例形式分析了mysql派生表的原理、簡單使用方法及操作注意事項,需要的朋友可以參考下

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

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

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

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

咱們先來看下面這條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字段為聯(lián)合查詢的節(jié)點,完事之后,以時間為條件,再以那個什么productCode字段為分組依據(jù),完事獲取分組字段和計算之后的別稱字段,再以sales字段為排序依據(jù),最后提取前五條結果。大概就是這么回事,完事結果集我們可以看做是一張臨時表或者別的什么。大家來看個結果集:

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

完事呢,既然是學習派生表,我們當然可以使用此查詢的結果作為派生表,并將其與products表相關聯(lián)。其中,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是神馬意思呢?它是把我們用#標記的部分當做一個表,來做一個簡單的聯(lián)合查詢而已。然而這個表,我們就叫它派生表,它會在使用過后即時清除的,所以我們在簡化復雜查詢的時候可以考慮使用。廢話不多說,我們來看下結果集:

+-----------------------------+--------+
| productName         | sales |
+-----------------------------+--------+
| 1992 Ferrari 360 Spider red | 103480 |
| 1952 Alpine Renault 1300  | 67985 |
| 2001 Ferrari Enzo      | 59852 |
| 1969 Ford Falcon      | 57403 |
| 1968 Ford Mustang      | 56462 |
+-----------------------------+--------+
5 rows in set

然后呢,咱們再來簡單總結下:

  • 首先,執(zhí)行子查詢來創(chuàng)建一個結果集或派生表。
  • 然后,在productCode列上使用products表連接top5_products_2018派生表的外部查詢。

完事呢,簡單的派生表的理解和使用就到這里了。咱們再來一個稍稍復雜的來嘗嘗味道哈,首先假設必須將2018年的客戶分為3組:鉑金,白金和白銀。 此外,需要了解每個組中的客戶數(shù)量,具體情況如下:

  • 訂單總額大于100000的為鉑金客戶;
  • 訂單總額為10000至100000的為黃金客戶
  • 訂單總額為小于10000的為銀牌客戶

要構建此查詢,首先,我們需要使用case表達式和group by子句將每個客戶放入相應的分組中,如下所示:

SELECT 
  customerNumber,
  ROUND(SUM(quantityOrdered * priceEach)) sales,
  (CASE
    WHEN SUM(quantityOrdered * priceEach) < 10000 THEN 'Silver'
    WHEN SUM(quantityOrdered * priceEach) BETWEEN 10000 AND 100000 THEN 'Gold'
    WHEN SUM(quantityOrdered * priceEach) > 100000 THEN 'Platinum'
  END) customerGroup
FROM
  orderdetails
    INNER JOIN
  orders USING (orderNumber)
WHERE
  YEAR(shippedDate) = 2018
GROUP BY customerNumber 
ORDER BY sales DESC;

咱們來看下結果集的實例:

+----------------+--------+---------------+
| customerNumber | sales | customerGroup |
+----------------+--------+---------------+
|      141 | 189840 | Platinum   |
|      124 | 167783 | Platinum   |
|      148 | 150123 | Platinum   |
|      151 | 117635 | Platinum   |
|      320 | 93565 | Gold     |
|      278 | 89876 | Gold     |
|      161 | 89419 | Gold     |
| ************此處省略了many數(shù)據(jù) *********|
|      219 | 4466  | Silver    |
|      323 | 2880  | Silver    |
|      381 | 2756  | Silver    |
+----------------+--------+---------------+

完事嘞,咱們就可以使用上面的查詢所得的表作為派生表來進行關聯(lián)查詢并且進行分組,獲取想要的數(shù)據(jù)了,咱們來看下面的sql感受一下:

SELECT 
  customerGroup, 
  COUNT(cg.customerGroup) AS groupCount
FROM
  (SELECT 
    customerNumber,
      ROUND(SUM(quantityOrdered * priceEach)) sales,
      (CASE
        WHEN SUM(quantityOrdered * priceEach) < 10000 THEN 'Silver'
        WHEN SUM(quantityOrdered * priceEach) BETWEEN 10000 AND 100000 THEN 'Gold'
        WHEN SUM(quantityOrdered * priceEach) > 100000 THEN 'Platinum'
      END) customerGroup
  FROM
    orderdetails
  INNER JOIN orders USING (orderNumber)
  WHERE
    YEAR(shippedDate) = 2018
  GROUP BY customerNumber) cg
GROUP BY cg.customerGroup;

具體是啥意思,相信聰明如大家肯定比我有更好的理解了,咱就不贅述了。完事來看下結果集:

+---------------+------------+
| customerGroup | groupCount |
+---------------+------------+
| Gold     |     61 |
| Platinum   |     4 |
| Silver    |     8 |
+---------------+------------+
3 rows in set

得嘞,咱就到這里了。

更多關于MySQL相關內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關技巧匯總

希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。

相關文章

  • 計算機二級考試MySQL知識點 mysql alter命令

    計算機二級考試MySQL知識點 mysql alter命令

    這篇文章主要為大家詳細介紹了計算機二級考試MySQL知識點,詳細介紹了mysql中alter命令的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • MySQL學習第三天 Windows 64位操作系統(tǒng)下驗證MySQL

    MySQL學習第三天 Windows 64位操作系統(tǒng)下驗證MySQL

    MySQL學習第三天教大家如何在Windows 64位操作系統(tǒng)下驗證MySQL,感興趣的小伙伴們可以參考一下
    2016-05-05
  • windows下mysql 8.0.13 解壓版安裝圖文教程

    windows下mysql 8.0.13 解壓版安裝圖文教程

    這篇文章主要為大家詳細介紹了windows下mysql 8.0.13 解壓版安裝圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 詳解MySQL主從不一致情形與解決方法

    詳解MySQL主從不一致情形與解決方法

    這篇文章主要介紹了詳解MySQL主從不一致情形與解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Centos6.4編譯安裝mysql 8.0.0 詳細教程

    Centos6.4編譯安裝mysql 8.0.0 詳細教程

    這篇文章主要為大家分享了Centos6.4編譯安裝mysql 8.0.0 詳細教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • MySQL導致索引失效的幾種情況

    MySQL導致索引失效的幾種情況

    本文主要介紹了MySQL導致索引失效的幾種情況,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • MySQL之存儲函數(shù)詳細介紹

    MySQL之存儲函數(shù)詳細介紹

    大家好,本篇文章主要講的是MySQL之存儲函數(shù)詳細介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 關于MySQL的體系結構及存儲引擎圖解

    關于MySQL的體系結構及存儲引擎圖解

    這篇文章主要介紹了關于MySQL的體系結構及存儲引擎圖解,MySQL整體的邏輯結構可以分為4層,客戶層、服務層、存儲引擎層、數(shù)據(jù)層,需要的朋友可以參考下
    2023-05-05
  • MySQL常見錯誤有哪些_MySQL常見錯誤的快速解決方法

    MySQL常見錯誤有哪些_MySQL常見錯誤的快速解決方法

    MySQL常見錯誤有哪些呢?下面小編就為大家?guī)硪黄狹ySQL常見錯誤的快速解決方法?,F(xiàn)在分享個大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-03-03
  • mysql如何利用binlog進行數(shù)據(jù)恢復詳解

    mysql如何利用binlog進行數(shù)據(jù)恢復詳解

    MySQL的binlog日志是MySQL日志中非常重要的一種日志,下面這篇文章主要給大家介紹了關于mysql如何利用binlog進行數(shù)據(jù)恢復的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-10-10

最新評論