【MySQL】查询语句:条件、排序和分页

基本查询

MySQL 数据库使用SELECT语句来查询数据。

查询字段

  • 以下为在MySQL数据库中查询数据通用的 SELECT 语法:
SELECT 字段名,字段名... FROM 表名;
  • 选择全部列
SELECT * FROM emp;	-- 查询所有字段

在这里插入图片描述

一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘*’。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。

  • 选择指定的列
SELECT empno,ename,job FROM emp;

在这里插入图片描述

列(字段)别名

在很多情况下为了方便查看结果或者简化字段名,会对查询的字段取别名。

  • 语法:
SELECT 字段1 [AS 别名],字段2 [AS 别名]... FROM 表名;
  • 举例一:
    通过直接在选择的列或表后面提供别名
SELECT empno 员工编号,ename 员工姓名,job 工作 FROM emp;

在这里插入图片描述

  • 举例二:
    使用AS关键字为查询结果的列或表取别名
SELECT empno AS 员工编号,ename AS 员工姓名,job AS 工作 FROM emp;
  • 举例三:
    还可以用单引号或双引号把别名包裹起来。
SELECT empno AS "员工编号",ename AS "员工姓名",job AS "工作" FROM emp;	-- 用双引号包裹别名SELECT empno AS '员工编号',ename AS '员工姓名',job AS '工作' FROM emp;	-- 用单引号包裹别名

当别名中包含空格时,必须用单引号或双引号进行包裹!如下:

SELECT empno AS 员工 编号 FROM emp;

会直接报错:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '编号 FROM emp' at line 1

SELECT empno AS "员工 编号" FROM emp;

在这里插入图片描述

DISTINCT去重

从表中查询数据时,可能会收到重复的行记录。为了删除这些重复行,可以在SELECT语句中使用DISTINCT子句。

  • 语法
SELECT DISTINCT 字段列表 FROM 表名;
单列中使用 DISTINCT

查询员工表(emp)中所有员工的岗位(job)有哪些。

SELECT job FROM emp;

执行SQL语句,得到如下结果:
在这里插入图片描述

可看到上面结果中,有些结果是重复的,比如:SALESMANMANAGER为了做到相同的结果只显示一个就要删除重复的记录,将DISTINCT子句添加到SELECT语句中即可

SELECT DISTINCT job FROM emp;

查询到的结果如下:
在这里插入图片描述

可以看到,当使用DISTINCT子句时,重复的job被消除了。

多列中使用 DISTINCT
  • 举例二:查询员工表(emp)中,job对应的部门(deptno),去掉重复记录
SELECT DISTINCT job,deptno FROM emp;

在这里插入图片描述

这里会发现job或者deptno中会有重复,但是这个并没有问题DISTINCT是删除重复的行,这里并没有哪一行是重复的。

注意DISTNCT关键字必须写在所有字段之前

空值参与运算

先来一个查询案例,查询员工年薪,即 (sal+comm)* 12。

SELECT ename,(sal + comm)*12 AS '年薪' FROM emp;

查询结果集如下:
在这里插入图片描述

发现有很多员工的年薪竟然是NULL,白干一年!这是为啥呢,emp表中每个员工都是有薪资的,只不过不是所有员工都有奖金,有的是NULL。当NULL值参与运算时,计算的结果一定是NULL,所以要对NULL进行处理!

在这里插入图片描述

SELECT ename,sal + IFNULL(comm,0)*12 AS '年薪' FROM emp;

IFNULL(expr, value_if_null)是一个处理NULL值的函数expr是要处理的表达式,而value_if_null是表达式为NULL时的值,这样就不会出现被公司白嫖一年的情况了。
在这里插入图片描述

注意:空值不等于任何值,甚至不等于NULL。
要想判断是不是NULL值,必须使用IS NULL

SELECT NULL IS NULL;

查询常数

在使用MySQL进行数据查询时,经常需要加入一列常数来进行特定的计算或筛选。通过在SELECT语句中使用常数值和别名,可以方便地在查询结果中添加一列常数。

