首页 > 数据库 >SQL数据分析,子查询

SQL数据分析,子查询

时间:2022-10-14 16:06:28浏览次数:52  
标签:数据分析 薪水 SQL 查询 SELECTFROMWHERE 子句 WHERE SELECT



子查询用于为主查询返回其所需数据,或者对检索数据进行进一步的限制,通常将一个查询(子查询)的结果作为另一个查询(主查询)的数据来源或判断条件,常见的子查询有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 操作符可以用在子查询中。

SQL数据分析,子查询_数据

创建数据表

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


SELECTFROMWHERE  column_name OPERATOR (SELECTFROMWHERE])

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


#创建薪水表SALARYCREATE TABLEID VARCHAR ( 10NAME VARCHAR ( 10AGE VARCHAR ( 10ADDRESS VARCHAR ( 10SAL INT(10) );

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


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

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


SELECT * FROM

SQL数据分析,子查询_子查询_02

同理创建一个职位表。


#创建职位表JOBCREATE TABLEJID VARCHAR ( 10JB VARCHAR ( 10

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


# 给职位表插入数据INSERT INTOVALUES('C001','Teacher'),('C002','Docter'),('C003','Teacher'),('C004','Worker'),('C005','Nurse'),('C006','Teacher'),('C007','Docter'),('C008','Teacher');

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


SELECT * FROM

SQL数据分析,子查询_数据_03

子查询过滤

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


SELECTFROMWHERE JB='Docter';

SQL数据分析,子查询_sql_04

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




SELECTFROMWHERE ID IN('C002','C007');

SQL数据分析,子查询_子查询_05

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

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



SELECTFROMWHERE ID IN(SELECTFROMWHERE JB='Docter');

SQL数据分析,子查询_子查询_06

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


SELECTFROMWHERE ID IN (SELECT IDFROMWHERE SAL > 8000);

SQL数据分析,子查询_sql_07

作为计算字段使用子查询

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


SELECTFROMWHERE SAL < (SELECT AVG(SAL) FROM

SQL数据分析,子查询_sql_08

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



SELECT NAME,SALFROMGROUP BY NAMEHAVING SAL = (SELECT MAX(SAL) FROM

SQL数据分析,子查询_sql_09


标签:数据分析,薪水,SQL,查询,SELECTFROMWHERE,子句,WHERE,SELECT
From: https://blog.51cto.com/u_15828536/5757090

相关文章

  • SQL数据分析,分组与透视
    数据分组是对相同类别的数据进行汇总,而数据透视表是通过对行或列的不同组合对数据进行汇总,所使用的汇总方法有求和、计数、平均值、标准差等,本文使用SQL对数据进行数据分组......
  • SQL数据分析,数据提取与筛选
    一张表中通常会包含很多字段,造成数据冗余,在做数据分析时,我们仅需要提取数据分析所需要的字段,这里就需要用到数据选取的知识点,同时还可以依据特定条件筛选。本文介绍数据提取......
  • 记一次Mysql的修复
    现象:生产环境的MySql无故停止,版本是5.7,启动后马上就又停止,不知道原因 错误日志如下:InnoDB:Endofpagedump2022-10-14T05:43:37.668007Z0[Note]InnoDB:Unc......
  • 动态传参的Echarts图表重载、重新绘制,二次查询时echarts上回遗留上次查询的结果
    动态传参的Echarts图表,需要根据不同参数改变图表的构建时,发现只通过varmyChart=echarts.init(document.getElementById('main'));//<div>容器id:main实例化,在第二次查......
  • SQL进阶篇之约束(Constraints)
    SQL约束约束用于限制加入表的数据的类型,可以在创建表时规定约束(通过CREATETABLE语句),或者在表创建之后也可以(通过ALTERTABLE语句)SQL约束主要包括以下几种约束......
  • Python实战—自行车租赁数据分析
    本节选取自行车的租赁数据,利用numpy、pandas、matplotlib三个库,数据清洗后,做数据分析,研究时间段与自行车租赁的关系。数据来源  本节以自行车的租赁数据为例,数据来源于网......
  • SQL进阶,子查询与窗口函数
    上一节给大家讲到SQL取数的一些基本内容,包含SQL简单查询与高级查询,需要复习相关知识的同学可以跳转至上一节,本节给大家讲解SQL的进阶应用,在实际过程中用途比较多的子查询与......
  • SQL取数,简单查询与高级查询
    一张表中通常会包含很多字段,造成数据冗余,在做数据分析时,我们仅需要提取数据分析所需要的字段,这里就需要用到数据选取的知识点,同时还可以依据特定条件筛选。本文介绍数据提取......
  • mysql创建索引的语句
     1. altertable table_name addindexindex_name(column) 2.altertabletable_nameaddprimarykey(column)/addunique主键索引或者唯一值索引 3.cre......
  • 数据分析面试题集锦(二)
    大家好,今天整理了数据分析面试题集锦(二),经常会被问到,“数据分析需要学习什么技能?”,“针对实际的业务场景,如何使用数据分析工具去分析?”基于此作者总结数据分析面试常用的问......