热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Mysql进阶学习(三)排序查询与常见函数

Mysql进阶学习(三)排序查询与常见函数一、进阶3:排序查询1、语法:2、特点:3、排序方式3.1、按单个字




Mysql进阶学习(三)排序查询与常见函数


  • 一、进阶3:排序查询
    • 1、语法:
    • 2、特点:
    • 3、排序方式
      • 3.1、按单个字段排序
      • 3.2、添加筛选条件再排序
        • 案例:查询部门编号>=90的员工信息,并按员工编号降序

      • 3.3、按表达式排序
        • 案例:查询员工信息 按年薪降序

      • 3.4、按别名排序
        • 案例:查询员工信息 按年薪升序

      • 3.5、按函数排序
        • 案例:查询员工名,并且按名字的长度降序

      • 3.6、按多个字段排序
        • 案例:查询员工信息,要求先按工资降序,再按employee_id升序


    • 4、测试

  • 二、进阶4:常见函数
    • 1、常见函数概述
    • 2、字符函数
      • 2.1.length 获取参数值的字节个数
      • 2.2.concat 拼接字符串
      • 2.3.upper、lower
      • 2.4.substr、substring
      • 2.5.instr 返回子串第一次出现的索引,如果找不到返回0
      • 2.6.trim 从字符串的左侧和右侧去掉规定字符
      • 2.7.lpad 用指定的字符实现左填充指定长度
      • 2.8.rpad 用指定的字符实现右填充指定长度
      • 2.9.replace 替换

    • 3、数学函数
    • 4、日期函数
    • 5、其他函数
    • 6、流程控制函数
      • 6.1.if函数: if else 的效果
      • 6.2.case函数的使用一: switch case 的效果
      • 6.3.case 函数的使用二:类似于 多重if




文中用到的代码


一、进阶3:排序查询

1、语法:

select 查询列表
from 表名
where 筛选条件】
order by 排序的字段或表达式;

2、特点:



1、asc代表的是升序,可以省略 desc代表的是降序


2、order by子句可以支持 单个字段、别名、表达式、函数、多个字段


3、order by子句在查询语句的最后面,除了limit子句



3、排序方式


3.1、按单个字段排序

SELECT * FROM employees ORDER BY salary DESC;

在这里插入图片描述


3.2、添加筛选条件再排序


案例:查询部门编号>=90的员工信息,并按员工编号降序

SELECT *
FROM employees
WHERE department_id>=90
ORDER BY employee_id DESC;

在这里插入图片描述


3.3、按表达式排序


案例:查询员工信息 按年薪降序

SELECT *,salary*12*(1+IFNULL(commission_pct,0))
FROM employees
ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;

在这里插入图片描述


3.4、按别名排序


案例:查询员工信息 按年薪升序

SELECT *,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 ASC;

在这里插入图片描述


3.5、按函数排序


案例:查询员工名,并且按名字的长度降序

SELECT LENGTH(last_name),last_name
FROM employees
ORDER BY LENGTH(last_name) DESC;

在这里插入图片描述


3.6、按多个字段排序


案例:查询员工信息,要求先按工资降序,再按employee_id升序

SELECT *
FROM employees
ORDER BY salary DESC,employee_id ASC;

在这里插入图片描述


4、测试



1. 查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序
2. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序
3. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序


1. 查询员工的姓名和部门号和年薪,按年薪降序 按姓名升序

SELECT last_name,department_id,salary*12*(1+IFNULL(commission_pct,0)) 年薪
FROM employees
ORDER BY 年薪 DESC,LENGTH(last_name) ASC;

在这里插入图片描述


  1. 选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序

SELECT last_name,salary
FROM employees
WHERE salary NOT BETWEEN 8000 AND 17000
ORDER BY salary DESC;

在这里插入图片描述


  1. 查询邮箱中包含 e 的员工信息,并先按邮箱的字节数降序,再按部门号升序

SELECT * ,LENGTH(email) 邮箱
FROM employees
WHERE last_name LIKE '%e%'
ORDER BY 邮箱 DESC,department_id ASC;

在这里插入图片描述


二、进阶4:常见函数

