SQL通用语言之五项进阶操作

简介: 引入何为进阶?当我们跳出了原有限制进行更新、自定义化更强的操作时就是进阶的开始。本期我们就将进行几个原有限制的跳出——join连接:跳出单个数据表的限制SubQuery子查询:跳出单层逻辑的限制常用函数:跳出工具的单一性限制groupby分组having过滤分组

引入


何为进阶?当我们跳出了原有限制进行更新、自定义化更强的操作时就是进阶的开始。

本期我们就将进行几个原有限制的跳出——

join连接:跳出单个数据表的限制

SubQuery子查询:跳出单层逻辑的限制

常用函数:跳出工具的单一性限制

groupby分组

having过滤分组


1.join连接数据表


我们之前的操作都是基于单一数据表的,而如果我们需要查询多个数据表的内容,应该如何操作呢?

我们在之前介绍过view视图,可以把有需要的表全部合并到一个新的临时表中,然后进行查询。

但是有没有可以在查找的时候就把表连接起来的?这样可以少一个创建临时表的步骤。

答案当然是肯定的

join语句用于把多个有共同字段的表基于共同字段结合在一起,并进行下一步查询。连接有以下几种:

内连接(inner join)

做连接(left join)

右连接(right join)

使用语法如下:

select 字段名 [as] from 表1 join 表2 where子句;

同理,这里的as可以省略


image.png

上图较为清晰地展现了join的三个不同方式的差距。


2.SubQuery子查询


我们在以往介绍的查询过程中都是在一层条件的情况下实现的。

什么是一层条件呢?就是用一次筛选得到的表。

而当我们学习到view的时候就发现了,where子句事实上是可以放入子表的。我们把将其他sql语句放入where子句中的查询称作subquery子查询,语法如下:

select 字段1,字段2,... from 表名 where 字段名 操作符 (子查询);

举个具体的例子可以看得更加清楚:

image.png

图中的例子就是利用子查询,先在包含部门号deptno和办公地点loc的表(暂时称为表1)中查出地点以“二楼”开头的数据,返回deptno部门号(暂时称为表A),然后很自然地在包含姓名name和部门号deptno的表(暂时称为表2)中运用where子句查找满足deptno在刚刚找到的表A的数据,这样一来实现的功能就是找到了办公地点在二楼的员工姓名,

以上操作相当于把表1和表2依据deptno部门号自然连接后再用单层查找。但是很明显,这样操作势必会生成一个非常大的表,会明显占用计算机内存,拖慢运行进程。

所以子查询还是非常好用的。


3.常用函数


我们目前为止掌握的基本操作也有一些了,但是工具明显还是不够多。这里就介绍一些常用的函数来弥补工具箱的匮乏:

count函数:用以统计符合条件的记录数。count(*)用以统计表中的记录总数,count(字段名) 统计指定字段中不为null的记录数目。

select count(*) from employees;# 用以统计员工表中的所有员工
select count(deptno) from employees;# 用以统计员工表中部门号不为null的员工数目

-max和min函数:用于返回所选字段的最大最小值。用法与count相似,替换count的位置即可(下面类似的用法不再赘述,放同样的位置即可):

max(字段名)
min(字段名)

avg函数:返回所选字段的平均值。用法avg(字段名)

sum函数:返回所选字段的合计值。用法sum(字段名)


4.groupby 分组


用于配合统计函数使用,来对一个或多个列进行分组。用法很清晰明了:

select 字段名,统计函数 from 表名 where子句 group by 字段名;


5.having过滤分组


学习了groupby分组之后我们还想对分组之后的结果进行过滤,但此时where子句已经无法用在分组后的结果中了,该怎么办呢?

我们就需要使用having进行分组后的表过滤.

select 字段名,统计函数 from 表名 where子句 group by 字段名 having 统计函数 运算符 值;


image.png

image.png

上面的两个例子都可以用这个例子来演示理解一下.

我们用select deptno,avg(salary)来指定需要查询的字段(是部门号和部门平均工资),from employees来选择数据表,用group by deptno指定分组条件(是按照部门编号分组),并过滤出avg(salary)平均工资低于4500的员工

得到输出如图👆


目录
打赏
0
0
0
0
1
分享
相关文章
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
166 1
SQL语言优缺点有哪些?
SQL(Structured Query Language)语言作为数据库管理和操作的标准语言,具有一系列的优点,同时也存在一些缺点。
288 7
SQL做数据分析的困境,查询语言无法回答的真相
SQL 在简单数据分析任务中表现良好,但面对复杂需求时显得力不从心。例如,统计新用户第二天的留存率或连续活跃用户的计算,SQL 需要嵌套子查询和复杂关联,代码冗长难懂。Python 虽更灵活,但仍需变通思路,复杂度较高。相比之下,SPL(Structured Process Language)语法简洁、支持有序计算和分组子集保留,具备强大的交互性和调试功能,适合处理复杂的深度数据分析任务。SPL 已开源免费,是数据分析师的更好选择。
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
306 9
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
199 11
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
SQL开发问题之对于ODPS中的UNION操作,执行计划的问题如何解决
199 7
|
12月前
|
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
125 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问