MySQL进阶SQL语句之函数运用

news2024/12/26 21:30:36

目录

1.select(显示表格中一个或数个字段的所有数据记录)

2.distinct(不显示重复的数据记录)

3.where(有条件查询)

4.and 、or(且、或)

5. in(显示已知的值的数据记录)

6. between(显示两个值范围内的数据记录)

7.通配符

8.like(匹配一个模式来找出我们要的数据记录) 

9.order by(按关键字排序) 

10.数学函数

11.聚合函数

12.字符串函数

13.group by(汇总分组)

14.having(过滤由 GROUP BY 语句返回的记录集) 

15.别名(字段別名 表格別名) 

16. 子查询(在WHERE 子句或 HAVING 子句中插入另一个 SQL 语句)

17.exists(用来测试内查询有没有产生任何结果) 


准备两张表

use hello;
create table location (name char(20),sex char(20));
insert into location values('jack','male');
insert into location values('tony','female');
insert into location values('mary','male');
insert into location values('tom','female');

create table info (name char(20),age int(10),city char(10));
insert into info values('jack','23','nanjing');
insert into info values('tony','25','beijing');
insert into info values('mary','30','shanghai');
insert into info values('tom','70','nanjing');

1.select(显示表格中一个或数个字段的所有数据记录)

显示表格中一个或数个字段的所有数据记录
语法:SELECT "字段" FROM "表名";

select name from info;
select name,city from info;

2.distinct(不显示重复的数据记录)

不显示重复的数据记录
语法:SELECT DISTINCT "字段" FROM "表名";

select distinct city from info;

3.where(有条件查询)

有条件查询
语法:SELECT "字段" FROM "表名" WHERE "条件";

4.and 、or(且、或)

and  且
or   或
语法:SELECT "字段" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;

select name from info where age>23 and age<30;
select name from info where age>30 or age<25;
select name from info where age<25 or (age<60 and age>25);

5. in(显示已知的值的数据记录)

显示已知的值的数据记录
语法:SELECT "字段" FROM "表名" WHERE "字段" IN ('值1', '值2', ...);

select * from info where name in ('jack','mary');
select * from info where city in ('nanjing','beijing');

6. between(显示两个值范围内的数据记录)

显示两个值范围内的数据记录
语法:SELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';

select * from info where age between '24' and '60';

7.通配符

通常通配符都是跟 LIKE 一起使用的

% :百分号表示零个、一个或多个字符
_ :下划线表示单个字符

举例:

  • 'A_Z':所有以 'A' 起头,另一个任何值的字符,且以 'Z' 为结尾的字符串。例如,'ABZ' 和 'A2Z' 都符合这一个模式,而 'AKKZ' 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。
  • 'ABC%': 所有以 'ABC' 起头的字符串。例如,'ABCD' 和 'ABCABC' 都符合这个模式。
  • '%XYZ': 所有以 'XYZ' 结尾的字符串。例如,'WXYZ' 和 'ZZXYZ' 都符合这个模式。
  • '%AN%': 所有含有 'AN'这个模式的字符串。例如,'LOS ANGELES' 和 'SAN FRANCISCO' 都符合这个模式。
  • '_AN%':所有第二个字母为 'A' 和第三个字母为 'N' 的字符串。例如,'SAN FRANCISCO' 符合这个模式,而 'LOS ANGELES' 则不符合这个模式。

8.like(匹配一个模式来找出我们要的数据记录) 

匹配一个模式来找出我们要的数据记录
语法:SELECT "字段" FROM "表名" WHERE "字段" LIKE {模式};

select * from info where city like '%ji%';
select * from info where name like 't%';

9.order by(按关键字排序) 

按关键字排序
语法:SELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。

select * from info order by age;
select * from info order by age desc;

10.数学函数

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);

11.聚合函数

avg()返回指定列的平均值
count()返回指定列中非 NULL 值
min()返回指定列的最小值
max()返回指定列的最大值
sum()返回指定列的所有值之和
select avg(age) from info;
select count(distinct city) from info;