比如,我们想对emp表中的员工姓名进行查询,同时增加一列字段corporation,这个字段固定为“XX公司”,可以这样写:

SELECT 'XX公司' AS 'corporation',ename FROM emp;

在这里插入图片描述

条件查询

从 MySQL 表中使用 SELECT 语句来查询数据,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

语法

SELECT column1, column2, ...
FROM table_name
WHERE condition;

在条件中,可以使用以下基本的比较操作符进行比较也可以用下面的逻辑运算符连接多个条件

运算符表

关系运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<=>安全等于
<> 或 !=不等于
逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 ||或者(多个条件任意成立一个)
NOT 或 !非,不是
XOR逻辑异或 (一真一假才为真)
其他功能
BETWEEN…AND…在某个范围之间(含最小、最大值)
[NOT] IN(…)在in之后的列表中的值,多选一
LIKE模糊匹配(_匹配单个字符,%匹配任意个字符)
IS [NOT] NULL是 NULL
REGEXP正则表达式运算符
RLIKE正则表达式运算符
LEAST最小值运算符
GREATEST最大值运算符
查询需求
  1. 查询工资等于3000的员工
SELECT * FROM emp WHERE emp.sal<3000;

在这里插入图片描述

  1. 查询没有奖金的员工
SELECT * FROM emp WHERE emp.comm IS NULL;

在这里插入图片描述

  1. 查询工资在1200到1800之间的员工(包含1200和1800岁)
SELECT * FROM emp WHERE emp.sal BETWEEN 1200 AND 1800;

在这里插入图片描述

  1. 查询职位为推销员,且工资小于1500的员工
SELECT * FROM emp WHERE emp.sal BETWEEN 1200 AND 1800 && emp.job='SALESMAN';
  1. 查询姓名为四个字的员工
SELECT * FROM emp WHERE emp.ename LIKE '____';
#'____'是四个连续的下划线,注意下划线之间不要有空格

在这里插入图片描述

  1. 查询姓名最后一位是S的员工
SELECT * FROM emp WHERE emp.ename LIKE '%S';

在这里插入图片描述

排序查询

通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,在 MySQL 中,你可以使用 ORDER BY 子句对查询结果进行排序。ORDER BY 允许你按照一个或多个列的值对结果进行升序(ASC)或降序(DESC)排序。

语法

SELECT 字段名 FROM 表名 ... ORDER BY 排序字段名 [ASC|DESC],[排序字段名 [ASC|DESC]];

语法说明:

  • 排序字段名:表示需要排序的字段名称,多个字段时用逗号隔开。
  • ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC为默认值。

特点

  • ORDER BY子句一般放到查询语句的最后面,LIMIT字句除外。
  • 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待。在语句后加上NULLS LAST空值会最后出现。
  • ORDER BY 指定多个字段进行排序时,MySQL 会按照字段的顺序从左到右依次进行排序。
  • 注意:在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。

查询需求

  1. 根据姓名对员工进行排序(升序)
SELECT * FROM emp ORDER BY emp.ename ASC;
  1. 查询入职时间大于1981年6月6日的员工信息,并按照入职时间升序排列
SELECT * FROM emp WHERE emp.hiredate>'1981-6-6' ORDER BY emp.hiredate ASC;

在这里插入图片描述

  1. 根据工作职位,进行升序排列,职位相同的情况下,再根据入职时间降序排列
SELECT * FROM emp ORDER BY emp.job ASC , emp.hiredate DESC;

在这里插入图片描述

分页查询

对于比较多的数据,如果在一个页面全部显示,查看起来会眼花缭乱。

进行分页查询有两种写法,如下所示:

LIMIT

SELECT 字段名 FROM 表名 LIMIT 起始索引,查询记录数;
SELECT column1, column2, ...
FROM table_name
LIMIT 20 OFFSET 10;
#这将返回从第 21 条记录开始的下 10 条记录

LIMIT OFFSET

