mysql加强(2)~单表查询、mysql查询常用的函数

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: mysql加强(2)~单表查询、mysql查询常用的函数

一、单表查询:

■ 语法:

SELECT [DISTINCT] *|字段 [别名] [,字段[别名]]

FROM 表名称 [别名]

[WHERE 条件(s)]

[ORDER BY 字段 [ASC|DESC] [, 字段 [ASC|DESC], ...]]


★ 注意:mysql报错信息,一般关键字报错,它就没有提示,但是表名、字段名出错,它会提示不存在。
★ 注意:总结一下DQL查询语句的执行顺序:【哪一张表 from,过滤不合法数据 where,显示 select,排序 order by,分页 limit


18.png


1、全列/投影查询:

■ 全列查询--查询表中所有信息, 投影查询-查询某些列


2、消除重复: select 后加上关键字 distinct


19.png


3、算术操作符(加减乘除)、常用的查询(比较、范围between...and、逻辑not and or、集合in、模糊like):

(1) 算术操作符(加减乘除):

★ 注意数值与null直接加减乘除会变成null
  • 解决:使用函数 IFNULL(expr1, expr2) 当expr1 不为null, 则返回值为expr1, 否则返回值为expr2.
  • 至于IFNULL函数的返回值是字符串还是数字根据具体语境决定。


20.png


#注意数值与null直接加减乘除会变成null---使用IFNULL函数解决,当COMM为空时,返回0
SELECT ENAME, SAL, COMM, (IFNULL(COMM, 0) + SAL) 'year_income'  FROM emp;


■ 空值(不可用、未分配的值,即没有值):
  • 空值不等于0,也不等于空格
  • 任意类型度都支持空值,即任意类型的字段都可以允许有空值作为值的存在。
  • 注意:包含空值的任何算术表达式都等于空