select max(age) from info;
select min(age) from info;
select sum(age) from info;

#count(列名) 只包括列名那一列的行数,在统计结果的时候,会忽略列值为 NULL 的行
select count(age) from info;
#count(*) 包括了所有的列的行数,在统计结果的时候,不会忽略列值为 NULL
select count(*) from info;

12.字符串函数

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 反转
select concat(city,name) from info where name='jack';

#如sql_mode开启了PIPES_AS_CONCAT,"||"视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法一样的
select city||' '||name from info where name='jack';

# substr(city,3) 将city的值从第3个字符开始截取
select substr(city,3) from info where name='jack';
# substr(city,3,4) 将city的值从第3个字符开始截取4个字段长度的值
select substr(city,3,4) from info where name='jack';

SELECT TRIM ([ [位置] [要移除的字符串] FROM ] 字符串);
#[位置]:的值可以为 LEADING (起头), TRAILING (结尾), BOTH (起头及结尾)。 
#[要移除的字符串]:从字串的起头、结尾,或起头及结尾移除的字符串。缺省时为空格。

# both 开头及结尾
select trim(both 'na' from 'nanjing');
select trim(both 'na' from 'nanjing');
# leading 开头 
select trim(leading 'nan' from 'nanjing');
# trailing 结尾
select trim(trailing 'jing' from 'nanjing');



# length() 统计字符串长度
select name,length(city) from info;
# replace() 替换原有字符
select name,replace(city,'nanjing','jinling') from info;

13.group by(汇总分组)

对GROUP BY后面的字段的查询结果进行汇总分组,通常是结合聚合函数一起使用的
GROUP BY 有一个原则,凡是在 GROUP BY 后面出现的字段,必须在 SELECT 后面出现;
凡是在 SELECT 后面出现的、且未在聚合函数中出现的字段,必须出现在 GROUP BY 后面

语法:SELECT "字段1", SUM("字段2") FROM "表名" GROUP BY "字段1";

select city from info group by city;

select city,sum(age) from info group by city order by sum(age) desc;

14.having(过滤由 GROUP BY 语句返回的记录集) 

用来过滤由 GROUP BY 语句返回的记录集,通常与 GROUP BY 语句联合使用
HAVING 语句的存在弥补了 WHERE 关键字不能与聚合函数联合使用的不足。
语法:SELECT "字段1", SUM("字段2") FROM "表格名" GROUP BY "字段1" HAVING (函数条件);

select city,sum(age) from info group by city having sum(age)>30;

15.别名(字段別名 表格別名) 

语法:SELECT "表格別名"."字段1" [AS] "字段別名" FROM "表格名" [AS] "表格別名";

select A.city region,sum(A.age) "number" from info A group by A.city;

16. 子查询(在WHERE 子句或 HAVING 子句中插入另一个 SQL 语句)

连接表格,在WHERE 子句或 HAVING 子句中插入另一个 SQL 语句
语法:SELECT "字段1" FROM "表格1" WHERE "字段2" [比较运算符] 				#外查询
(SELECT "字段1" FROM "表格2" WHERE "条件");

#可以是符号的运算符,例如 =、>、<、>=、<= ;也可以是文字的运算符,例如 LIKE、IN、BETWEEN
select sum(age) from info where name in (select name from location where sex='male');

17.exists(用来测试内查询有没有产生任何结果) 

用来测试内查询有没有产生任何结果,类似布尔值是否为真
#如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个 SQL 语句就不会产生任何结果。
语法:SELECT "字段1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");

select sum(age) from info where exists (select * from location where sex='male');
select sum(age) from info where exists (select * from location where sex='as');

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

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

相关文章

浅谈单线程和多线程的异同

