首页 > 数据库 >MySQL入门学习-聚合和分组.子查询.相关子查询

MySQL入门学习-聚合和分组.子查询.相关子查询

时间:2024-06-14 18:58:51浏览次数:27  
标签:category 示例 查询 相关 分组 MySQL products id

        在 MySQL 中,子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以分为相关子查询和非相关子查询两种类型。

        相关子查询是指子查询的执行结果依赖于外部查询中的值。在执行相关子查询时,MySQL 会先执行外部查询,然后根据外部查询的结果来执行子查询。

一、相关子查询的特点是:

- 子查询的执行结果依赖于外部查询中的值。

- 子查询的执行顺序是先执行外部查询,然后根据外部查询的结果来执行子查询。

- 相关子查询的执行效率较低,因为它需要多次执行子查询。

二、相关子查询的使用方法是:

- 在子查询中使用外部查询中的值。

- 在子查询中使用外部查询中的表。

- 在子查询中使用外部查询中的列。

三、相关子查询的高级应用包括:

- 利用相关子查询实现多表关联。

- 利用相关子查询实现动态查询。

- 利用相关子查询实现数据过滤。

四、以下是生成的 MySQL 相关子查询的示例代码:

-- 创建表

CREATE TABLE products (

    id INT PRIMARY KEY AUTO_INCREMENT,

    name VARCHAR(50),

    category_id INT,

    price DECIMAL(10, 2)

);



-- 插入数据

INSERT INTO products (name, category_id, price)

VALUES ('Product 1', 1, 10.00),

       ('Product 2', 1, 20.00),

       ('Product 3', 2, 30.00),

       ('Product 4', 2, 40.00),

       ('Product 5', 3, 50.00);



-- 示例 1:使用子查询计算每个分类的平均价格

SELECT category_id, AVG(price) AS average_price

FROM products

GROUP BY category_id;



-- 示例 2:使用相关子查询查找每个分类中价格高于平均价格的产品

SELECT *

FROM products p1

WHERE price > (

    SELECT AVG(price)

    FROM products p2

    WHERE p1.category_id = p2.category_id

);



-- 示例 3:使用子查询计算每个分类的产品数量

SELECT category_id, (

    SELECT COUNT(*)

    FROM products p2

    WHERE p1.category_id = p2.category_id

) AS product_count

FROM products p1

GROUP BY category_id;

        在上述示例中,我们创建了一个名为 'products' 的表,并插入了一些示例数据。然后,我们使用子查询和相关子查询来执行各种聚合和分组操作。

        示例 1 中,我们使用子查询计算每个分类的平均价格,并将结果与产品表进行连接,以获取每个分类的产品信息。

        示例 2 中,我们使用相关子查询查找每个分类中价格高于平均价格的产品。相关子查询是指子查询中引用了外部查询中的表或列,因此子查询的执行结果会受到外部查询的影响。在这个例子中,我们使用相关子查询来计算每个分类的平均价格,并将结果与产品表进行比较,以获取价格高于平均价格的产品信息。

        示例 3 中,我们使用子查询计算每个分类的产品数量,并将结果与产品表进行连接,以获取每个分类的产品信息。

(文章为作者在学习MySQL过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)

标签:category,示例,查询,相关,分组,MySQL,products,id
From: https://blog.csdn.net/weixin_69763181/article/details/139619907

相关文章

  • MySQL 游标遍历每一行数据做处理。
     delimiter$$--分隔标记CREATEPROCEDUREprocess_test()begin--声明变量declareSuoshuQY_pvarchar(255);declaredoneint;declarecurcursorforSELECTSuoshuQYasSuoshuQY_pFROMdiy_cabinet_listWHEREIsDeleted=0;declareco......
  • Java最全知识脑图 涵盖 juc mysql git mybatis 等 面试必备
    Java初中级知识脑图面试超实用1.Git下载链接导图下载地址:https://mm.edrawsoft.cn/mobile-share/index.html?uuid=31d00742157057-src&share_type=12.JUC下载链接https://mm.edrawsoft.cn/mobile-share/index.html?uuid=6c0be457444921-src&share_type=13.JVM下载链......
  • mybatisplus一个入参查询两个字段用或
    1List<TechnologyParamPackageMaterialVo>materialVoList=newArrayList<>();23LambdaQueryWrapper<TechnologyParamPackage>wrapper=newLambdaQueryWrapper<>();4wrapper.eq(ObjUtil.isNotEmpty(queryReq.getStatus()),TechnologyPara......
  • 毕业设计课题:快餐店点餐结算系统,基于java+SSM+mysql
     一、前言介绍        快餐店点餐结算系统可以对快餐店点餐结算系统信息进行集中管理,可以真正避免传统管理的缺陷。快餐店点餐结算系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处......
  • Navicat for MySQL 11软件下载及安装教程
    NavicatforMySQL是一款强大的MySQL数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具,但对于新用户仍然易于学习。NavicatforMySQL基于Windows平台,为MySQL量身订作,提供类似于MySQL的用管理界面工具,此解决方案的出现,将解放PHP、J2EE等程序员以及......
  • 运维shell脚本之测试mysql密码正确与否
    shell脚本实战:测试mysql密码正确与否在迁移过程中,常有批量迁移数据库的情况,因此在割接前,需要批量测试一次割接后的数据库信息是否配置正常,故写了一个shell脚本用于测试数据库密码是否正确有误,具体步骤如下:测试前,需要测试当前服务器是否已安装mysql,可通过命令进行测试:mysq......
  • MySql 表数据的增、删、改、查
    数据表的增、删、改、查前言在学习MySql一定少不了对数据表的增、删、改、查,下面将详细讲解如何操作数据表。前面已经建好了表customer列表如下:插入数据插入数据可以使用INSERT语句,语法格式如下:INSERTINTO表名(列名1,列名2,列名3,...)VALUES(值1,值2,值3,......
  • mysql 双主(互为主从)
    ​先要确保两个数据库的数据一致1、master1上操作,修改my.cnf配置文件[mysqld]#必须唯一server_id=1#开启binlog日志log-bin=mysql-binrelay-log=relay-bin#要进行主从的数据库binlog-do-db=coin#指定自增id值从几开始auto_increment_offset=1#指定自增值的步长a......
  • mysql高级查询技巧
    常见表表达式(CommonTableExpressions,简称CTEs)描述:CTEs是SQL中的一种高级查询功能,它允许用户定义一个临时的结果集,这个结果集在执行后续的SQL语句时可以被引用,就像一个临时表一样。CTEs使得复杂的查询逻辑更加模块化和易于理解。声明和语法:WITHCTE_NameAS(SELECTc......
  • Oracle 是否扼杀了开源 MySQL
    Oracle是否无意中扼杀了开源MySQLPeterZaitsev是一位俄罗斯软件工程师和企业家,曾在MySQL公司担任性能工程师。大约15年前,当甲骨文收购Sun公司并随后收购MySQL时,有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护,反驳了这些不友好的说法。然而,如今Zaitsev......