(2) 常用的查询(比较、范围between...and、逻辑not and or、集合in、模糊like查询):

  • 比较运算符 = != <> > < >= <=
  • 范围查询 between ... and (包含开头和结尾) not between ... and
  • 逻辑查询 not and or (注意优先级:not > and > or
  • 集合查询 in 列出匹配的值,在元素集合内【in 还常用来批量删除】 not in
  • 模糊查询 like 匹配字符串模式,必须搭配通配符号一起使用【%:任意字符, _:占一个字符位置】
  • 空值查询 is null 是否为空 is not null


#============between ... and (包含开头和结尾)    not between ... and 的查询情况===============
#查询1981年之后入职的员工信息
select * from emp where hiredate >= '1982-01-01';
#查询工资不在2000-3000之间的员工信息
select * from emp where sal not between 2000 and 3000; 
#=============in 列出匹配的值,在元素集合内【in 还常用来批量删除】的查询情况==============
#查询员工工资为800或1600或3000
select * from emp where sal = 800 or sal = 1600 or sal = 3000;
select * from emp where sal in (800, 1600, 3000); #in 在元素集合内
select * from emp where sal not in (800, 1600, 3000); #not in 在元素集合内
# in 还常用来批量删除
delete from ** from where id in (1, 2, 3, 4, 5, 6);
#==============like搭配通配符% | _ 使用的查询情况==============
#查询出所有员工名字以A开头的所有员工信息
select ename  from emp where ename like 'A%';
#查询出所有员工名字第二个字母是M的所有员工信息
select ename  from emp where ename like '_M%';
#查询出所有员工名字任意位置上包含字母A的所有员工信息
select ename  from emp where ename like '%A%';


■ 优先级 and 大于 or的例子[查询条件有or同时有and的要注意,or是不是要括号括起来,避免and优先级过高,抢了or的条件]:


21.png


#查询职位是clerk或是salesman的全部信息,并且要求工资在1000以上
select * from emp where (job = 'clerk' or job = 'salesman') and sal > 1000;


4、空值判断 is null | is not null

■ 注意不是用的等号,而是关键字 is

SELECT `ENAME` FROM emp WHERE COMM IS NULL;     #SELECT `ENAME` FROM emp WHERE COMM IS NOT NULL;


5、限定查询(条件查询)where:

■ 注意:
  • 字符串和日期要用单引号括起来
  • 数字类型的直接书写
  • 字符串大小写不敏感,字符串想要大小写敏感--加关键字 binary
  • 日期值格式敏感


(1)字符串想要大小写敏感--加关键字 binary


22.png

23.png


(2)日期值格式敏感:


24.png


6、结果排序 order by:

■ 执行顺序在select 之后

  • asc 升序 desc 降序
  • order by 可以使用别名
#查询所有员工信息,按照部门序号升序,年薪降序
select deptno, (sal * 12) year_income from emp order by deptno asc, year_income desc;


★ 注意:总结一下DQL查询语句的执行顺序:【哪一张表 from,过滤不合法数据 where,显示出来 select,进行排序 order by,分页 limit


二、mysql查询常用的函数

1、多行函数(统计函数/聚集函数):sum()、avg()、min()、max()

  • count()函数,在计算时,空值不计入。

■ 注意:分组函数在计算时省略列中的空值,不能在where语句中使用分组函数。


2、单行函数(字符函数、数字函数、日期函数、转换函数)

(1)字符函数:【重点是concat()拼接字符串函数】

lower/upper、`concat`、length、char_length、lpad/rpad(取到固定字符串,不够补满)、trim/ltrim、

❀ concat:返回结果为连接参数产生的字符串若任何一个参数是null,则返回结果为null。


25.png


  • ✿ concat 常用于拼接字符串, keyword = abc, where name like? ?: concat('%', keyword, '%'); --> where name like '%abc%';
select concat('my', 'name', 'is', 'kangkang');
select concat(ename, '的工作是', job) from emp;


  • replace(str, from_str, to_str) 将字符串str中的子字符串to_str替换成from_str.
select replace('www.mysql.com', 'w', 'hi');

26.png


  • substring(str, pos) 从哪个位置开始截取子字符串 substring(str, pos,len) 从哪个位置开始截取多长的子字符串
select substring('www.baidu.com', 4);
select substring('www.baidu.com', 4, 3);


(2)数字函数:

abs 绝对值函数、mod 取模、ceil、floor、round、truncate 舍去小数点后几位


✿(3)日期函数:

① now、adddate/date_add日期加法函数、subdate/date_sub 日期减法函数、current_date/current_time 当前系统日期/时间、

datediff日期天数差

② 获取日期时间中的某个段:day、hour、minute、month、year、last_day

■ 例如:select day(日期); select day(now()); select sname from t_stu where year(birthday) = '2000';

③ unix_timestamp 时间撮(将日期转成秒的形式) from_unixtime 将时间撮转成日期形式


  • date_add方法 日期加法函数 date_add(date, interval expr type):
select date_add('1981-01-22', interval 10 day);
select date_add('1981-01-22', interval 10 month);
select date_add('1981-01-22', interval 10 year);

27.png28.png


  • datediff 日期差函数【单位天数】:

29.png



  • unix_timestamp 时间撮(将日期转成秒的形式) from_unixtime 将时间撮转成日期形式
select unix_timestamp(now()), from_unixtime(1643127519, '%y-%m-%d %h:%m:%s'), from_unixtime(1643127519, '%Y-%M-%D %H:%M:%S');

30.png


✿(4)转换函数:

① 数字和字符串 format函数:将数字转成字符串

format(x,d) x是数字,d是要保留的小数位(四舍五入)


② ✿ 日期和字符串 date_format 和 str_to_date

  • date_format(date, format) 日期转成字符串:
select date_format(now(), '%Y-%m-%d');


■ 注意: 格式 'yyyy-MM-dd HH:mm:ss' 是java的时间格式,mysql时间格式如下表:

31.png


str_to_date(str, format) 将字符串转成日期函数

# 注意细节:字符串的时间使用的连接符与format格式连接符要一致
select str_to_date('2022/01/25', '%Y/%m/%d'), str_to_date('2022-01-25', '%Y-%m-%d');
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
|
3天前
|
SQL 关系型数据库 MySQL
MySQL 窗口函数详解:分析性查询的强大工具
MySQL 窗口函数从 8.0 版本开始支持,提供了一种灵活的方式处理 SQL 查询中的数据。无需分组即可对行集进行分析,常用于计算排名、累计和、移动平均值等。基本语法包括 `function_name([arguments]) OVER ([PARTITION BY columns] [ORDER BY columns] [frame_clause])`,常见函数有 `ROW_NUMBER()`, `RANK()`, `DENSE_RANK()`, `SUM()`, `AVG()` 等。窗口框架定义了计算聚合值时应包含的行。适用于复杂数据操作和分析报告。
36 11
|
6天前
|
存储 关系型数据库 MySQL
mysql怎么查询longblob类型数据的大小
通过本文的介绍,希望您能深入理解如何查询MySQL中 `LONG BLOB`类型数据的大小,并结合优化技术提升查询性能,以满足实际业务需求。
36 6
|
12天前
|
SQL 关系型数据库 MySQL
MySQL常见函数第二期,你都用过哪些呢 ?
本期介绍了20个常用的MySQL函数,涵盖日期处理(如CURDATE()、DATE_FORMAT())、数学运算(如ABS()、ROUND())、统计分析(如COUNT()、SUM())等,帮助提高SQL查询效率和数据处理能力。希望对大家的学习有所帮助。
56 7
|
14天前
|
关系型数据库 MySQL
MySQL常见函数第一期,你都用过哪些呢 ?
本期介绍10个常用的MySQL函数:字符串连接(CONCAT)、提取子字符串(SUBSTRING)、获取字符串长度(LENGTH)、转换大小写(UPPER、LOWER)、去除空格(TRIM)、替换字符串(REPLACE)、查找子字符串位置(INSTR)、带分隔符的字符串连接(CONCAT_WS)以及获取当前日期时间(NOW)。
55 8
|
15天前
|
数据采集 关系型数据库 MySQL
MySQL常用函数:IF、SUM等用法
本文介绍了MySQL中常用的IF、SUM等函数及其用法,通过具体示例展示了如何利用这些函数进行条件判断、数值计算以及复杂查询。同时,文章还提到了CASE WHEN语句和其他常用函数,如COUNT、AVG、MAX/MIN等,强调了它们在数据统计分析、数据清洗和报表生成中的重要性。
|
19天前
|
关系型数据库 MySQL 数据处理
【MySQL】函数
MySQL 提供了丰富的函数集,涵盖字符串处理、数值运算、日期时间操作和聚合计算等多个方面。这些函数在日常数据库操作中极为重要,通过合理使用这些函数,可以大大提高数据处理和查询的效率。用户还可以通过自定义函数,扩展 MySQL 的功能以满足特定需求。
26 3
|
21天前
|
关系型数据库 MySQL 数据处理
MySQL函数与约束
MySQL 提供了丰富的函数和强大的约束机制,用于数据处理和完整性维护。通过掌握这些工具,可以有效地管理和分析数据库中的数据,确保数据的一致性和准确性。无论是在日常数据查询中使用内置函数,还是在数据库设计中应用各种约束,都是确保数据库系统稳定、高效运行的关键。希望本文对您理解和应用 MySQL 函数与约束有所帮助。
27 1
|
1月前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
60 9
|
1月前
|
缓存 监控 关系型数据库
如何优化MySQL查询速度?
如何优化MySQL查询速度?【10月更文挑战第31天】
80 3