返回顶部
首页 > 资讯 > 数据库 >如何在mysql中使用派生表
  • 734
分享到

如何在mysql中使用派生表

2024-04-02 19:04:59 734人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关如何在Mysql中使用派生表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。派生表是从select语句返回的虚拟表。派生

这篇文章将为大家详细讲解有关如何在Mysql中使用派生表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

派生表是从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名产品。先来看下表的字段:

如何在mysql中使用派生表

咱们先来看下面这条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是神马意思呢?它是把我们用#标记的部分当做一个表,来做一个简单的联合查询而已。然而这个表,我们就叫它派生表,它会在使用过后即时清除的,所以我们在简化复杂查询的时候可以考虑使用。废话不多说,我们来看下结果集:

+-----------------------------+--------+
| 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

然后呢,咱们再来简单总结下:

  • 首先,执行子查询来创建一个结果集或派生表。

  • 然后,在productCode列上使用products表连接top5_products_2018派生表的外部查询。

完事呢,简单的派生表的理解和使用就到这里了。咱们再来一个稍稍复杂的来尝尝味道哈,首先假设必须将2018年的客户分为3组:铂金,白金和白银。 此外,需要了解每个组中的客户数量,具体情况如下:

  • 订单总额大于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数据 *********|
|      219 | 4466  | Silver    |
|      323 | 2880  | Silver    |
|      381 | 2756  | Silver    |
+----------------+--------+---------------+

完事嘞,咱们就可以使用上面的查询所得的表作为派生表来进行关联查询并且进行分组,获取想要的数据了,咱们来看下面的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中使用派生表就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 如何在mysql中使用派生表

本文链接: https://lsjlt.com/news/55773.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何在mysql中使用派生表
    这篇文章将为大家详细讲解有关如何在mysql中使用派生表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。派生表是从select语句返回的虚拟表。派生...
    99+
    2024-04-02
  • CSS中如何使用派生选择器
    本篇文章为大家展示了CSS中如何使用派生选择器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。CSS派生选择器通过依据元素在其位置的上下文关系来定义样式,你可以使标记...
    99+
    2024-04-02
  • CSS中如何合理地使用派生选择器
    这篇文章主要介绍“CSS中如何合理地使用派生选择器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“CSS中如何合理地使用派生选择器”文章能帮助大家解决问题。 经过依...
    99+
    2024-04-02
  • 如何在Django中使用Pyecharts生成图表
    如何在Django中使用Pyecharts生成图表?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1 因为pyecharts是支持python的一种可视化,但是想要将其放入网页中...
    99+
    2023-06-15
  • 如何在MySQL中使用临时表
    这期内容当中小编将会给大家带来有关如何在MySQL中使用临时表,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。创建临时表很容易,给正常的CREATE TABLE语句加上TE...
    99+
    2024-04-02
  • CSS派生选择器如何用
    本篇内容主要讲解“CSS派生选择器如何用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS派生选择器如何用”吧! 通过依据元素在其位置的上下文关系来定义样式...
    99+
    2024-04-02
  • 树莓派中如何使用Nestcloud
    小编给大家分享一下树莓派中如何使用Nestcloud,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!必要的准备工作想要方便的使用 Nextcloud,需要一些必要的准备工作。首先,你需要一个...
    99+
    2024-04-02
  • 如何在表达式中使用Mysql SELECT CASE
    在MySQL中,可以使用SELECT CASE语句来根据不同的条件选择不同的值或执行不同的操作。下面是一个示例,展示了如何在...
    99+
    2023-09-26
    Mysql
  • 如何在MySQL中使用正则表达式
    在MySQL中,可以使用正则表达式来对字符串进行匹配和筛选。以下是使用正则表达式的一些常见语法: 使用REGEXP关键字进行匹配:...
    99+
    2024-04-09
    MySQL
  • 如何在Mysql中使用Regexp正则表达式
    本篇文章给大家分享的是有关如何在Mysql中使用Regexp正则表达式,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Mysql中Regexp常...
    99+
    2024-04-02
  • 如何使用 PHP 在 MySQL 表中创建索引?
    要使用 mysql 创建索引,可以使用 create index 语句。语法:create index index_name on table_name (column_name);建立...
    99+
    2024-05-12
    mysql 创建索引
  • 我们如何使用 CREATE TABLE 语句在 MySQL 表中存储多个生成列?
    很可能在 MySQL 表中添加多个存储的生成列。可以用以下示例来说明:示例mysql> Create table profit1(cost int, price int, profit int AS (price-cost) STOR...
    99+
    2023-10-22
  • 如何使用 CREATE TABLE 语句在 MySQL 表中拥有多个虚拟生成列?
    很可能在 MySQL 表中添加多个虚拟生成列。可以用以下示例来说明:示例mysql> Create table profit(cost int, price int, profit int AS (price-cost), price...
    99+
    2023-10-22
  • 如何使用SQL语句在MySQL中进行数据分析和报表生成?
    如何使用SQL语句在MySQL中进行数据分析和报表生成?数据分析和报表生成是对数据进行深度挖掘和可视化展示的过程,而SQL语言作为一种用于管理和操纵关系型数据库的语言,被广泛应用于数据分析和报表生成。在MySQL中使用SQL语句进行数据分析...
    99+
    2023-12-17
    数据分析 MySQL SQL语句
  • MySQL中的枚举值如何在表达式中使用?
    众所周知,枚举值与索引值相关联,因此如果我们在表达式中使用枚举值,那么所有计算都将在索引号上完成。下面的例子将阐明它 -mysql> Select * from Result; +-----+--------+-------...
    99+
    2023-10-22
  • 如何在PHP中使用生成器
    这期内容当中小编将会给大家带来有关如何在PHP中使用生成器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampSer...
    99+
    2023-06-14
  • MySQL中临时表如何使用
    今天就跟大家聊聊有关MySQL中临时表如何使用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL如何使用临时表 【临时表存储】MyS...
    99+
    2024-04-02
  • C++ 函数继承详解:如何在继承中使用“基类指针”和“派生类指针”?
    在函数继承中,使用“基类指针”和“派生类指针”来理解继承机制:基类指针指向派生类对象时,执行向上转型,只访问基类成员。派生类指针指向基类对象时,执行向下转型(不安全),必须谨慎使用。 ...
    99+
    2024-05-01
    c++ 继承 编译错误
  • 如何在MySQL中使用JOIN来连接多个表格
    在MySQL中,您可以使用JOIN语句来连接多个表格。以下是一个简单的例子: 假设我们有两个表格,一个是用户表(users),另一个...
    99+
    2024-03-06
    MySQL
  • mysql中的临时表如何使用
    目录1.什么是临时表2.临时表的使用场景uniongroupby3.groupby 如何优化总结1.什么是临时表 内部临时表是sql语句执行过程中,用来存储中间结果的的数据表,其作用类似于:join语句执行过程...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作