【牛客SQL快速入门】SQL基础(二)

一、高级查询

1. 计算函数

AVG

AVG()为平均值函数,通过对表中行数计数并计算其列值之和,求得该列的平均值。 AVG() 可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。

Select avg(gpa)
From user_profile

COUNT

COUNT()函数为计数函数,可利用 COUNT() 确定表中行的数目或符合特定条件的行的数目

COUNT()函数有两种使用方式:

  • 使用 COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值
  • 使用 COUNT(column)对特定列中具有值的行进行计数,忽略 NULL 值

MAX

MAX()返回指定列中的最大值。MAX在使用时,()需指定要返回最大值的列名称

MIN

MIN()的功能正好与 MAX()功能相反,它返回指定列的最小值。与 MAX() 一样,MIN()要求指定列名

SUM

SUM()用来返回指定列值的和(总计)。

取整函数

在一些聚集运算中,容易出现结果为非整数的情况,这时候如果想要限定结果返回的小数位数就可以使用SQL中内置的round函数,语法格式为round(value,n),其中value代表想要限制小数位数的字段,n代表想要限制的小数位数。

下列语句就代表求age列的均值,并保留一位小数。

SELECT round(avg(age),1)  AS avg_age FROM user_profile

2. 分组查询

分组查询数据,涉及到两个新 SELECT 语句子句:GROUP BY 子句和 HAVING 子句。

分组计算

在使用Group by时,有一些事项需要注意:

1. GROUP BY 子句可以包含任意数目的列,因而可以对分组进行嵌套, 更细致地进行数据分组。

2. 除聚集计算语句外,SELECT 语句中的每一列都必须在 GROUP BY 子句中同时给出。

3. 如果分组列中包含具有 NULL 值的行,则 NULL 将作为一个分组返回。 如果列中有多行 NULL 值,它们将分为一组。

4. GROUP BY 子句必须出现在 WHERE 子句之后,ORDER BY 子句之前。

举个🌰: 

SELECT university,avg(gpa) AS avg_gpa
FROM user_profile
Group By university

        GROUP BY 子句指示SQL按university分组分别计算每个学校的平均gpa情况,结果返回每个大学的平均gpa数值。

分组过滤

除了能用 GROUP BY 分组数据外,SQL 还允许在分组的结果下进行过滤,分组查询的结果不能简单的使用Where语句进行过滤,而需要使用专门的Having语句

在上一章节题目中,我们计算了不同性别和不同学校分组下的用户30天内平均活跃天数情况,假如说我们只想要取出平均活跃天数在10天以上的分组,这时就可以用到Having语句,来看示范 :

举个🌰:
SELECT gender,university,count(device_id) as user_num,
avg(active_days_within_30) as avg_active_days,
avg(question_cnt) as avg_question_cnt
FROM user_profile
Group By gender,universityHaving avg(active_days_within_30) >10

       在最后一行中增加 HAVING 子句,并搭配使用了avg(active_days_within_30) >10的条件,最终结果中就只会返回30天平均活跃天数大于10的分组。

二、多表查询

1. 子查询

SQL 允许创建子查询(subquery),即嵌套在其他查询中的查询。

举个🌰:

SELECT
device_id,
question_id,
result
FROM question_practice_detail
WHERE device_id IN (SELECT device_id FROM user_profile
WHERE university ='山东大学');

        在 SELECT 语句中,子查询总是从内向外处理。在处理上面的 SELECT 语 句时,DBMS实际上执行了两个操作。

首先,它执行下面的查询:

SELECT device_id FROM user_active WHERE university ='山东大学'

这个查询可以返回所有的山东大学用户的device_id, 然后,这些值以IN 操作符要求的逗号分隔的格式传递给外部查询的 WHERE 子句,外部查询变成:

SELECT cust_id FROM orders WHERE order_num IN (5432,,2131) ,

数据库管理系统(Data Base Management System,DBMS)是管理和维护数据库的系统软件。

2. 连接查询

理解关系表的概念

        SQL 最强大的功能之一就是能在数据查询的执行中联结(join)表。关系表的设计就是要把信息分解成多个表,一类数据一个表。各表通过某些共同的值互相关联(所以才叫关系数据库)。 下面我们来介绍一些常见的链接方式:

Join链接方式

1. 左链接

左连接的定义:是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。左连接全称为左外连接,是外连接的一种。其语句为Left join .. on

在使用Left Join时有几个注意要点:

  • 在使用Left join 时,写在前面的表为匹配时的底表,使用on给出匹配条件,匹配条件可以不唯一。
  • 在表匹配时,一般我们会将要匹配的两段查询用括号括起来,并在括号末尾给予一串字母,作为表的别名。
  • 在使用on写匹配条件时,如果两个表中有字段名称一样,需要用表名.字段的写法指出该字段取自哪一个表,在最终Select语句输出时同理,可以看到设备ID最终输出的写法是a.device_id,因为device_id同时存在于两个表中,我们这里指定要用a表中 的device_id列来输出。

