[MySQL] MySQL 高级(进阶) SQL 语句

一、高效查询方式

1.1 指定指字段进行查看

事先准备好两张表

select 字段1,字段2 from 表名;

1.2 对字段进行去重查看  

 SELECT DISTINCT "字段" FROM "表名";

1.3 where条件查询 

 SELECT "字段" FROM 表名" WHERE "条件";

1.4 and 和 or 进行逻辑关系的增加 

 SELECT "字段" FROM "表名" WHERE "条件1"  AND "条件2";

 SELECT "字段" FROM "表名" WHERE "条件1"  OR "条件2";

1.5 查询取值列表中的数据 

 SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);   #in,遍历一个取值列表

1.6 between的引用 

 SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';

1.7 like的查询方式

like查询通常会与通配符配合使用

%:百分号表示零个、一一个或多个字符

 _:划线表示单个字符

SELECT * FROM Store_Info WHERE Store_Name like '%os%';
SELECT * FROM store_info WHERE Store_Name like '_os%';

1.8 排序方式进行查询 

order by,按关键字排序。

注意:

  • 一般对数值字段进行排序。
  • 如果对字符类型的字段进行排序,则会按首字母排序。
SELECT Store_Name,Sales,Date FROM store_info ORDER BY Sales DESC;
SELECT Store_Name,Sales,Date FROM store_info ORDER BY Sales asc;
#ASC是按照升序进行排序的,是默认的排序方式。#DESC是按降序方式进行排序。

 二、运用函数查询

2.1 数据库中常用数学的函数 

数学函数作用
abs(x)返回x的绝对值
rand()返回0到1的随机数
mod(x, y)返回x除以y以后的余数
power(x, y)返回x的y次方
round(x)返回离x最近的整数
round(x, y)保留x的y位小数四舍五入后的值
sqrt(x)返回x的平方根
truncate(x, y)返回数字x截断为y位小数的值 #不四舍五入
ceil(x)返回大于或等于x的最小整数
floor(x)返回小于或等于x的最大整数
greatest(x1,x2,...)返回集合中最大的值
least(x1,x2,...)返回集合中最小的值
SELECT abs(-1), rand(), mod(5,3), power(2,3), round(1.89);
SELECT round(1.8937,3), truncate(1.235,2), ceil(5.2), floor(2.1), least(1.89,3,6.1,2.1);

2.2 聚合函数  

聚合函数含义
avg()返回指定列的平均值
count()返回指定列中非 NULL 值的个数
min()返回指定列的最小值
max()返回指定列的最大值
sum(字段)返回指定列的所有值之和
SELECT avg(Sales) FROM Store_Info;

SELECT count(Store_Name) FROM store_info;
SELECT count(DISTINCT Store_Name) FROM Store_Info;SELECT max(Sales) FROM Store_Info;
SELECT min(Sales) FROM Store_Info;SELECT sum(Sales) FROM Store_Info;

2.3 字符串函数 

字符串函数作用
trim()返回去除指定格式的值
concat(x,y)将提供的参数 x 和 y 拼接成一个字符串
substr(x,y)获取从字符串 x 中的第 y 个位置开始的字符串,跟substring()函数作用相同
substr(x,y,z)获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
length(x)返回字符串 x 的长度
replace(x,y,z)将字符串 z 替代字符串 x 中的字符串 y
upper(x)将字符串 x 的所有字母变成大写字母
lower(x)将字符串 x 的所有字母变成小写字母
left(x,y)返回字符串 x 的前 y 个字符
right(x,y)返回字符串 x 的后 y 个字符
repeat(x,y)将字符串 x 重复 y 次
space(x)返回 x 个空格
strcmp(x,y)比较 x 和 y,返回的值可以为-1,0,1
reverse(x)将字符串 x 反转
 (1)去除字符 trim
 SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);​#[位置]:值可以为 LEADING (起头), TRAILING (结尾), BOTH (起头及结尾)。 #[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格。

(2) 截取 substr
SELECT substr(Store_Name,3) FROM location WHERE Store_Name = 'Los Angeles';
SELECT substr(Store_Name,2,4) FROM location WHERE Store_Name = 'New York';

 

(3)字段拼接 
  1)concat(x,y)
SELECT concat(Region, Store_Name) FROM location WHERE Store_Name = 'Boston';

2)使用 || 符号 
SELECT Region || ' ' || Store_Name FROM location WHERE Store_Name = 'Boston';

(4)返回字符长度 length 
select length(name) from city;

(5)替换 replace 
SELECT REPLACE(Region,'ast','astern')FROM location;

三、高级查询语句 

3.1 GROUP BY(用于分组和汇总) 