SELECT 字段名 FROM 表名 LIMIT 查询记录数 OFFSET 起始索引;
User
SELECT column1, column2, ...
FROM table_name
LIMIT 20 offset 10;
#这将返回从第11条记录开始的后续20条记录

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

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

相关文章

消防主机报故障时发出故障及原因及解决办法!

本文以青鸟消防JBF-11SF为例。 其他型号或品牌的消防主机也可参考。 开机前&#xff0c;必须先测量系统接线的绝缘电阻&#xff0c;确保各绝缘电阻满足以下要求&#xff1a; 1&#xff09;空载时各电路信号线之间的绝缘值应大于5K欧姆。 2&#xff09;正常天气条件下&#x…

Java SE:反射

反射作用 获取字节码文件里面的所有信息&#xff0c;包括构造方法、成员、成员方法&#xff0c;以及修饰他们的修饰符、类型和方法的返回值等等&#xff0c;只要是类里面的内容都能获取&#xff0c;获取之后可以动态的调用方法&#xff0c;动态的创建对象 获取类字节码文件对象…

2024全国水科技大会暨新材料在水污染防治中的应用论坛(十)

召集人&#xff1a;唐 量 上海大学环境与化学工程学院教授 庄赞勇 福州大学材料科学与工程学院教授 一、会议背景 为积极应对“十四五”期间我国生态环境治理面临的挑战&#xff0c;加快生态环境科技创新&#xff0c;构建绿色技术创新体系&#xff0c;全面落实科学技术部、生…

点云数据结构化与体素化理论学习

一、PCD点云数据存储格式的进一步认识 &#xff08;一&#xff09;PCD点云存储格式相较于其它存储格式&#xff08;如PLY、STL、OBJ、X3D等&#xff09;的优势[1] &#xff08;1&#xff09;具有存储和处理有组织的点云数据集的能力&#xff0c;这对于实时应用和增强现实及机器…

20240302-1-ZooKeeper面试题(三)

21. 集群最少要几台机器&#xff0c;集群规则是怎样的? 集群规则为 2N1 台&#xff0c;N>0&#xff0c;即 3 台。 22. 集群支持动态添加机器吗&#xff1f; 其实就是水平扩容了&#xff0c;Zookeeper 在这方面不太好。两种方式&#xff1a;第 62 页 共 485 页全部重启&a…

苍穹外卖学习 Day10 Day11 Day12

前言 用于记录苍穹外卖Day10、Day11、Day12的学习 Day10 订单状态定时处理 来电提醒 客户催单 订单状态定时处理 Spring Task Spring Task是一个任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑&#xff08;定时自动执行某段Java代码&#xff09; cron表…

代码随想录算法训练营第三十天| 回溯篇总结

文章目录 前言一、组合问题二、切割问题三、子集问题四、排列问题五、性能分析总结 前言 回溯法就是暴力搜索&#xff0c;并不是什么高效的算法&#xff0c;最多再剪枝一下。 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合 排列问题&#xff1a;N个数按一定规则全…

【黑马程序员】STL之set和map容器

文章目录 set/multiset容器set基本概念简介区别 set的构造和赋值功能描述函数原型代码示例运行结果 set的大小和交换功能描述函数原型代码示例运行结果 set的插入和删除功能描述函数原型代码示例运行结果 set查找和统计函数原型代码示例运行结果 set和multiset区别区别代码示例…

JVM(6)

JMM JVM定义了一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果.在此之前,C/C直接使用物理硬件和操作系统的内存模型,因此,会由于不同平台下的内存模型差异,有可能导致程序在一套平台上并发完全正常,而在另…

深入解剖指针(4)

个人主页&#xff08;找往期文章包括但不限于本期文章中不懂的知识点&#xff09;&#xff1a; 我要学编程(ಥ_ಥ)-CSDN博客 目录 回调函数 qsort使用举例 使用qsort函数排序整型数据 使用qsort排序结构数据 qsort函数的模拟实现 回调函数 回调函数就是一个通过函数指…

《Spring Security 简易速速上手小册》第10章 未来趋势与高级话题(2024 最新版)