举个🌰:

Select a.device_id,question_id,result,level,gender,age 
from
(
Select device_id,question_id,result,level
From question_practice_detail
)a -- 表别名
Left join
(
Select device_id,gender,age
From user_profile
)b -- 表别名
On a.device_id = b.device_id —给出链接条件

2. 右链接

右向外联接是左向外联接的反向联接,是以右表为基础,返回右表的所有行,和左链接没有本质上的区别。

3. 内链接

内连接是A表的所有行和B表的所有行在指定条件下得到的交集,所用到的语句为Join

笛卡尔积

在写表与表之间的链接关系时,大多数情况下都必须要限制匹配条件,如果在匹配时没用限制匹配条件,这时就会导致笛卡尔积

笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,即假设表A中有n行数据,表b中有m行数据,没有限制匹配条件的话,最终输出的结果就会有m*n行数据,在互联网大体量数据情况下,每个表可能有几百万几千万行数据,几千万*几千万最终得到的结果行数会是天文数字,所以在写匹配时,一定不要忘了加上匹配条件。

3. 组合查询

多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。 但是,SQL 也 允许执行多个查询(多条 SELECT 语句),并将结果作为一 个查询结果集返回。这些组合查询通常称为并(union)或复合查询 (compound query)。

主要有两种情况需要使用组合查询:

  • 在一个查询中从不同的表返回结构数据;
  • 对一个表执行多个查询,按一个查询返回数据。

union

可用 UNION 操作符来组合数条 SQL 查询。利用 UNION,可给出多条 SELECT 语句,将它们的结果组合成一个结果集。

使用 UNION 很简单,所要做的只是给出每条 SELECT 语句,在各条语句之间放上关键字UNION。但需要注意的是UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过, 各个列不需要以相同的次序列出)

union all

UNION 从查询结果集中自动去除了重复的行;换句话说,它的行为与一 条 SELECT 语句中使用多个 WHERE 子句条件一样,使用 UNION 时,重复的行会被自动取消。 这是UNION 的默认行为,如果想不去重的返回所有的匹配行,可使用 UNION ALL而不是UNION。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804232.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM单片机的GPIO口在控制不同LED、按键时的设置

个人备忘,不喜勿喷。 GPIO口在驱动共阴极、共阳极LED灯时需要不同的初始化设置 对于这一类的led灯: 最好选择推挽、上拉、高速输出,同时IO口初始化时需要拉高。 上面这种需要下拉输入; 上图这种需要上拉输入,这样才…

如何使用Arduino IDE对STM32F103C8T6进行编程

使用Arduino IDE对STM32F103C8T6进行编程调试,你需要进行一些准备工作和设置。以下是详细的操作步骤: 准备工作: 安装Arduino IDE:确保你已经安装了最新版本的Arduino IDE。可以从官方网站 https://www.arduino.cc/en/software 下…

vue点击上传图片并实现图片预览功能,并实现多张图片放到一个数组中进行后端请求(使用原生input)

一、将 File 对象转成 BASE64 字符串 &#xff08;FileReader&#xff09; <template><div><!-- 用来显示封面的图片 --><!-- <img src"/assets/images/cover.jpg" alt"" class"cover-img" ref"imgRef" />…

html基础(2)(链接、图像、表格、列表、id、块)

1、链接 <a href"https://www.example.com" target"_blank" title"Example Link">Click here</a> 在上示例中&#xff0c;定义了一个链接&#xff0c;在网页中显示为Click here&#xff0c;鼠标悬停指示为Example Link&#xff0c…

Java(多线程)

一、基本概念 进程&#xff1a;一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元&#xff0c;在传统的操作系统中&#xff0c;进程既是基本的分配单元&#xff0c;也是基本的执行单元。线程&#xff1a;操作系统中能够进行运算的最…

java Web课程管理系统用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 JSP 课程管理系统是一套完善的web设计系统&#xff0c;对理解JSP java 编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0&#xff0c;使用ja…

贪心算法|406.根据身高重建队列