对GROUPBY后面的字段的查询结果进行汇总分组,通常是结合聚合函数一起使用的     

   "GROUP BY"有一个原则,凡是在"GROUP BY"后面出现的字段,必须在SELECT 后面出现;

        凡是在SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在"GROUP BY"后面。

 (1)汇总统计
select name, count(name) from city group by name;

(2)汇总并对其指定字段(数字类)进行累加 
select name,sum(name) from city group by name;

(3)汇总并对其指定字段(数字类)进行累加,再进行降序 
select name,sum(name) from city group by name order by sum(name) desc;

3.2 HAVING 过滤 

  • 用来过滤由"GROUP BY"语句返回的记录集,通常与"GROUP BY"语句联合使用。

  • HAVING语句的存在弥补了WHERE 关键字不能与聚合函数联合使用的不足。

  • where只能对原表中的字段进行筛选,不能对group by后的结果进行筛选。

SELECT Store_Name, SUM(Sales) FROM store_info GROUP BY Store_Name HAVING SUM(Sales) > 1500;

3.3 别名设置查询  

 语法格式: 

 SELECT 字段1,字段2 AS 字段2的别名 from 表名;   #AS可以省略不写
(1)字段别名
SELECT A.Store_Name Store, SUM(A.Sales) "Total Sales" FROM store_info A GROUP BY A.Store_Name;
 (2)表别名
SELECT 表格别名.字段1 [AS] 字段别名  FROM 表格名 [AS] 表格别名; #AS可以省略不写

3.4  子查询语句 

子查询:连接表格,在WHERE 子句或HAVING 子句中插入另一个SQL语句。 

 SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符]     #外查询(SELECT "字段1" FROM "表格2" WHERE "条件") ;             #内查询

普通的表数据连接: 

select * from location A, store_info B where A.Store_Name=B.Store_Name;

子查询加入表连接 : 

select * from store_info where Store_Name in(select Store_Name from location where Sales > 1000);

3.5 EXISTS 

  • 用来测试内查询有没有产生任何结果,类似布尔值是否为真。
  • 如果内查询有结果的话,系统就会执行外查询中的SQL语句。若是没有结果的话,那整个SQL语句就不会产生任何结果。

格式: 

 SELECT "字段1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");SELECT SUM(Sales) FROM store_info WHERE EXISTS (SELECT * FROM location WHERE Region = 'West');

 四、表连接查询 

MYSQL数据库中常用的表连接有三种:

  • inner join(内连接):只返回两个表中联结字段相等的行(有交集的值)
  • left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录
  • A  left  join  B  : A为左表,B为右表
  • right join(右连接):返回包括右表中的所有记录和左表中联结字段相等的记
  • A  right join  B:  A为左表 ,B为右表

(1) 内连接 inner join 

SELECT * FROM location A INNER JOIN store_info B on A.Store_Name = B.Store_Name ;
SELECT * FROM location A, store_info B WHERE A.Store_Name = B.Store_Name;
SELECT A.Region REGION, SUM(B.Sales) SALES FROM location A, store_info B 
WHERE A.Store_Name = B.Store_Name GROUP BY REGION;

 

(2)左连接 left join 

SELECT * FROM location A LEFT JOIN store_info B on A.Store_Name = B.Store_Name ;

 (3)右连接 left join 

SELECT * FROM location A RIGHT JOIN store_info B on A.Store_Name = B.Store_Name ;

五、view 视图的运用 

视图:可以被当作是虚拟表或存储查询。

  • 视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。
  • 临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
  • 视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。 比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。

格式:

CREATE VIEW "视图表名" AS "SELECT 语句";   #创建视图表​DROP VIEW "视图表名";                     #删除视图表

(1)视图的创建 

view V_sales as select store_namee,sum(sales) from store_info group by store_namme;

视图创建的数据验证: 

(2) 视图提供的后续便捷操作 

视图的好处:创建视图的过程虽然和高级查询语句(通过两个select语句进行组合条件划分生成派生表)一样,过程是复杂的,但是如果该查询操作是需要经常使用的,创建视图就很有必要,不仅能简化查询过程,还能对该查询进行进一步操作,而且十分简便。

select store_name from V_sales group by store_name having count(store_name) = 1;

(3)经典定义问题:视图能否插入数据  

视图能否插入数据,要看情况而定: 

1)如果视图表是两个表的连接查询(比如视图的A字段来自A表,B字段来自B表,数据是无法插入的)。因为表结构和原表不一致。视图中的字段是根据原表中某个字段,通过函数运算,产生的新字段,而没有真正能够存储的字段,所以该数据是无法插入的。

2)如果视图表结构与原表保持一致,数据是可以插入的,插入的数据是存储在原表中,视图所更新出的数据,其实是映射原表的数据。

六、UNION 联级

UNION联集:将两个SQL语句的结果合并起来,两个SQL语句所产生的字段需要是同样的数据记录种类。

