我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL数据分析之子查询

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL数据分析之子查询

子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制,通常将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件,常见的子查询有WHERE子查询,HAVING子查询,FROM子查询,SELECT子查询,EXISTS子查询。

子查询是一种嵌套在其他 SQL 查询的 WHERE 子句中的查询,可以在 SELECT、INSERT、UPDATE 和 DELETE 语句中,同逻辑运算符一起使用。

示例工具:MySQL8.0、Navicat Premium 12

本文讲解内容:SQL子查询

适用范围:子查询在SQL数据分析中的应用

使用子查询必须遵循以下几个规则:

  • 子查询必须括在圆括号中。
  • 子查询的 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列相比较。
  • 子查询不能使用 ORDER BY,不过主查询可以。在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用。
  • 返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符。
  • SELECT 列表中不能包含任何对 BLOB、ARRAY、CLOB 或者 NCLOB 类型值的引用。
  • 子查询不能直接用在聚合函数中。
  • BETWEEN 操作符不能同子查询一起使用,但是 BETWEEN 操作符可以用在子查询中。

创建数据表

通常情况下子查询都与 SELECT 语句一起使用,其基本语法如下所示:

  1. SELECT column_name [, column_name ] 
  2. FROM   table1 [, table2 ] 
  3. WHERE  column_name OPERATOR (SELECT column_name [, column_name ] 
  4.                              FROM table1 [, table2 ] 
  5.                              [WHERE]) 

对于子查询的数据演示创建两个表,一个是薪水表,另一个是职位表,并且插入数据。

  1. #创建薪水表SALARY 
  2. CREATE TABLE SALARY ( 
  3. ID VARCHAR ( 10 ), 
  4. NAME VARCHAR ( 10 ), 
  5. AGE VARCHAR ( 10 ), 
  6. ADDRESS VARCHAR ( 10 ), 
  7. SAL INT(10) ); 

给薪水表插入数据,数据内容如下所示:

  1. # 给薪水表插入数据 
  2. INSERT INTO SALARY(ID,NAME,AGE,ADDRESS,SAL) 
  3. VALUES 
  4. ('C001','Rmesh',35,'Ahmedabad',2000), 
  5. ('C002','Khilan',25,'Delhi',1500), 
  6. ('C003','Kaushik',23,'Kota',2000), 
  7. ('C004','Chaitali',25,'Mumbai',6500), 
  8. ('C005','Hardik',27,'Bhopal',8500), 
  9. ('C006','Komal',22,'MP',4500), 
  10. ('C007','Tom',26,'MP',5500), 
  11. ('C008','Muffy',24,'Indore',10000); 

查询所有的薪水数据如下所示:

  1. SELECT * FROM  SALARY; 

同理创建一个职位表。

  1. #创建职位表JOB 
  2. CREATE TABLE JOB ( 
  3. JID VARCHAR ( 10 ), 
  4. JB VARCHAR ( 10 )); 

给职位表插入数据,数据内容如下所示:

  1. # 给职位表插入数据 
  2. INSERT INTO JOB(JID,JB) 
  3. VALUES 
  4. ('C001','Teacher'), 
  5. ('C002','Docter'), 
  6. ('C003','Teacher'), 
  7. ('C004','Worker'), 
  8. ('C005','Nurse'), 
  9. ('C006','Teacher'), 
  10. ('C007','Docter'), 
  11. ('C008','Teacher'); 

查询所有的职位数据如下所示:

  1. SELECT * FROM  JOB; 

子查询过滤

子查询最常见的使用是在WHERE子句的IN操作符中,以及用来填充计算列。先看一个简单的例子,要查询所有医生的薪水情况,这里首先在职位表中查询所有医生的JID,查询结果如下:

  1. SELECT JID 
  2. FROM JOB 
  3. WHERE JB='Docter'

然后在薪水表中查询ID为'C002','C007'的薪水情况,查询结果如下:

  1. SELECT SAL 
  2. FROM SALARY 
  3. WHERE ID IN('C002','C007'); 

这里使用子查询更加简便,子查询从内向外依次处理,在下面的SELECT语句中,MySQL实际上执行了两个操作,首先查询返回两个ID号:C002和C007。

