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的员工

得到输出如图👆


相关文章
|
4月前
|
SQL 关系型数据库 MySQL
在MySQL中,什么是结构化查询语言 (SQL)
【8月更文挑战第20天】在MySQL中,什么是结构化查询语言 (SQL)
73 1
|
5月前
|
SQL 存储 关系型数据库
SQL语言优缺点有哪些?
SQL(Structured Query Language)语言作为数据库管理和操作的标准语言,具有一系列的优点,同时也存在一些缺点。
107 7
|
2月前
|
SQL Oracle 关系型数据库
SQL语言的主要标准及其应用技巧
SQL(Structured Query Language)是数据库领域的标准语言,广泛应用于各种数据库管理系统(DBMS)中,如MySQL、Oracle、SQL Server等
|
2月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
90 11
|
4月前
|
SQL 关系型数据库 MySQL
|
4月前
|
SQL 存储 大数据
SQL 语言发展史简直太震撼啦!从诞生到现代数据处理,见证一场奇妙的演变之旅,快来感受!
【8月更文挑战第31天】SQL(结构化查询语言)自20世纪70年代由IBM研究员E.F. Codd提出以来,已成为现代数据处理不可或缺的一部分。它最初简化了层次和网状模型中复杂的存储与检索问题,通过基本的SELECT、FROM和WHERE关键字实现了数据查询。80年代,SQL在商业数据库中广泛应用,引入了GROUP BY、HAVING和ORDER BY等功能,增强了数据分析能力。90年代,互联网和企业信息化推动了SQL的进一步优化与扩展,支持分布式数据库和数据仓库等技术。
65 0
|
4月前
|
SQL 存储 NoSQL
从SQL到NoSQL:理解不同数据库类型的选择与应用——深入比较数据模型、扩展性、查询语言、一致性和适用场景,为数据存储提供全面决策指南
【8月更文挑战第31天】在信息技术飞速发展的今天,数据库的选择至关重要。传统的SQL数据库因其稳定的事务性和强大的查询能力被广泛应用,而NoSQL数据库则凭借其灵活性和水平扩展性受到关注。本文对比了两种数据库类型的特点,帮助开发者根据应用场景做出合理选择。SQL数据库遵循关系模型,适合处理结构化数据和复杂查询;NoSQL数据库支持多种数据模型,适用于非结构化或半结构化数据。SQL数据库在一致性方面表现优异,但扩展性较差;NoSQL数据库则设计之初便考虑了水平扩展性。SQL使用成熟的SQL语言,NoSQL的查询语言更为灵活。
98 0
|
4月前
|
SQL 数据可视化 数据挖掘
SQL 在数据分析中简直太牛啦!从数据提取到可视化,带你领略强大数据库语言的神奇魅力!
【8月更文挑战第31天】在数据驱动时代,SQL(Structured Query Language)作为强大的数据库查询语言,在数据分析中扮演着关键角色。它不仅能够高效准确地提取所需数据,还能通过丰富的函数和操作符对数据进行清洗与转换,确保其适用于进一步分析。借助 SQL 的聚合、分组及排序功能,用户可以从多角度深入分析数据,为企业决策提供有力支持。尽管 SQL 本身不支持数据可视化,但其查询结果可轻松导出至 Excel、Python、R 等工具中进行可视化处理,帮助用户更直观地理解数据。掌握 SQL 可显著提升数据分析效率,助力挖掘数据价值。
96 0
|
4月前
|
SQL 关系型数据库 数据库
|
4月前
|
SQL 关系型数据库 数据库
下一篇
DataWorks