概念:类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
好处:1、隐藏了实现细节
----------2、提高代码的重用性
调用:select 函数名(实参列表) 【from 表】;
特点:
①叫什么(函数名)
②干什么(函数功能)

分类:
1、单行函数
concat、length、ifnull
2、分组函数

功能:做统计使用,又称为统计函数、聚合函数、组函数

1、常见函数概述

字符函数:
length:获取字节个数(utf-8一个汉字代表3个字节,gbk为2个字节)
concat
substr
instr
trim
upper
lower
lpad
rpad
replace
数学函数:
round
ceil
floor
truncate
mod
日期函数:
now
curdate
curtime
year
month
monthname
day
hour
minute
second
str_to_date
date_format
其他函数:
version
database
user
控制函数
if
case

2、字符函数


2.1.length 获取参数值的字节个数

SELECT LENGTH('john');
SELECT LENGTH('张三丰hahaha');
SHOW VARIABLES LIKE '%char%'

2.2.concat 拼接字符串

SELECT last_name,
first_name,
CONCAT(last_name,'_',first_name) 姓名
FROM employees;

在这里插入图片描述


2.3.upper、lower

SELECT UPPER('john');
SELECT LOWER('joHn');

示例:将姓变大写,名变小写,然后拼接

SELECT last_name,
first_name,
CONCAT(UPPER(last_name),LOWER(first_name)) 姓名
FROM employees;

在这里插入图片描述


2.4.substr、substring

注意:索引从1开始
截取从指定索引处后面所有字符

SELECT SUBSTR('李莫愁爱上了陆展元',7) out_put;

在这里插入图片描述

截取从指定索引处指定字符长度的字符
从第一位开始截取三个长度的字符

SELECT SUBSTR('李莫愁爱上了陆展元',1,3) out_put;

在这里插入图片描述

案例:姓名中首字符大写,其他字符小写然后用_拼接,显示出来

SELECT CONCAT(UPPER(SUBSTR(last_name,1,1)),'_',LOWER(SUBSTR(last_name,2))) out_put
FROM employees;

在这里插入图片描述


2.5.instr 返回子串第一次出现的索引,如果找不到返回0

SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷八侠') AS out_put;

在这里插入图片描述

SELECT INSTR('杨不殷六侠悔爱上了殷六侠','殷六侠') AS out_put;

在这里插入图片描述


2.6.trim 从字符串的左侧和右侧去掉规定字符

从字符串中去空格

SELECT LENGTH(TRIM(' 张翠山 ')) AS out_put;

在这里插入图片描述
在这里插入图片描述

从字符串中除去前后的“aa”

SELECT TRIM('aa' FROM 'aaaaaaaaa张aaaaaaaaaaaa翠山aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa') AS out_put;

在这里插入图片描述


2.7.lpad 用指定的字符实现左填充指定长度

SELECT LPAD('殷素素',2,'*') AS out_put;

在这里插入图片描述


2.8.rpad 用指定的字符实现右填充指定长度

SELECT RPAD('殷素素',12,'ab') AS out_put;

在这里插入图片描述


2.9.replace 替换

SELECT REPLACE('周芷若周芷若周芷若周芷若张无忌爱上了周芷若','周芷若','赵敏') AS out_put;

在这里插入图片描述


3、数学函数

round 四舍五入

SELECT ROUND(-1.55);
**小数点后保留两位小树**
SELECT ROUND(1.567,2);

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

ceil 向上取整,返回>=该参数的最小整数

SELECT CEIL(-1.02);

在这里插入图片描述

在这里插入图片描述

floor 向下取整&#xff0c;返回<&#61;该参数的最大整数

SELECT FLOOR(-9.99);

在这里插入图片描述

truncate 截断 从小数点后第几位开始截断

SELECT TRUNCATE(1.69999,1);

在这里插入图片描述

mod取余

mod(a,b) &#xff1a; a-a/b*b
mod(-10,-3):-10- (-10)/(-3)*&#xff08;-3&#xff09;&#61;-1
SELECT MOD(10,-3);
SELECT 10%3;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


4、日期函数

在这里插入图片描述

now 返回当前系统日期&#43;时间

SELECT NOW();