文章目录 10.1 云原生安全性趋势10.1.1 基础知识10.1.2 重点案例&#xff1a;保护微服务通信10.1.3 拓展案例 1&#xff1a;容器安全最佳实践10.1.4 拓展案例 2&#xff1a;自动化安全审计和合规性检查 10.2 反应式编程与 Spring Security10.2.1 基础知识10.2.2 重点案例&#…

nginx-图片模块

./configure --with-http_image_filter_module location / {root html;index index.html index.htm;if ($arg_w "") {set $arg_w -;}if ($arg_h "") {set $arg_h -;}image_filter resize $arg_w $arg_h;image_filter_jpeg_quality 95; } 访问: 1234…

CSS锥形渐变:conic-gradient()

画一个扇形图&#xff0c;使用常规方法可能很难画&#xff0c;但是用锥形渐变的话非常好画 <style>.pattern{width: 100px; height: 100px;border-radius: 50%;background: conic-gradient(yellow 30deg , black 30deg , black 90deg , yellow 90deg ,yellow 150d…

Git分布式版本控制系统——git学习准备工作

一、Git仓库介绍 开发者可以通过Git仓库来存储和管理文件代码&#xff0c;Git仓库分为两种&#xff1a; 本地仓库&#xff1a;开发人员自己电脑上的Git仓库 远程仓库&#xff1a;远程服务器上的Git仓库 仓库之间的运转如下图&#xff1a; commit&#xff1a;提交&#xff…

Decoupled Knowledge Distillation解耦知识蒸馏

Decoupled Knowledge Distillation解耦知识蒸馏 现有的蒸馏方法主要是基于从中间层提取深层特征&#xff0c;而忽略了Logit蒸馏的重要性。为了给logit蒸馏研究提供一个新的视角&#xff0c;我们将经典的KD损失重新表述为两部分&#xff0c;即目标类知识蒸馏&#xff08;TCKD&a…

c++之旅——第四弹

大家好啊&#xff0c;这里是c之旅第三弹&#xff0c;跟随我的步伐来开始这一篇的学习吧&#xff01; 如果有知识性错误&#xff0c;欢迎各位指正&#xff01;&#xff01;一起加油&#xff01;&#xff01; 创作不易&#xff0c;希望大家多多支持哦&#xff01; 本篇文章的主…

如何对比 MySQL 主备数据的一致性?

随着业务范围的扩大&#xff0c;很多企业为了保障核心业务的高可用性&#xff0c;选择了 MySQL 主从架构&#xff0c;这一套方案通常具备主备数据同步、数据备份与恢复、读写分离、高可用切换等特性&#xff0c;是一种相当成熟可靠的数据库架构方案。然而这套方案在特定情况下可…

Redis小白入门教程

Redis入门教程 1. Redis入门1.1 Redis简介1.2 Redis服务启动与停止1.2.1 Redis下载1.2.2 服务启动命令1.2.3 客户端连接命令1.2.4 修改Redis配置文件 2. Redis数据类型2.1 五种常用数据类型介绍2.1.1 字符串操作命令2.1.2 哈希操作命令2.1.3 列表操作命令2.1.4 集合操作命令2.1…

双周回顾#006 - 这三个月

断更啦~~ 上次更新时间 2023/11/23, 断更近三个月的时间。 先狡辩下&#xff0c;因为忙、着实忙。因为忙&#xff0c;心安理得给断更找了个借口&#xff0c;批评下自己~~ 这三个月在做啥&#xff1f;跨部门援助&#xff0c;支援公司互联网的 ToC 项目&#xff0c;一言难尽。 …

【C语言】InfiniBand 驱动mlx4_ib_init和mlx4_ib_cleanup

一、中文讲解 这两个函数是Linux内核模块中对于Mellanox InfiniBand 驱动程序初始化和清理的函数。 mlx4_ib_init()函数是模块初始化函数&#xff0c;使用__init宏标注&#xff0c;表示该函数只在模块加载时运行一次。 函数执行的步骤如下&#xff1a; 1. 通过alloc_ordered_w…