解锁SQL基础应用新境界:从入门到精通的扩展实践指南(SQL扩展)

news2024/11/15 15:31:39
  •  作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
  •  座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  •  个人主页:团儿.-CSDN博客

目录

前言:

一.group  by

1.group by name  n

2.关于group by的sql_mode

3.group_concat

4.concat

5.关于多表连接语法规则 ****

6.别名

7.distinct

8.select 执行顺序

二.扩展类内容-元数据获取 ****

1.元数据介绍及获取介绍

2.information_schema的基本应用 ***

-- 1. 显示业务库和表的信息

-- 2. 以以下模式 显示所有的库和表的信息

-- 3. 查询所有innodb引擎的表

-- 4. 统计world下的city表占用空间大小 ****

-- 5. 统计world库数据量总大小 ****

-- 6. 统计每个库的数据量大小,并按数据量从大到小排序 ****

3.配合concat()函数拼接语句或命令

-- 1. 模仿以下语句,进行数据库的分库分表备份。

-- 2. 模仿以下语句,进行批量生成对world库下所有表进行操作


前言:

在信息爆炸的时代,数据已成为驱动业务决策、优化运营流程、以及创新服务模式的核心动力。而SQL(Structured Query Language),作为与数据库交互的基石语言,其重要性不言而喻。无论是数据分析师、数据科学家、软件开发者,还是任何需要处理数据的专业人士,掌握SQL都是通往数据世界的必备钥匙。

本章《解锁SQL基础应用新境界:从入门到精通的扩展实践指南》旨在为读者提供一个从SQL基础扎实起步,逐步迈向高级应用的全面指南。我们深知,仅仅掌握SQL的基本语法和查询操作是远远不够的,在实际工作中,面对复杂多变的数据需求,如何高效、准确地运用SQL进行数据提取、转换、加载(ETL),以及进行数据分析与可视化,才是衡量一个数据从业者能力的关键。

因此,本章覆盖了SQL在数据处理、性能优化、高级查询技巧的扩展应用。我们希望通过一系列精心设计的案例和实践练习,帮助读者不仅“知其然”,更“知其所以然”,从而在解决实际问题的过程中,不断提升自己的SQL应用能力和数据思维。


一.group  by

1.group by name  n

2.关于group by的sql_mode

only_full_group_by

说明:

在5.7版本中MySQL sql_mode参数中自带,5.6没有

在带有group by 字句的select中,select 后的条件列(非主键列),要么是group by后的列,要么需要在函数中包裹

实例:导入world库

通过百度网盘分享的文件:world.sql
链接: https://pan.baidu.com/s/1wf9kYbVzQnMnyk5KnFrCKQ 提取码: 9y8c

use world;

select name,population from city group by district;

#报错违反only_full_group_by

关闭only_full_group_by:

select @@sql_mode;

#查看当前sql_mode;

显示信息为:

only_full_group_by,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

仅复制only_full_group_by后面的字段,然后修改mysql配置文件。

vim /etc/my.cnf

在[mysqld]中添加一行:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

保存退出

systemctl restart mysqld

再次查看

select name,population from city group by district;

则不会报错,直接执行


3.group_concat

列转行聚合函数

将某个分组内的多个值合并为一个字符串

select user,group_concat(host)  from mysql.user group by user;

4.concat

做列值拼接,用于将两个或多个字符串值连接成一个新的字符串

select concat(user,"@",host)  from mysql.user;

5.distinct

DISTINCT关键字用于返回唯一不同的值。当你对查询结果应用DISTINCT时,它会从结果集中移除重复的行,只保留唯一的行

select count(distinct countrycode)  from city;

注:虽然CONCAT和DISTINCT在功能上有所不同,但它们可以在同一个查询中结合使用,以实现特定的数据处理需求。然而,需要注意的是,DISTINCT是应用于整个选择列表的,而不是单独应用于CONCAT的结果。

例:

-- 假设我们想要获取employees表中所有不同的first_name和last_name的组合,并将它们连接成一个字符串 -- 但由于DISTINCT是应用于整个选择列表的,我们不能直接对CONCAT的结果使用DISTINCT(除非使用子查询或窗口函数等高级技术) -- 下面的查询实际上不会按预期工作,因为它会尝试对整个CONCAT结果应用DISTINCT,而不是对原始列 -- SELECT DISTINCT CONCAT(first_name, ' ', last_name) AS full_name FROM employees; -- 这将返回所有不同的全名组合,但通常这不是我们想要的 --

一个更实用的方法是,如果你想要基于某些连接后的值进行去重,你可能需要使用子查询或GROUP BY(但GROUP BY通常用于聚合函数)

-- 例如,如果你想要知道有哪些不同的全名组合(尽管这通常不是去重的直接用途) SELECT full_name FROM ( SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees ) AS subquery GROUP BY full_name; -- 这里GROUP BY实际上是多余的,因为子查询已经生成了唯一的full_name,但它展示了如何结合使用这些概念 -- 或者,如果你只是想要去重的全名列表,直接使用子查询就足够了 SELECT DISTINCT CONCAT(first_name, ' ', last_name) AS full_name FROM employees;


6.别名

表别名 from 表名 as 表别名

列别名  select 列名 as 列别名  


7.关于多表连接语法规则 ****

首先找涉及到的所有表

找到表和表之间的关联列

关联条件写在on后面 A join B  on 关联列

所有需要查询的信息放在select后

其他的过滤条件where  group by  having order by  limit 往最后放

注意:对多表连接中,驱动表选择数据行少的表。后续所有表的关联列尽量是主键或唯一键(表设计),至少建立一个索引


8.select 执行顺序

select  user ,count(name)  from  表   where  列   group by user  having 聚合函数   order by  列 limit 3  offset 1 ;

=========================================================================

二.扩展类内容-元数据获取 ****

1.元数据介绍及获取介绍

元数据是存储在"基表"中。

通过专用的DDL语句,DCL语句进行修改

通过专用视图和命令进行元数据的查询

information_schema中保存了大量元数据查询的视图

show 命令是封装好功能,提供元数据查询基础功能


2.information_schema的基本应用 ***

tables 视图的应用

use information_schema;

desc tables;

TABLE_SCHEMA        表所在的库名

TABLE_NAME     表名

ENGINE     存储引擎

TABLE_ROWS     数据行

AVG_ROW_LENGTH     平均行长度

INDEX_LENGTH        索引长度

例子:

USE information_schema;

DESC TABLES;

-- 1. 显示业务库和表的信息

-- 2. 以以下模式 显示所有的库和表的信息

-- world     city,country,countrylanguage

select table_schema,group_concat(table_name) from tables where table_schema not in ('sys','mysql','information_schema','performance_schema') group by table_schema;

-- 3. 查询所有innodb引擎的表

SELECT table_schema,table_name ,ENGINE

FROM information_schema.tables

WHERE ENGINE='innodb';

-- 4. 统计world下的city表占用空间大小 ****

-- 表的数据量=平均行长度*行数+索引长度

-- AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH

SELECT table_name,(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024

FROM information_schema.TABLES

WHERE table_schema='world' AND table_name='city';

-- 5. 统计world库数据量总大小 ****

SELECT table_schema,SUM((AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH))/1024

FROM information_schema.TABLES

WHERE table_schema='world';

-- 6. 统计每个库的数据量大小,并按数据量从大到小排序 ****

SELECT table_schema,SUM((AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH))/1024 AS total_KB

FROM information_schema.TABLES

GROUP BY table_schema

ORDER BY total_KB DESC ;


3.配合concat()函数拼接语句或命令

例子:

-- 1. 模仿以下语句,进行数据库的分库分表备份。

备份world库下city表:

mkdir -p /bak/

mysqldump -uroot world city >/bak/world_city.sql

查看 

SELECT

CONCAT("mysqldump -uroot -p ",table_schema," ",table_name

," >/bak/",table_schema,"_",table_name,".sql")

FROM information_schema.tables;

-- 2. 模仿以下语句,进行批量生成对world库下所有表进行操作

ALTER TABLE world.city DISCARD TABLESPACE;



SELECT

CONCAT("ALTER TABLE ",table_schema,".",table_name," DISCARD TABLESPACE;")

FROM information_schema.tables

WHERE table_schema='world';


期待您的关注~ 

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

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

相关文章

Unity AnimationClip详解(1)

【动画片段】 前文我们介绍了骨骼动画,在Unity中骨骼动画的部分静态数据存储在SkinedMeshRender中,而另一部分动态的关键帧数据就是存储在AnimationClip中的。 关键帧数据来自与FBX、OBJ等动画模型文件,可以在动画导入后的Animation选项卡中…

通信工程学习:什么是GSMP通用交换机管理协议

GSMP:通用交换机管理协议 GSMP(General Switch Management Protocol,通用交换机管理协议)是一种用于IP交换机对ATM交换机进行控制的协议。以下是对GSMP的详细解释: 一、定义与概述 GSMP是一种异步协议,它在…

Python画笔案例-040 绘制五角星顶圆

1、绘制五角星顶圆 通过 python 的turtle 库绘制五角星顶圆,如下图: 2、实现代码 绘制五角星顶圆,以下为实现代码: """五角星顶圆.py """ import turtledef draw_circle(d):turtle.left(90)for _ …

C#/.NET/.NET Core技术前沿周刊 | 第 4 期(2024年9.1-9.8)

前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿,助力技术成长与视野拓宽。 欢迎投稿&…

客户端绑定本地端口与服务器建立连接的详细实现

客户端绑定本地端口与服务器建立连接的详细实现 一、网络编程基础1.1 TCP/IP协议1.2 套接字(Socket)1.3 客户端与服务器模型二、客户端程序的设计2.1 需求分析2.2 流程设计三、具体代码实现3.1 伪代码3.2 C代码实现四、代码详解4.1 初始化套接字库4.2 创建套接字4.3 绑定本地…

嵌入式Linux学习笔记-C语言编译过程

c语言的编译分为4个过程,分别是预处理,编译,汇编,链接。 一、预处理 预处理是c语言编译的第一个阶段,该任务主要由预处理器完成。预处理器会根据预处理指令对源代码进行处理,将预处理指令替换为相应的内容…

Learn ComputeShader 12 Setting up a buffer-based particle effect

unity有自己的粒子系统,但是这次我们要尝试创建一个我们自己的粒子系统,而且使用计算着色器有下面这些好处。总而言之,计算着色器适合处理大规模的数据集。例如,能够高效地处理数万个甚至数百万个粒子的计算。这对于粒子系统这样的…

【HarmonyOS】骨架屏(数据请求回来之前使用组件生成骨架屏,数据回来以后【骨架屏】消失)不会让页面白屏显示空

#骨架屏作用用途 骨架屏用途就是防止用户焦虑(为了迷惑用户) #效果图 #思路: #步骤: 1.首先是封装一个骨架 (所使用的思路就是利用 linearGradient translate animation onAppear 实现骨架的闪光效果&#xff09…

【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析

【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析 目录 【计算机网络】电路交换、报文交换和分组交换——三种交换方式性能分析电路交换性能分析报文交换性能分析分组交换性能分析对比 电路交换性能分析 4Kb 需要8毫秒 数据传送需要11ms 报文交换性能分…

数组与贪心算法——452、435、646、406、169(1简4中)

452. 用最少数量的箭引爆气球(中等) 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可…

Python自带日志库实现springboot彩色效果

整体目标 涉及的库均为Python3自带库实现 loggingsysenum 终端显示彩色基本原理参考👉Terminal里的颜色的那些事 Python打印日志可以直接借用logging自带的库实现,但是默认的打印实在太丑了,长下面这样 这只是一条日志看着还好比较清爽&…

VUE+Tailwind网页开发

从nodejs官网下载安装包并安装&#xff1a;https://nodejs.org/zh-cn 参考vue官网步骤配置项目&#xff1a;https://cn.vuejs.org/guide/quick-start.html $ npm create vuelatest $ cd <your-project-name> $ npm install 参考&#xff0c;安装vue-router:安装 | Vue…

【CanMV K230】矩形检测

【CanMV K230】矩形检测 什么是 矩形检测矩形检测应用领域1.目标检测2.自动驾驶3.医学图像处理4.智能零售5.图像识别6.计算机视觉 K230应用相关函数官方例程 本篇内容&#xff1a; 什么是 矩形检测矩形检测应用领域K230应用&#xff08;包含相应函数及例程&#xff09; B站视频…

【有啥问啥】HashHop在LTM-2-mini中的应用:解锁长期记忆模型的新纪元

HashHop在LTM-2-mini中的应用&#xff1a;解锁长期记忆模型的新纪元 引言 随着AI技术的飞速发展&#xff0c;模型在处理复杂任务和数据时所需的上下文窗口大小也在不断扩展。深度学习模型在处理超长上下文时&#xff0c;往往面临着计算资源消耗高、上下文丢失等问题。近期&am…

通信工程学习:什么是IFMP(Ipsilon流管理协议)

IFMP&#xff1a;Ipsilon流管理协议 IFMP&#xff08;Ipsilon Flow Management Protocol&#xff09;&#xff0c;即Ipsilon流量管理协议&#xff0c;是一种用于网络流量管理的协议。它主要用于IP交换机、IP交换网关或IP主机中&#xff0c;通过控制数据传送&#xff0c;将现有网…

【H2O2|全栈】更多关于HTML(1)HTML进阶(一)

目录 HTML进阶知识 前言 准备工作 标签的扩展&#xff08;一&#xff09; 本文中的标签在什么位置使用&#xff1f; title标签 meta标签 name viewport referrer http-equiv charset content link标签 实际案例 可视部分 代码分析 其他标签 base标签 styl…

《论企业集成平台的技术与应用》写作框架,软考高级系统架构设计师

论文真题 企业集成平台是一个支持复杂信息环境下信息系统开发、集成和协同运行的软件支撑环境。它基于各种企业经营业务的信息特征,在异构分布环境(操作系统、网络、数据库)下为应用提供一致的信息访问和交互手段,对其上运行的应用进行管理,为应用提供服务,并支持企业信…

数论技巧——使用线性筛法去求1~n之间欧拉函数的和

本节是数论中的重要内容&#xff0c;也是算法竞赛中的常考点&#xff0c;初学者理解起来可能有些困难&#xff0c;需要多多体会 给定一个正整数 n&#xff0c;求 1∼n 中每个数的欧拉函数之和。 欧拉函数的定义&#xff1a;1~n中与n互质的数的个数被称为欧拉函数,记作φ(n) 欧…

操作系统 ---- 进程的概念、组成、特征

学习路线&#xff1a; 一、进程的概念及组成 我们通过一个例子来说明进程的概念以及程序和进程的区别。 我们在Windows操作系统中打开任务管理器&#xff0c;在任务管理器当中能看到此时系统当中运行的进程有哪些&#xff0c;如下图所示&#xff1a; 此时&#…

【前端】vue+html+js 实现table表格展示,以及分页按钮添加

一. 问题描述 数据条数太多显示到页面上时可能会渲染较慢&#xff0c;因此需要截取数据进行展示。 二. 代码写法 思路&#xff1a;按照上述图示思路&#xff0c;需要有两个数据列表&#xff0c;一个存储的是所有的列表数据&#xff0c;一个存储的是展示的数据列表&#xff0c…