前两天有个面试&#xff0c;面试官问了我一个单线程和多线程的问题&#xff0c;情境如下&#xff1a; 面试官&#xff1a;你对单线程和多线程有什么看法&#xff1f; 我&#xff1a; 面试官&#xff1a; 我&#xff1a; 面试官&#xff1a; 我 现在先让我们来了解一下进程…

WS协议—介绍及原理

举例来说&#xff0c;我们想了解今天的天气&#xff0c;只能是客户端向服务器发出请求&#xff0c;服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。 WebSocket 协议在2008年诞生&#xff0c;2011年成为国际标准。所有浏览器都已经支持了。它的最大特点就是&…

ms17_010(永恒之蓝)漏洞复现详细教程

如题&#xff0c;这是个漏洞复现的详细教程&#xff0c;本教程针对的系统是Windows7操作系统&#xff0c;其他系统请自行测试。 备注&#xff1a;教程会很详细&#xff0c;讲解会很明白&#xff0c;一文可以解决你的常见困难。 测试环境 kalilinux 192.168.1.109 &#xff08;…

Java设计模式之结构型-装饰器模式(UML类图+案例分析)

目录 一、基本概念 二、角色设计 三、代码实现 案例一 案例二 四、总结 一、基本概念 装饰器模式是指不必在改变原有的类和不使用继承的情况下&#xff0c;动态扩展一个对象的功能。 二、角色设计 角色描述抽象构件是一个接口或者抽象类&#xff0c;定义我们最核心的…

科技云报道:边缘计算步入“黄金年代”

科技云报道原创。 当前时点&#xff0c;AI大模型已经站在了从“玩具”向“工具”快速演化的关键迭代期。如何让大模型渗透进入各类垂直场景&#xff0c;如何更低成本的使用大模型&#xff0c;如何让更多场景与用户接触AI&#xff0c;成为了发展的下一个重点。 在AI向实际场景…

大数据应用——总结与反思

1.谈谈你对大数据行业的认识&#xff0c;目前对应的大数据岗位有哪些&#xff1f;每种岗位需要掌握哪些技能水平&#xff1f;目前自己的差距在哪里&#xff1f; &#xff08;1&#xff09;概述 对于大数据行业的认识&#xff0c;我的理解是&#xff0c;大数据是指海量数据&…

8种常见的SQL错误用法

前言&#xff1a;MySQL在2016年仍然保持强劲的数据库流行度增长趋势。越来越多的客户将自己的应用建立在MySQL数据库之上&#xff0c;甚至是从Oracle迁移到MySQL上来。但也存在部分客户在使用MySQL数据库的过程中遇到一些比如响应时间慢&#xff0c;CPU打满等情况。现将《Apsar…

Dumuz同步微信通讯录及常见问题

在Dumuz工具中&#xff0c;【微信通讯录同步】主要功能是从当前登录的微信上下载通讯录相关成员数据。 第1步&#xff1a; 打开应用【微信-消息批量发送】&#xff0c;在工具栏中点击【微信通讯录】如下图所示&#xff1a; 第2步&#xff1a; 进入【微信通讯录】 对话框&#…

【AUTOSAR】AUTOSAR开发工具链(九)----基于BTC的MIL/SIL测试操作说明(1)

一、BTC使用注意事项 1、安装成功后&#xff0c;在Edit->Preference->General->Compiler可以找到编辑器MSVC140 启动BTC&#xff1a;插入电子狗、选择与电子狗相匹配的License、选择相应的工具包 B2B就是MIL V SIL 适用于MBD开发的测试&#xff0c;单独SIL适用于手写…

【Jmeter教程】__将提取的参数并设置成全局变量(常用于提取token)

目录 一、提取参数 1、使用正则表达式提取器提取token 2、使用json提取器提取token 二、将提取参数设置成全局变量 三、常见问题 一、提取参数 1、使用正则表达式提取器提取token 查看登录响应参数找出token。图中token为 "ticketString": "ccf26b17-a96f…

深入理解MySQL主从配置原理