然后,这两个值以IN操作符要求的逗号分隔的格式传递给外部查询的WHERE子句,可以看到输出的结果是正确的,并且与前面WHERE子句所返回的值相同。

  1. SELECT SAL 
  2. FROM SALARY 
  3. WHERE ID IN(SELECT JID 
  4.             FROM JOB 
  5.             WHERE JB='Docter'); 

使用子查询查询薪水大于8000的员工的所有信息,首先内部查询薪水大于8000的ID,然后外部使用一个WHERE查询即可得到结果。

  1. SELECT * 
  2. FROM SALARY 
  3. WHERE ID IN (SELECT ID 
  4.              FROM SALARY 
  5.              WHERE SAL > 8000); 

作为计算字段使用子查询

使用子查询的另一方法是创建计算字段,创建计算字段需要使用聚合函数,例如count,sum,avg,max,min等,这里首先计算平均薪水作为一个内查询,然后在外部使用WHERE子句进行查询,得出薪资比平均薪资低的员工的所有信息。

  1. SELECT * 
  2. FROM SALARY 
  3. WHERE SAL < (SELECT AVG(SAL)  
  4.              FROM SALARY); 

除使用WHERE过滤,还可以使用HAVING过滤,HAVING子句对分组统计函数进行过滤,也可以在HAVING子句中使用子查询,要查询薪资最高的人及其薪资情况,首先内部查询最高工资,然后外部以人名分组后使用HAVING子句过滤,查询结果如下。

  1. SELECT NAME,SAL 
  2. FROM SALARY 
  3. GROUP BY NAME 
  4. HAVING SAL = (SELECT MAX(SAL)  
  5.               FROM SALARY); 

本文转载自微信公众号「大话数据分析」,作者「尚天强」。可以通过以下二维码关注。转载本文请联系大话数据分析公众号。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL数据分析之子查询

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL数据分析之子查询

子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制,通常将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件,常见的子查询有WHERE子查询,HAVING子查询,FROM子查询,SELECT子查询,EXIST

SQL Server数据库连接查询和子查询实战案例

子查询(嵌套查询)子查询也称嵌套查询,是指一个SELECT查询语句可以嵌入另一个SELECT查询语句之中,下面这篇文章主要给大家介绍了关于SQL Server数据库连接查询和子查询的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
2023-05-16

数据分析之Pandas VS SQL!

编辑:zone来源:数据管道作者:艾德宝器AbstractPandas是一个开源的Python数据分析库,结合 NumPy 和 Matplotlib 类库,可以在内存中进行高性能的数据清洗、转换、分析及可视化工作。对于数据开发工程师或分析师
2023-06-02

如何分析MySQL子句及子查询

今天就跟大家聊聊有关如何分析MySQL子句及子查询,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. mysql_where子句_聚合函数# ### part 单表查询""" sel
2023-06-28

SQL数据查询之DQL语言介绍

目录1.DQL类型的SQL语句基本概述2.准备一张可以练习查询的数据表3.DQL语句之简单的基础查询3.1.查询表中指定的多个字段的数据3.2.查询表中所有字段的数据3.3.查询表中数据时为字段设置别名3.4.查询表中所在地字段的数据并且去
2022-08-17

Sentry 监控之Discover 大数据查询分析引擎

Discover 通过构建和丰富您的错误数据,提供跨环境数据的可见性。您可以查询和解锁对整个系统健康状况的洞察,并在一个地方获得关键业务问题的答案。

SQL查询之字段是逗号分隔开的数组怎么查询匹配数据

这篇文章主要介绍“SQL查询之字段是逗号分隔开的数组怎么查询匹配数据”,在日常操作中,相信很多人在SQL查询之字段是逗号分隔开的数组怎么查询匹配数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL查询之字
2023-03-09

SQL 查询详解:连接查询、子查询和聚合函数

本文详细介绍了 SQL 中的连接查询、子查询以及聚合函数的使用方法和应用场景。
SQL数据库2024-11-29

如何在SQL Server数据库中实现子查询

本篇文章给大家分享的是有关如何在SQL Server数据库中实现子查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1 子查询子查询是一个嵌套在select、insert、up
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录