力扣题目链接 class Solution { public:static bool cmp(const vector<int>& a, const vector<int>& b) {if (a[0] b[0]) return a[1] < b[1];return a[0] > b[0];}vector<vector<int>> reconstructQueue(vector<vector<int>…

骑砍2霸主MOD开发(2)-基础开发环境搭建

一.骑砍2霸主程序架构 二.骑砍2霸主C#接口层代码查看 1.C#反编译工具dnspy下载: 2.骑砍2霸主游戏引擎接口查看: 例如IMBAgent interface接口: #调用TaleWorlds.Native.dll中的函数 [EngineMethod("get_movement_flags", false)] uint GetMovementFlags(UIntPtr agen…

Visual Studio Code SSH 连接远程服务器

Visual Studio Code通过 SSH 连接远程服务器并实现免密登录&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. **安装插件**&#xff1a;首先&#xff0c;在 VS Code 中安装 "Remote - SSH" 插件。打开 VS Code&#xff0c;点击左侧的扩展图标&#xff0c;搜索…

微服务学习3

目录 1.微服务保护 1.1.服务保护方案 1.1.1.请求限流 1.1.2.线程隔离 1.1.3.服务熔断 1.2.Sentinel 1.2.1.微服务整合 1.2.2.请求限流 1.3.线程隔离 1.3.1.OpenFeign整合Sentinel 1.3.2.配置线程隔离 1.4.服务熔断 1.4.1.编写降级逻辑 1.4.2服务熔断 2.分布式事…

mp4转flv怎么转?电脑怎么把视频转成flv?

MP4&#xff08;MPEG-4 Part 14&#xff09;是一种多媒体容器格式&#xff0c;广泛用于包含视频、音频、字幕等多种数据流。MP4因其高度灵活性、压缩效率和兼容性成为视频领域的主流格式&#xff0c;支持范围涵盖从在线视频到移动设备的各类应用场景。 FLV文件格式的多个优点 …

UVA230 Borrowers 图书管理系统 解题报告

题目链接 https://vjudge.net/problem/UVA-230 题目大意 你的任务是模拟一个图书管理系统。首先输入若干图书的标题和作者&#xff08;标题各不相同&#xff0c;以END结束&#xff09;&#xff0c;然后是若干指令&#xff1a;BORROW指令表示借书&#xff0c;RETURN指令表示还…

scFed:联邦学习用于scRNA-seq分类

scRNA-seq的出现彻底改变了我们对生物组织中细胞异质性和复杂性的理解。然而&#xff0c;大型&#xff0c;稀疏的scRNA-seq数据集的隐私法规对细胞分类提出了挑战。联邦学习提供了一种解决方案&#xff0c;允许高效和私有的数据使用。scFed是一个统一的联邦学习框架&#xff0c…

Spring Validation解决后端表单校验

NotNull&#xff1a;从前台传递过来的参数不能为null,如果为空&#xff0c;会在控制台日志中把message打印出来 Range&#xff1a;范围&#xff0c;最大多少&#xff0c;最小多少 Patten&#xff0c;标注的字段值必须符合定义的正则表达式&#xff08;按照业务规则&#xff0…

Android OOM问题定位、内存优化

一、常用工具&#xff1a; 1、LeakCanary val refWatcher: RefWatcher? TestApp.getRefWatcher(activity) refWatcher?.watch(activity);//检测是否有泄露&#xff0c;即触发GC回收&#xff0c;看activity是否被回收&#xff0c;没有被回收就是泄露了。 二、常见的几种内…

常用工具之docker

官方文档 什么是docker Docker提供了在一个称为容器的松散隔离环境中打包和运行应用程序的能力。隔离和安全性允许您在给定的主机上同时运行多个容器。容器是轻量级的&#xff0c;包含运行应用程序所需的一切&#xff0c;因此您不需要依赖于主机上安装的内容。您可以在工作时…

TCP 重传、滑动窗口、流量控制、拥塞控制(计算机网络)

重传机制 TCP 针对数据包丢失的情况&#xff0c;会用重传机制解决。 接下来说说常见的重传机制&#xff1a; 超时重传快速重传SACKD-SACK 超时重传 重传机制的其中一个方式&#xff0c;就是在发送数据时&#xff0c;设定一个定时器&#xff0c;当超过指定的时间后&#xff0c…

关于IP地址发展历程的详细探讨

IP地址的发展历程是一段不断演进、适应网络技术发展的历史。自互联网诞生以来&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;扮演了至关重要的角色。以下是对IP地址发展历程的详细探讨。 在互联网的初期&#xff0c;主机数量相对较少&#xff0c;IP地址主要用于区分不…

实验2 路由器基本配置

实验2 路由器基本配置 一、 原理描述二、 实验目的三、 实验内容四、 实验步骤1.建立实验拓扑2.基础配置3.配置路由器接口IP地址4.查看路由器配置信息5.连通性测试6.使用抓包工具 一、 原理描述 华为设备支持多种配置方式&#xff0c;操作人员要熟悉使用命令行的方式进行设备管…

SecureCRT通过私钥连接跳板机,再连接到目标服务器(图文教程)

文章目录 1. 配置第一个session&#xff08;跳板机&#xff09;2. 设置本地端口3. 设置全局firewall4. 配置第二个session&#xff08;目标服务器&#xff09; 服务器那边给了一个私钥&#xff0c;现在需要通过私钥连接跳板机&#xff0c;再连接到目标服务器上 &#x1f349; …