6.1 UNION(合并后去重)

生成结果的数据记录值将没有重复,且按照字段的顺序进行排序。#合并后去重

格式:[select 语句1] UNION [select 语句2];
SELECT Store_Name FROM location UNION SELECT Store_Name FROM store_info;

6.2 UNION ALL(合并后不去重)  

SELECT Store_Name FROM location UNION ALL SELECT Store_Name FROM store_info;

七、交集值与无交集值

7.1 求交集值

SELECT DISTINCT A.Store_Name FROM location A INNER JOIN store_info B USING(Store_Name);SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) IN (SELECT Store_Name FROM store_info);SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN store_info B USING(Store_Name) WHERE B.Store_Name IS NOT NULL;SELECT A.Store_Name FROM (SELECT B.Store_Name FROM location B INNER JOIN store_info C ON B.Store_Name = C.Store_Name) A 
GROUP BY A.Store_Name;SELECT A.Store_Name FROM 
(SELECT DISTINCT Store_Name FROM location UNION ALL SELECT DISTINCT Store_Name FROM store_info) A 
GROUP BY A.Store_Name HAVING COUNT(*) > 1;

 

 

7.2 求无交集值 

SELECT DISTINCT Store_Name FROM location WHERE (Store_Name) NOT IN (SELECT Store_Name FROM store_info);SELECT DISTINCT A.Store_Name FROM location A LEFT JOIN store_info B USING(Store_Name) WHERE B.Store_Name IS NULL;SELECT A.Store_Name FROM 
(SELECT DISTINCT Store_Name FROM location UNION ALL SELECT DISTINCT Store_Name FROM store_info) A 
GROUP BY A.Store_Name HAVING COUNT(*) = 1;

 

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

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

相关文章

计算机组成原理-多处理器系统的基本概念(SISD SIMD MISD MIMD)

文章目录 总览先看这个再往下看 SISDSIMDMISDMIMD向量处理器共享内存多处理器和多核处理器 总览 先看这个 再往下看 SISD 并发就是;先执行一下该指令序列,再执行一下另外一个指令序列 并行就是:两个指令序列同时进行 在某个时间段内只能处理…

java设计模式学习之【状态模式】

文章目录 引言状态模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用状态示例代码地址 引言 设想你正在使用一个在线视频播放器观看电影。随着你的互动,播放器可能处于不同的状态:播放、暂停、缓冲或结束。每个状态下,播放…

ActiveMQ漏洞合集