在这里插入图片描述

curdate 返回当前系统日期&#xff0c;不包含时间

SELECT CURDATE();

在这里插入图片描述

curtime 返回当前时间&#xff0c;不包含日期

SELECT CURTIME();

在这里插入图片描述

可以获取指定的部分&#xff0c;年、月、日、小时、分钟、秒

SELECT YEAR(NOW());
SELECT YEAR(&#39;1998-1-1&#39;);
SELECT YEAR(hiredate)FROM employees;
SELECT MONTH(NOW());
SELECT MONTHNAME(NOW());

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

str_to_date 将字符通过指定的格式转换成日期

SELECT STR_TO_DATE(&#39;1998-3-2&#39;,&#39;%Y-%c-%d&#39;) AS out_put;

在这里插入图片描述

查询入职日期为1992–4-3的员工信息

SELECT * FROM employees WHERE hiredate &#61; &#39;1992-4-3&#39;;
SELECT * FROM employees WHERE hiredate &#61; STR_TO_DATE(&#39;4-3 1992&#39;,&#39;%c-%d %Y&#39;);

在这里插入图片描述

在这里插入图片描述

date_format 将日期转换成字符

SELECT DATE_FORMAT(NOW(),&#39;%y年%m月%d日&#39;) AS out_put;

在这里插入图片描述

查询有奖金的员工名和入职日期(xx月/xx日 xx年)

SELECT last_name,DATE_FORMAT(hiredate,&#39;%m月/%d日 %y年&#39;) 入职日期
FROM employees
WHERE commission_pct IS NOT NULL;

在这里插入图片描述


5、其他函数

查看当前数据库版本
SELECT VERSION();
查看当前使用的数据库
SELECT DATABASE();
查看当前用户
SELECT USER();

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述


6、流程控制函数


6.1.if函数&#xff1a; if else 的效果

实现三元运算符的效果
SELECT IF(10<5,&#39;大&#39;,&#39;小&#39;);
SELECT last_name,commission_pct,IF(commission_pct IS NULL,&#39;没奖金&#xff0c;呵呵&#39;,&#39;有奖金&#xff0c;嘻嘻&#39;) 备注
FROM employees;

在这里插入图片描述

在这里插入图片描述


6.2.case函数的使用一&#xff1a; switch case 的效果

java中
switch(变量或表达式){
case 常量1&#xff1a;语句1;break;
...
default:语句n;break;
}
mysql中
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1;
when 常量2 then 要显示的值2或语句2;
...
else 要显示的值n或语句n;
end

案例&#xff1a;查询员工的工资&#xff0c;要求

部门号&#61;30&#xff0c;显示的工资为1.1倍
部门号&#61;40&#xff0c;显示的工资为1.2倍
部门号&#61;50&#xff0c;显示的工资为1.3倍
其他部门&#xff0c;显示的工资为原工资

SELECT salary 原始工资,department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 40 THEN salary*1.2
WHEN 50 THEN salary*1.3
ELSE salary
END AS 新工资
FROM employees;

在这里插入图片描述


6.3.case 函数的使用二&#xff1a;类似于 多重if

java中&#xff1a;
if(条件1){
语句1&#xff1b;
}else if(条件2){
语句2&#xff1b;
}
...
else{
语句n;
}
mysql中&#xff1a;
case
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
。。。
else 要显示的值n或语句n
end

案例&#xff1a;查询员工的工资的情况



如果工资>20000,显示A级别
如果工资>15000,显示B级别
如果工资>10000&#xff0c;显示C级别 否则&#xff0c;显示D级别


SELECT salary,
CASE
WHEN salary>20000 THEN &#39;A&#39;
WHEN salary>15000 THEN &#39;B&#39;
WHEN salary>10000 THEN &#39;C&#39;
ELSE &#39;D&#39;
END AS 工资级别
FROM employees;

在这里插入图片描述







推荐阅读
  • 在使用 PHP 通过 SSL 安全连接到 MySQLi 数据库服务器时,遇到了一些技术难题。我的环境包括一个 Web 服务器和一个数据库服务器,两者均使用 OpenSSL 生成了证书。尽管证书内容一致,但在尝试从 Web 服务器使用 `mysql` 命令进行连接时,仍然遇到了问题。为了确保连接的安全性和稳定性,需要进一步检查证书配置和 PHP 的 SSL 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • 掌握 MongoDB 基础操作与实用技巧 ... [详细]
  • 程序连接MySQL数据库的多种方法详解 ... [详细]
  • MySQL 8.0 中的二进制日志格式详细解析及其官方文档参考。本文介绍了MySQL服务器如何使用不同的日志记录格式来记录二进制日志,包括早期版本中基于SQL语句的复制机制(即基于语句的日志记录)。此外,还探讨了其他日志记录方式,如基于行的日志记录和混合日志记录模式,并提供了配置和管理这些日志格式的最佳实践。 ... [详细]
  • Oracle培训(三十七)——深入解析Hibernate第三章:实体关联关系映射详解
    在本节Oracle培训中,我们将深入探讨Hibernate第三章的内容,重点讲解实体关联关系映射的详细知识点。首先,回顾了Hibernate的基本概念和映射基础,随后详细分析了不同类型的实体关联关系,包括一对一、一对多和多对多关系的映射方法及其应用场景。通过具体的示例和代码片段,帮助读者更好地理解和掌握这些复杂的映射技术。此外,还讨论了如何优化关联关系的性能,以及常见的问题和解决方案。 ... [详细]
  • MySQL 5.6 引入了全局事务标识符(GTID)和多线程复制机制,显著提升了数据库的可靠性和性能。GTID 作为一种新的事务标识方式,确保了事务在主从节点间的一致性,避免了传统基于日志位置的复制可能出现的问题。多线程复制则通过并行处理多个复制任务,大幅提高了复制效率,特别是在大型数据库环境中表现更为突出。这些新特性不仅增强了 MySQL 的高可用性和扩展性,还为数据库管理带来了更多灵活性和便利性。 ... [详细]
  • 简介springboot开启事务很简单,只需要一个注解Transactional就可以了。因为在springboot中已经默认对jpa、jdbc、mybatis开启了 ... [详细]
  • 2023年6月19日:重要日期回顾与展望
    13.1设置更改root密码更改MySQL数据库root密码1.首次进入数据库是不用密码的,如下所示: usrlocalmysqlbinmysql-uroot       使用绝对 ... [详细]
  • 基本信息:mysql版本:(product)root@localhost[(none)]>select@@version;+------------+|@@version ... [详细]
  • 在我的项目中,我访问MySQL数据库。我可以通过该程序在此数据库中调用并运行查 ... [详细]
  • Druid 连接池中出现 15 分钟延迟,疑似因 Socket 超时后重新建立连接所致
    2019独角兽企业重金招聘Python工程师标准背景在应用端通过mybatis的interceptor自定义Plugin拦截Executor,统计输出sql的执行耗时。今天生 ... [详细]
  • 在编写SQL查询时,常遇到某些语句无法调用别名的问题。这主要是因为SQL和MySQL中的别名机制存在差异所致。为避免类似错误再次发生,本文汇总了相关技术资料,详细解析了别名调用的限制及其背后的原理,提供了实用的解决方案和最佳实践建议。 ... [详细]
  • 在本文中,我们将深入探讨Android数据库操作中的表清理及CRUD(创建、读取、更新、删除)功能。具体涉及表结构的设计,包括字段如 `store_id`、`store_name`、`store_area_id` 和 `store_area_name` 等,并详细讲解如何通过SQL语句实现这些操作,以提高数据管理的效率和准确性。此外,我们还将讨论如何优化数据库性能,确保应用在处理大量数据时仍能保持流畅运行。 ... [详细]
  • 优化Django应用中的MySQL连接池配置方法
    django设置mysql连接池 导库 pipinstalldjango-db-connection-poolsettings.py设置 将ENGINEdjango.db.back ... [详细]
  • SpringDataJPA是SpringBoot体系中约定优于配置的最佳实现,大大简化了项目中数据库的操作。从本课开始将会从JPA的由来开始讲解,什么是JPA、SpringBoot ... [详细]
author-avatar
ii贵妇狗_156
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有