目录 1. MySQL主从复制原理工作原理 2. 主从配置步骤1: 配置主节点2: 备份主节点数据3: 配置从节点4: 启动主从复制 3.常见问题4. 需要考虑的一些因素 MySQL主从复制是一种数据库复制技术&#xff0c;通过将一个MySQL服务器&#xff08;主节点&#xff09;上的数据同步到其他My…

IP地点定位为什么有误差?

随着互联网的不断普及&#xff0c;人们对IP地点定位需求越来越多。然而&#xff0c;即便是在现代技术的支持下IP地点定位仍然存在误差。那么&#xff0c;IP地点定位为什么会出现误差呢&#xff1f; IP&#xff08;Internet Protocol&#xff09;地址是指互联网协议&#xff08;…

SpringCloudSpringcloudAlibaba

SpringCloud 一&#xff1a;微服务架构1.1 ESB1.2 微服务与微服务 二 &#xff1a;编写SpringCloud代码2.1 父模块SpringCloudDemo项目2.2 公共类模块SpringCloud-api项目2.3 消费模块SpringCloud-user-8001项目2.4 RestTemplate 三&#xff1a;注册中心&#xff1a;Eureka3.1 …

机器学习——Kmeans算法

一、实验目的 学习sklearn模块中的KMeans算法 二、实验内容 学习KMeans算法&#xff0c;了解模型创建、使用模型及模型评价等操作 三、实验原理或流程 实验原理&#xff1a; K-means算法是将样本聚类成k个簇(cluster)&#xff0c;具体算法描述如下: 1、随机选取k个聚类质…

春招上岸阿里,好多问题当场尬住!

一个粉丝&#xff0c;23年应届毕业生&#xff0c; 双非本科。最近他校招上岸了&#xff0c;拿到了阿里软件测试岗位的Offer。 他总结了一下面试题&#xff0c;感觉很多内容还是有难度的&#xff0c;尤其是对于应届生来说。下面是他整理的面试题&#xff0c;看看这种校招面试难…

sonarqube本地安装使用

sonarqube本地安装使用 sonarqube本地安装使用配置 官网网址&#xff1a;https://www.sonarqube.org/ 注意&#xff1a;sonarqube版本需要与jdk和数据库版本相对应&#xff0c;以及sonarqube对应电脑的位数 本案例中&#xff1a;JDK8、sonarqube7.6版本 在说明文档中可以…

svg图版绘制

推荐工具&#xff1a;Inkscape 绘制带折线的图版&#xff0c;使用左侧工具栏&#xff08;绘制贝塞尔曲线和直线&#xff09; 选中顶部&#xff08;创建一个直线段构成的折线&#xff09; 直接使用鼠标左键点对点进行绘制&#xff0c;停顿一次为一个坐标&#xff0c;鼠标右击…

软件测试技能,JMeter压力测试教程,setUp线程组实现用户先登录(八)

前言 在接口测试的时候&#xff0c;很多接口都需要用户先登录&#xff0c;才有访问接口的权限。在测试的时候&#xff0c;我们的关注点其实是当前测试的接口&#xff0c;登录只是一个前置操作 像 python 的 unittest 和 pytest 框架都有 setUp 的概念&#xff0c;前置操作用来…

探究物流机器人产业新发展

原创 | 文 BFT机器人 01 我国物流机器人发展现状 机器人人工智能加速了物流行业的发展&#xff0c;优化和提高了物流资源、物流流程和物流效率。 近年来&#xff0c;机器人相关产品和服务得到了快速推广&#xff0c;并经常应用于不同的存储和物流场景&#xff0c;如电子商务存储…

InternalAuthenticationServiceException: Invalid bound statement (not found):

InternalAuthenticationServiceException: Invalid bound statement (not found): 在项目中&#xff0c;我们会遇到如下问题&#xff0c;但是这个问题是一种常见的典型问题 org.springframework.security.authentication.InternalAuthenticationServiceException: Invalid boun…