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

news2024/9/22 3:59:37

基本查询

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.coloradmin.cn/o/1484403.html

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

相关文章

React入门之React_使用es5和es6语法渲染和添加class

React入门 //react的核心库 <script src"https://cdn.jsdelivr.net/npm/react17/umd/react.development.js"></script> //react操作dom的核心库&#xff0c;类似于jquery <script src"https://cdn.jsdelivr.net/npm/react-dom17/umd/react-dom.…

【知识分享】配电网重构知识及matlab实现

目录 一、理论分析 二、程序介绍 1.基本环矩阵M的matlab代码 2.智能算法重构代码 三、下载链接 配网重构中&#xff0c;很重要的一个约束条件为配网应随时保持开环、辐射的状态&#xff1a; 配电网系统是属于闭环设计但是开环运行的系统&#xff0c;因此&#xff0c;在开关…

考取ORACLE数据库OCP的必要性 Oracle数据库

OCP证书是什么&#xff1f; OCP&#xff0c;全称Oracle Certified Professional&#xff0c;是Oracle公司的Oracle数据库DBA&#xff08;Database Administrator&#xff0c;数据库管理员)认证课程。这是Oracle公司针对数据库管理领域设立的一项认证课程&#xff0c;旨在评估和…

Java ZooKeeper-RocketMQ 面试题

Java ZooKeeper-RocketMQ 面试题 前言1、谈谈你对ZooKeeper的理解 &#xff1f;2、Zookeeper的工作原理&#xff08;Zab协议&#xff09;3、谈谈你对分布式锁的理解&#xff0c;以及分布式锁的实现&#xff1f;4、 zookeeper 是如何保证事务的顺序一致性的&#xff1f;5、 zook…

Unity 向量计算、欧拉角与四元数转换、输出文本、告警、错误、修改时间、定时器、路径、

using System.Collections; using System.Collections.Generic; using UnityEngine;public class c2 : MonoBehaviour {// 定时器float t1 0;void Start(){// 向量Vector3 v1 new Vector3(0, 0, 2);Vector3 v2 new Vector3(0, 0, 3);// 计算两个向量的夹角Debug.Log(Vector3…

Netty的InboundHandler 和OutboundHandler

一、InboundHandler 和OutboundHandler的区别 在Netty中&#xff0c;"inbound"表示来自外部来源&#xff08;如网络连接&#xff09;的数据&#xff0c;而"outbound"则表示从应用程序发送到外部目标&#xff08;如网络连接或其他服务&#xff09;的数据。…

如何使用 CrewAI 构建协作型 AI Agents

一、前言 AI Agents 的开发是当前软件创新领域的热点。随着大语言模型 (LLM) 的不断进步&#xff0c;预计 AI 智能体与现有软件系统的融合将出现爆发式增长。借助 AI 智能体&#xff0c;我们可以通过一些简单的语音或手势命令&#xff0c;就能完成以往需要手动操作应用程序才能…

QT绘图

QPainter paintEvent是Qt中一个非常重要的函数&#xff0c;它是QWidget类的一个事件处理函数&#xff0c;用于处理小部件的绘制事件。当Qt认为小部件需要重绘时&#xff08;例如&#xff0c;窗口首次出现时&#xff0c;大小改变时&#xff0c;或者调用了小部件的update()方法时…

JVM(5)

垃圾回收相关 垃圾收集器 警告:纯八股文! 如果说上面我们讲的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体体现. 垃圾收集器的作用:垃圾收集器是为了保证程序能够正常,持久运行的一种技术,它是将程序中不用的死亡对象也就是垃圾对象进行清除,从而保证新的…

【 C++ 】空间配置器

1、什么是空间配置器 空间配置器&#xff0c;顾名思义就是为各个容器高效的管理空间(空间的申请与回收)的&#xff0c;在默默地工作。虽然在常规使用STL时&#xff0c;可能用不到它&#xff0c;但站在学习研究的角度&#xff0c;学习它的实现原理对我们有很大的帮助。 2、为什…

P4715 【深基16.例1】淘汰赛题解

题目 有&#xff08;n≤7&#xff09;个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值&#xff0c;且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1号国家和2号国家踢一场比赛&#xff0c;胜者晋级。3号国家和4号国家也踢一场&#xff0c;…

zephyr学习

zephyr内核对象学习 定时器 类似linux的定时器&#xff0c; 可以分别设置第一次到期时间和后续的周期触发时间&#xff0c; 可以注册到期回调和停止回调 还有一个计数状态&#xff0c;用于标记timer到期了多少次 duration&#xff1a;设定timer第一次到期的时间。 period: …

SpringBoot整合JdbcTemplate

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合JdbcTemplate 📚个人知识库: Leo知识库,欢迎大家访问 目录 …

超详细的 pytest 钩子函数 之初始钩子和引导钩子来啦

前几篇文章介绍了 pytest 点的基本使用&#xff0c;学完前面几篇的内容基本上就可以满足工作中编写用例和进行自动化测试的需求。从这篇文章开始会陆续给大家介绍 pytest 中的钩子函数&#xff0c;插件开发等等。 仔细去看过 pytest 文档的小伙伴&#xff0c;应该都有发现 pyt…

递归与回溯2

一&#xff1a;递归分治 什么是递归&#xff1f; 函数自己调用自己通过函数体来进行循环以自相似的方法重复进行的过程 递归的过程&#xff1a;先自顶向下找到递归出口&#xff0c;在自底向上回到最初的递归位置 推导路径未知的题目只能用递归不能用循环 比如求多叉树的节点&…

NOC2023软件创意编程(学而思赛道)python小高组初赛真题

软件创意编程 一、参赛范围 1.参赛组别:小学低年级组(1-3 年级)、小学高年级组(4-6 年级)、初中组。 2.参赛人数:1 人。 3.指导教师:1 人(可空缺)。 4.每人限参加 1 个赛项。 组别确定:以地方教育行政主管部门(教委、教育厅、教育局) 认定的选手所属学段为准。 二、…

基于原子变量的内存模型优化

概述 线程间同步通常的实现方法通常为互斥锁&#xff0c;但互斥锁对性能造成了影响&#xff0c;C11引入了内存模型&#xff0c;定义了STD::memory_order枚举&#xff0c;结合原子性操作&#xff0c;实现无锁线程数据同步。 关于memory_order memory_order_relaxed&#xff1…

电子电气架构——车载以太网协议栈

电子电气架构——车载以太网协议栈 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c…

【Java文件报错】Cannot resolve symbol ‘println‘ 【及解决】

一、问题描述 在Java源代码文件中&#xff0c;使用 System.out.println() 语句进行输出&#xff0c;编译器提示“Cannot resolve symbol ‘println’&#xff08;无法解释关键字&#xff09;”, println飘红。报错代码及报错截图如下所示。 import java.io.*;public class St…

【JavaSE】时间类相关API以及使用

目录 时间类相关API 1.Date类 2.SimpleDateFormat类 3.Calendar类 4.JDK8-时区&#xff0c;时间和格式化 5.JDK8-日历和工具类 时间类相关API 以下内容是通过观看黑马java的常见API视频总结加笔记&#xff0c;其中有JDK7以及以前的时间类&#xff0c;包括&#xff1a;Date&…