目录 介绍CVE-2015-5254:Apache ActiveMQ任意代码执行漏洞漏洞介绍 & 环境准备漏洞发现Nuclei❌Vulmap✅漏洞验证漏洞利用 CVE-2016-3088:Apache ActiveMQ Fileserver远程代码执行漏洞漏洞发现Nuclei✅Vulmap✅MSF✅第三方工具1(漏洞探测…

腾讯云轻量应用服务器购买流程、搭建网站全流程超详细

腾讯云轻量应用服务器开箱即用、运维简单的轻量级云服务器,CPU内存带宽配置高并且价格特别便宜,大带宽,但是限制月流量。轻量2核2G3M带宽62元一年、2核2G4M优惠价118元一年,540元三年、2核4G5M带宽218元一年,756元3年、…

数据结构与算法:基于比较的排序算法:选择、冒泡、插入、归并的动图演示和java代码,排序时间复杂度、空间复杂度、稳定性总结表格

选择排序 选择排序是先在0~N-1上选择一个最小值排到最前面&#xff0c;然后再在1到N-1上选一个次小的&#xff0c;以此类推。 public static selectionSort(int[] arr){if(arrnull||arr.length<2){return;} //每次从i n-1 选一个最小的放前面for(int i0;i<arr.length-…

基于飞浆OCR的文本框box及坐标中心点检测JSON格式保存文本

OCR的文本框box及JSON数据保存 需求说明 一、借助飞浆框出OCR识别的文本框 二、以圆圈形式标出每个框的中心点位置 三、以JSON及文本格式保存OCR识别的文本 四、以文本格式保存必要的文本信息 解决方法 一、文本的坐标来自飞浆的COR识别 二、借助paddleocr的draw_ocr画出…

基于 AForge.Net 框架的扑克牌计算机视觉识别

© Conmajia 2012, Nazmi Altun 2011 Init. 24 May 2012 SN: 125.1 本文为翻译文章&#xff0c;已获原作者 Nazmi Altun 授权。 下载资源&#xff1a; 源代码&#xff08;148.6 KB&#xff09;、Demo&#xff08;3.1 MB&#xff09; 简介 &#xff08;图片上的字&#xf…

【Spring实战】09 MyBatis Generator

文章目录 1. 依赖2. 配置文件3. 生成代码4. 详细介绍 generatorConfig.xml5. 代码详细总结 Spring MyBatis Generator 是 MyBatis 官方提供的一个强大的工具&#xff0c;它能够基于数据库表结构自动生成 MyBatis 持久层的代码&#xff0c;包括实体类、Mapper 接口和 XML 映射文…

WPF项目创建HTTP WEB服务,不使用IIS业务 WPF桌面程序WebApi WPF 集成WebApi C# 创建HTTP Web API服务

在C# WPF应用程序中直接创建HTTP服务或WebAPI服务有以下优点&#xff1a; 自托管服务&#xff1a; 简化部署&#xff1a;无需依赖外部服务器或IIS&#xff08;Internet Information Services&#xff09;&#xff0c;可以直接在应用程序内部启动和运行Web服务。 集成紧密&…

工具系列:TimeGPT_(8)使用不规则时间戳进行时间序列预测

文章目录 介绍不规则时间戳的单变量时间预测不规则时间戳的外生变量时间预测 介绍 在处理时间序列数据时&#xff0c;时间戳的频率是一个关键因素&#xff0c;可以对预测结果产生重大影响。像每日、每周或每月这样的常规频率很容易处理。然而&#xff0c;像工作日这样的不规则…

【ARMv8M Cortex-M33 系列 2 -- Cortex-M33 JLink 连接 及 JFlash 烧写介绍】

文章目录 Jlink 工具JLink 命令行示例JFlash 烧写问题Jlink 工具 J-Link 是 SEGGER 提供的一款流行的 JTAG 调试器,它支持多个平台和处理器。JLink.exe 是 J-Link 调试器的命令行接口,它允许用户通过命令行执行一系列操作,例如编程、擦除、调试等。 工具链接: https://ww…

可运营的Leadshop开源商城小程序源码 +H5公众号+带视频教程

源码简介 Leadshop是一款出色的开源电商系统&#xff0c;具备轻量级、高性能的特点&#xff0c;并提供持续更新和迭代服务。该系统采用前后端分离架构&#xff08;uniappyii2.0&#xff09;&#xff0c;以实现最佳用户体验为目标。 前端部分采用了uni-app、ES6、Vue、Vuex、V…

使用Visual Studio 2022 winform项目打包成安装程序.exe

winform项目打包 1.安装扩展插件 Microsoft Visual Studio Installer Projects 20222.在解决方案上新建一个setup project 项目3.新建成功如下图&#xff0c;之后添加你的winform程序生成之后的debug下的文件4.在Application Folder上点击右键->Add->项目输出->主输出…

Echarts中饼图-实现放大显示数据

示例 代码演示 option {tooltip: {trigger: item},legend: {top: 5%,left: center},series: [{name: Access From,type: pie,radius: [40%, 70%],avoidLabelOverlap: false,label: {show: false,position: center},emphasis: {scale: true,//是否开启高亮后扇区的放大效果。s…

2024年HTML+CSS+JS 网页版烟花代码

&#x1f482; 个人网站:【 海拥】【神级代码资源网站】【办公神器】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交流的小伙伴&#xff0c;请点击【全栈技术交流群】 直接跳到末尾 获取完整源码 在线体验地址&…

磁盘管理与文件系统

步骤&#xff1a; 1.建立分区&#xff08;必须分区&#xff09; 在文件中的格式开头为b &#xff0c;块设备 2.文件系统 因公安是个硬件设备&#xff0c;是一类软件的总称&#xff0c;管理文件的功能&#xff0c;下载文件占硬盘的空间 3.挂载 将硬盘与系统内的文件夹做关…

华为OD机试 - 两个字符串间的最短路径问题(Java JS Python C)

题目描述 给定两个字符串,分别为字符串 A 与字符串 B。 例如 A字符串为 "ABCABBA",B字符串为 "CBABAC" 可以得到下图 m * n 的二维数组,定义原点为(0,0),终点为(m,n),水平与垂直的每一条边距离为1,映射成坐标系如下图。 从原点 (0,0) 到 (0,A) 为水…

从实际业务问题出发去分析Eureka-Server端源码

文章目录 前言1.EnableEurekaServer2.初始化缓存3.jersey应用程序构建3.1注册jeseryFilter3.2构建JerseyApplication 4.处理注册请求5.registry&#xff08;&#xff09; 前言 前段时间遇到了一个业务问题就是k8s滚动发布Eureka微服务的过程中接口会有很多告警&#xff0c;当时…

【队列】【实现构造函数和方法】Leetcode 903 最近的请求次数

【队列相关】【实现构造函数和方法】Leetcode 903 最近的请求次数 解法1 利用列表的相关操作 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- 解法1 利用列表的相关操作 1、新建类型为Queue<Integer>&#xff0c;表示…

原创AI图片可定制可商用

欢迎欣赏&#xff0c;一起交流学习。交流学习