【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条记录

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[HackMyVM] 靶场 Wave

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

【LeetCode:2368. 受限条件下可到达节点的数目 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

MSCKF3讲:后端理论推导(上)

MSCKF3讲&#xff1a;后端理论推导&#xff08;上&#xff09; 文章目录 MSCKF3讲&#xff1a;后端理论推导&#xff08;上&#xff09;1 MSCKF中的状态变量① IMU状态:② cam0状态&#xff1a;③ IMU和cam0间状态关系 2 微分方程递推&#xff08;数值解&#xff09;3 IMU状态预…

leetcode - 2095. Delete the Middle Node of a Linked List

Description You are given the head of a linked list. Delete the middle node, and return the head of the modified linked list. The middle node of a linked list of size n is the ⌊n / 2⌋th node from the start using 0-based indexing, where ⌊x⌋ denotes th…

ABAP - SALV教程05 添加页眉和页脚

先看看效果叭CL_SALV_TABLE提供了SET_TOP_OF_LIST方法设置页眉显示和SET_TOP_OF_LIST_PRINT方法设置页眉打印来实现添加页眉的目的。CL_SALV_TABLE提供了SET_END_OF_LIST方法设置页脚显示和SET_END_OF_LIST_PRINT方法设置页脚打印来实现添加页脚的目的。这个四个方法的传入参数…

计算机二级Python刷题笔记------基本操作题11、14、17、21、30(考察列表)

文章目录 第十一题&#xff08;列表遍历&#xff09;第十四题&#xff08;len&#xff09;第十七题&#xff08;len、insert&#xff09;第二十一题&#xff08;append&#xff09;第三十题&#xff08;二维列表&#xff09; 第十一题&#xff08;列表遍历&#xff09; 题目&a…

你敢信,copilot Pro这个带着Pro的产品是阉割版?

你敢信&#xff0c;copilot Pro这个带着Pro的产品是阉割版&#xff1f; 没错。 很多人以为copilot Pro带着Pro就是专业版&#xff0c;高大上。 但不知道的是&#xff0c;微软对于office copilot同时发布了两款产品&#xff1a; 针对个人家庭版office用户的copilot Pro&…

【C语言】linux内核dev_hard_start_xmit

一、中文注释 struct sk_buff *dev_hard_start_xmit(struct sk_buff *first, struct net_device *dev,struct netdev_queue *txq, int *ret) {struct sk_buff *skb first; // 初始化skb指针&#xff0c;指向第一个待发送的数据包int rc NETDEV_TX_OK; // 初始返回码为NETD…

C++ set和map使用

set和map 1.关联式容器2. 键值对3. set3.1 介绍3.2 简单使用 4.multiset5.map5.1 介绍5.2 简单使用 6. multimap 1.关联式容器 关联式容器是一种STL容器&#xff0c;用于存储键-值对。它们提供了一种通过键来快速查找值的机制。STL总共实现了两种不同结构的管理式容器&#xff…

编写dockerfile挂载卷、数据容器卷

编写dockerfile挂载卷 编写dockerfile文件 [rootwq docker-test-volume]# vim dockerfile1 [rootwq docker-test-volume]# cat dockerfile1 FROM centosVOLUME ["volume01","volume02"]CMD echo "------end------" CMD /bin/bash [rootwq dock…

ecmascript 6+(2)

引用数据类型&#xff1a; Object, Array, RegExp, Date等 包装类型&#xff1a;&#xff08;底层数据类型会将简单数据类型包装为对象&#xff09; String, Number, Boolean等&#xff08;都是基本数据类型的构造函数&#xff09; Object Object.keys(对象) 返回数组&…

4款塞纸条盲盒交友源码,可以对接公众号

一元盲盒交友源码/脱单盲盒源码/交友盲盒/恋爱盲盒公众号版 可以对接自己支付&#xff0c;全部自定义 没有任何bug版本&#xff0c;已经测试完全可以 免费源码&#xff0c;不包搭建指导 源码下载地址专业知识分享社区-专业知识笔记免费分享 (chaobiji.cn)

flink重温笔记(九):Flink 高级 API 开发——flink 四大基石之WaterMark(Time为核心)

Flink学习笔记 前言&#xff1a;今天是学习 flink 的第 9 天啦&#xff01;学习了 flink 四大基石之 Time的应用—> Watermark&#xff08;水印&#xff0c;也称水位线&#xff09;&#xff0c;主要是解决数据由于网络延迟问题&#xff0c;出现数据乱序或者迟到数据现象&…

Vue项目的快速搭建

Vue项目的快速搭建 一、下载并安装node.js二、安装Vue脚手架三、创建vue项目四、项目启动五、VS Code下载安装 一、下载并安装node.js 首先确保已经安装了Node.js。如果没有安装&#xff0c;可以去官网&#xff08;https://nodejs.org/&#xff09;下载并安装最新版本的Node.j…

CIP通讯介绍(欧姆龙PLC)

什么是CIP CIP通信是Common Industrial Protocl(CIP)的简称&#xff0c;它是一个点到点的面向对象协议&#xff0c;能够实现工业器件&#xff08;传感器&#xff0c;执行器&#xff09;之间的连接&#xff0c;和高等级的控制器之间的连接。目前&#xff0c;有3种网络DeviceNet…

c语言经典测试题9

1.题1 #include <stdio.h> int main() { int i 1; sizeof(i); printf("%d\n", i); return 0; } 上述代码运行结果是什么呢&#xff1f; 我们来分析一下&#xff1a;其实这题的难点就是sizeof操作后i的结果是否会改变&#xff0c;首先我们创建了一个整型i&a…

消息中间件之RocketMQ源码分析(二十七)

Broker提交或回滚事务消息 当生产者本地事务处理完成并且Broker回查事务消息后&#xff0c;不管执行Commit还是Rollback,都会根据用户本地事务的执行结果发送一个End_transaction的RPC请求给Broker&#xff0c;Broker端处理该请求的类是EndTransactionProcessor 第一步&…

记录github中那个是正常的文件下载的方式,idm正确的使用方式

百度网盘下载速度 文件说明 后缀 tar.gz 是linux 文件 zip 是 压缩文件不知道是哪个压缩文件 github 中的文件难下载 刚才我下载的时间是10.05出现了文件中断的清空 无法下载 第一个文件下载好的样子 还是用这个良心 20230924-1DM脚本激活 下载完成没有说怎么使用 我之前使用…

用python和pygame库实现刮刮乐游戏

用python和pygame库实现刮刮乐游戏 首先&#xff0c;确保你已经安装了pygame库。如果没有安装&#xff0c;可以通过以下命令安装&#xff1a; pip install pygame 示例有两个。 一、简单刮刮乐游戏 准备两张图片&#xff0c;一张作为背景bottom_image.png&#xff0c;一张作…

【详识JAVA语言】数组练习

数组转字符串 代码示例 import java.util.Arraysint[] arr {1,2,3,4,5,6};String newArr Arrays.toString(arr);System.out.println(newArr);// 执行结果 [1, 2, 3, 4, 5, 6] 使用这个方法后续打印数组就更方便一些. Java 中提供了 java.util.Arrays 包, 其中包含了一些操…