【MySQL】查询操作(基础篇)
目录
1、查询操作(Retrieve)
1.1 全列查询
1.2 指定列查询
1.3 查询字段为表达式
1.4 别名
1.5 去重:DISTINCT
1.6 排序:ORDER BY
1.7 条件查询:WHERE
1.8 分页查询
1、查询操作(Retrieve)
查询操作算的上是 SQL 中最复杂的操作了,这里我们以基础的为主要。
1.1 全列查询
查询表里的所有的列,是我们初学阶段比较常见的一个操作:
-- select * from 表名;
select * from student;
+------+--------+------+
| id | name | sex |
+------+--------+------+
| 1 | 张三 | 男 |
| 2 | 小美 | 女 |
| 3 | 赵六 | 男 |
| 4 | 李四 | NULL |
+------+--------+------+
-- 4 rows in set (0.00 sec)
通过 select * from 表名; 的方式来查询,* 表示为通配符,代表了所有的列,无论表中是啥样的,里面有几列,啥名字都没关系,都可以用 * 来表示所有。
对于我们学习阶段来说,这个操作还好,但是在公司里,特别是生产环境上,可不能随便执行 select * 这样的操作,进行这个操作就相当于我们的 MySQL 服务端给服务器发送了一条指令,服务器给我们返回对应指令查询到的结果,如果数据量非常大,以 TB 为单位的话,此处的查询操作就会遍历所有的数据,把数据从服务器硬盘上读出来,通过网卡进行发送回客户端。在数据量特别大的时候,就会把硬盘 IO 吃满或者网络带宽也吃满了!此时外面其他的用户想要访问这个服务器,因为这个查询操作把带宽或IO吃满了,就可能出现无法正常使用的情况!
1.2 指定列查询
这个查询不用按照表中列的顺序来查询,只要表中包含该列即可:
select name, id from student;
+--------+------+
| name | id |
+--------+------+
| 张三 | 1 |
| 小美 | 2 |
| 赵六 | 3 |
| 李四 | 4 |
+--------+------+
-- 4 rows in set (0.00 sec)
这里其实也就是把 * 改成了我们想要查询的指定列,每个列中间用英文的逗号来隔开!
1.3 查询字段为表达式
这里我们为了更好的演示接下来的操作,我们重新创建一张表,包含更合理的字段:
drop table student;
create table student (id int,name varchar(10), sex varchar(1), java float(5, 2),python float(5, 2));
insert into student value(1, '张三', '男', 88.2, 87.9),(2, '李四', '男', 92.5, 78.2),(3, '小美', '女', 80.9, 68.6),(4, '小花', '男', 97.0, 71.3);
我们先来看一下新创造出的这张表中全部的数据:
select * from student;
+------+--------+------+-------+--------+
| id | name | sex | java | python |
+------+--------+------+-------+--------+
| 1 | 张三 | 男 | 88.20 | 87.90 |
| 2 | 李四 | 男 | 92.50 | 78.20 |
| 3 | 小美 | 女 | 80.90 | 68.60 |
| 4 | 小花 | 男 | 97.00 | 71.30 |
+------+--------+------+-------+--------+
-- 4 rows in set (0.00 sec)
这里可以发现各位同学的 java 考试分数都很不错啊,为了防止他们骄傲,Java 老师决定不给他们公开真实的分数,而是给每位同学展示 java 扣 10 分后的结果,于是可这样写 SQL :
select id, name, sex, java - 10 from student;
+------+--------+------+-----------+
| id | name | sex | java - 10 |
+------+--------+------+-----------+
| 1 | 张三 | 男 | 78.20 |
| 2 | 李四 | 男 | 82.50 |
| 3 | 小美 | 女 | 70.90 |
| 4 | 小花 | 男 | 87.00 |
+------+--------+------+-----------+
-- 4 rows in set (0.00 sec)
这里我们要注意的是,select 只是查询,并不会修改原来表中的数据,而查询的结果是一个 "临时表",这个查询出来的表是不会写到硬盘里面去的。
注意:select 只是查询,并不会修改原来的数据!
如果现在是班主任,想统计一下每个同学的总分,也就是 java+python 的分数,当然也是可以的,SQL 可以这样去写:
select id, name, sex, java + python from student;
+------+--------+------+---------------+
| id | name | sex | java + python |
+------+--------+------+---------------+
| 1 | 张三 | 男 | 176.10 |
| 2 | 李四 | 男 | 170.70 |
| 3 | 小美 | 女 | 149.50 |
| 4 | 小花 | 男 | 168.30 |
+------+--------+------+---------------+
-- 4 rows in set (0.00 sec)
而这些表达式查询呢,只能针对每一行,对应的列进行运算,是无法做到行于行之间的运算的,比如我要求 java 考试分数的总和,这个我们到后面进阶篇会讲解。
上述的表达式查询,可能有不少小伙伴发现了,给每个同学的 java 分数减少 10 分,这一列的列名居然是 java - 10,那这一下子不就露馅了吗?都知道老师给自己扣了 10 分,这可不行啊,于是我们可以给字段起一个别名!
1.4 别名
为查询中的指定列指定别名,返回的结果集中,以别名作为该列的名称,例如还是每位同学 java 扣 10 分:
select id, name, sex, java - 10 as java from student;
+------+--------+------+-------+
| id | name | sex | java |
+------+--------+------+-------+
| 1 | 张三 | 男 | 78.20 |
| 2 | 李四 | 男 | 82.50 |
| 3 | 小美 | 女 | 70.90 |
| 4 | 小花 | 男 | 87.00 |
+------+--------+------+-------+
-- 4 rows in set (0.00 sec)
这样就万无一失了,我们通过 as 来指定该列的别名,其实这个 as 可以省略掉,中间用空格隔开就行,但建议还是带上 as ,这样 SQL 的可读性就更高了!
1.5 去重:DISTINCT
这里为了看到效果,我们来插入两条数据:
insert into student value(5, '李四', '男', null, null),(6, '小花', '女', null, null);
先不去重来查询下 name 这一列:
select name from student;
+--------+
| name |
+--------+
| 张三 |
| 李四 |
| 小美 |
| 小花 |
| 李四 |
| 小花 |
+--------+
-- 6 rows in set (0.00 sec)
通过查询结果能发现,小李和小花重复出现了一次,如何去掉一列中重复出现的数据呢?
select distinct name from student;
+--------+
| name |
+--------+
| 张三 |
| 李四 |
| 小美 |
| 小花 |
+--------+
-- 4 rows in set (0.00 sec)
注意:这里的 distinct 是要给哪列去重就加在哪列的前面即可,中间用空格隔开! 当然也能指定多列,但是就要满足指定列都相同才算重复!
1.6 排序:ORDER BY
比如现在我们有个需求,需要按照总成绩从高到低排序,这里就可以使用 order by 了:
select id, name, sex, java + python as 总分 from student order by 总分;
+------+--------+------+--------+
| id | name | sex | 总分 |
+------+--------+------+--------+
| 5 | 李四 | 男 | NULL |
| 6 | 小花 | 女 | NULL |
| 3 | 小美 | 女 | 149.50 |
| 4 | 小花 | 男 | 168.30 |
| 2 | 李四 | 男 | 170.70 |
| 1 | 张三 | 男 | 176.10 |
+------+--------+------+--------+
-- 6 rows in set (0.00 sec)
order by 后面的总分,指的是对总分这一列排序,默认是升序,当然 order by 总分,也能换成 order by java + python, 也是可以的!
注意:在 SQL 中 NULL 和 任何值计算都是 NULL,而且 NULL 是最小的值!!!
既然默认是升序,那么我们也可以降序排序,只需要在后面加上 desc 就可以了,这里的 desc 和查看表结构的 desc 不同,一个是 describe,一个是 descend!
select id, name, sex, java + python as 总分 from student order by 总分 desc;
+------+--------+------+--------+
| id | name | sex | 总分 |
+------+--------+------+--------+
| 1 | 张三 | 男 | 176.10 |
| 2 | 李四 | 男 | 170.70 |
| 4 | 小花 | 男 | 168.30 |
| 3 | 小美 | 女 | 149.50 |
| 5 | 李四 | 男 | NULL |
| 6 | 小花 | 女 | NULL |
+------+--------+------+--------+
-- 6 rows in set (0.00 sec)
那么实际中会不会有这样一种情况?先是按照 java 分数从低到高排序,如果 java 分数一样,就按照 python 从高到低排序呢?当然是有的,这种我们称为指定多个列排序:
select id, name, sex, java, python from student order by java asc, python desc;
+------+--------+------+-------+--------+
| id | name | sex | java | python |
+------+--------+------+-------+--------+
| 5 | 李四 | 男 | NULL | NULL |
| 6 | 小花 | 女 | NULL | NULL |
| 3 | 小美 | 女 | 80.90 | 68.60 |
| 1 | 张三 | 男 | 88.20 | 87.90 |
| 2 | 李四 | 男 | 92.50 | 78.20 |
| 4 | 小花 | 男 | 97.00 | 71.30 |
+------+--------+------+-------+--------+
-- 6 rows in set (0.00 sec)
升序(默认):asc,降序:desc,升序是可以不写这个 asc,加上也无妨!
1.7 条件查询:WHERE
在了解条件查询之前,我们需要先了解 MySQL 中的一些运算符:
比较运算符:
运算符 | 说明 |
---|---|
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL不安全,例如 NULL = NULL 的结果是 NULL |
<=> | 等于,NULL安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
!=,<> | 不等于(第一种用的偏多) |
BETWEEN a0 AND a1 | 范围匹配,[a0,a1] 如果 a0 <= value <= a1 返回 TRUE(1) |
IN (option,...) | 如果是 option 中的任意一个,返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配,% 表示任意多个(包括 0 个) 任意字符;_ 表示任意一个字符 |
逻辑运算符:
运算符 | 说明 |
---|---|
AND | 多个条件必须为 TRUE(1),结果才是 TRUE(1) |
OR | 任意一个条件为 TRUE(1),结果为 TRUE(1) |
NOT | 条件为 TRUE(1),结果为 FALSE(0) |
注意:WHERE 条件可以使用表达式,但不能使用别名。AND 优先级高于 OR 使用时需要用 () 包裹优先执行的部分。
通过 where 指定一个 "条件" ,把查询到的每一行,都带入到条件中,看为真还是为假,把满足条件的,即为真的,保留作为临时表的结果,条件不满足,即为假,则舍弃!
● 查询 java 成绩大于 90 分的同学:
select name, java from student where java > 90;
● 查询总成绩大于 160 分的同学
select name, java + python as 总分 from student where java + python > 160;
● 查询 java 成绩大于 90 或者 python 成绩大于 70 的同学:
select name, java, python from student where java > 90 or python > 70;
● 查询 python 成绩在 [80,90] 的同学:
select name, python from student where python between 80 and 90;
select name, python from student where python >= 80 and python <= 90;
-- 上述两种写法都可以
● 查询 java 成绩是 90分,83分,72分的同学:
select name, java from student where java in (90, 83, 72);
select name, java from student where java = 90 or java = 83 or java = 72;
-- 上述两种写法都可以
● 查询姓 '张' 的同学:
select name from student where name like '张%';
● 查询名字为三个字,中间一个字为 '小' 的:
select name from student where name like '_小_';
● 查询没有 java 成绩的同学:
select name from student where java <=> null;
-- 注意 null 值比较用 <=> 不能用 =
1.8 分页查询
上述说到 select * 是一个很危险的操作,那么 MySQL 引入了一个分页查询,限制了每次查询显示的最多为多少条数据,比如我们现在只查询俩条数据:
select * from student limit 2;
搭配 offset 就可以指定从第几条开始进行筛选了,offset 默认从 0 开始。
select * from student limit 2 offset 0;
select * from student limit 2 offset 2;
select * from student limit 2 offset 4;
数据的起始下标为 0,与数组下标有点类似。
下期预告:【MySQL】表的基本约束
相关文章:
【MySQL】查询操作(基础篇)
目录 1、查询操作(Retrieve) 1.1 全列查询 1.2 指定列查询 1.3 查询字段为表达式 1.4 别名 1.5 去重:DISTINCT 1.6 排序:ORDER BY 1.7 条件查询:WHERE 1.8 分页查询 1、查询操作(Retrieve) 查询操作算的上是 SQL 中最复杂的操作了…...
工程管理系统+spring cloud 系统管理+java 系统设置+二次开发
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
MyBatisPlus Study Notes
文章目录1 MyBatisPlus概述1.1 MyBatis介绍1.2 MyBatisPlus特性2 标准数据层开发2.1 MyBatisPlus的CRUD操作API2.2 分页功能接口实现2.2.1 config(配置层)拦截器实现2.2.2 Dao(Mapper)数据访问层(CRUD)操作2.2.3 Junit单元测试进行…...
【Vu3 测试篇】自动化测试
一、为什么需要测试 自动化测试能够预防无意引入的 bug,并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一样,新的 Vue 应用可能会以多种方式崩溃,因…...
Android system实战 — Android R(11) 第三方apk权限
Android system实战 — 第三方apk权限问题0. 前言1. 源码实现1.1 主要函数1.2 修改思路和实现1.2.1 修改思路1.2.2 方案一1.2.3 方案二0. 前言 最近在调试时遇到了第三方apk申请运行时权限,以及signature级别 install 权限不允许赋予给第三方apk,虽然这是…...
面试总结1
这里写目录标题什么是ORM?为什么mybatis是半自动的ORM框架?动态sqlJDBC步骤:jdbc的缺点:JDBC,MyBatis的区别:MyBatis相比JDBC的优势缓存一级缓存一级缓存在下面情况会被清除二级缓存最近在面试,发现了许多自…...
【Hello Linux】程序地址空间
作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程地址空间 程序地址空间程序地址空间语言中的程序地址空间矛盾系统中的程序地址空间为什么要有进程地址空间思维导图总结…...
电脑崩溃蓝屏问题如何重装系统
电脑是我们日常生活和工作中必不可少的工具,但在使用过程中,难免会遇到各种问题,例如系统崩溃、蓝屏、病毒感染等,这些问题会严重影响我们的使用体验和工作效率。而小白一键重装系统可以帮助我们快速解决这些问题,本文…...
《商用密码应用与安全性评估》第一章密码基础知识1.2密码评估基本原理
商用密码应用安全性评估(简称“密评”)的定义:在采用商用密码技术、产品和服务集成建设的网络与信息系统中,对其密码应用的合规性、正确性、有效性等进行评估 信息安全管理过程 相关标准 国际:ISO/IEC TR 13335 中国:GB/T …...
【编程基础之Python】7、Python基本数据类型
【编程基础之Python】7、Python基本数据类型Python基本数据类型整数(int)基本的四则运算位运算比较运算运算优先级浮点数(float)布尔值(bool)字符串(str)Python数据类型变换隐式类型…...
Kakfa详解(一)
kafka使用场景 canal同步mysqlelk日志系统业务系统Topic kafka基础概念 Producer: 消息生产者,向kafka发送消息Consumer: 从kafka中拉取消息消费的客户端Consumer Group: 消费者组,消费者组是多个消费者的集合。消费者组之间互不影响,所有…...
图解LeetCode——剑指 Offer 12. 矩阵中的路径
一、题目 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相…...
particles在vue3中的基本使用
第三方库地址 particles.vue3 - npm 1.安装插件 npm i particles.vue3 npm i tsparticles2.在main.js中引入 import Particles from particles.vue3 app.use(Particles) // 配置相关的文件常用 api particles.number.value>粒子的数量particles.number.density粒子的稀密…...
04 Android基础--RelativeLayout
04 Android基础--RelativeLayout什么是RelativeLayout?RelativeLayout的常见用法:什么是RelativeLayout? 相对布局(RelativeLayout)是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。 根据父容器定位 在相…...
python基础命令
1.现在包的安装路径 #pip show 包名 2.pip讲解 相信对于大多数熟悉Python的人来说,一定都听说并且使用过pip这个工具,但是对它的了解可能还不一定是非常的透彻,今天小编就来为大家介绍10个使用pip的小技巧,相信对大家以后管理和…...
用 Real-ESRGAN 拯救座机画质,自制高清版动漫资源
内容一览:Real-ESRGAN 是 ESRGAN 升级之作,主要有三点创新:提出高阶退化过程模拟实际图像退化,使用光谱归一化 U-Net 鉴别器增加鉴别器的能力,以及使用纯合成数据进行训练。 关键词:Real-ESRGAN 超分辨率 视…...
数据结构预备知识(模板)
模板 功能上类比C的重载函数,可以使用一种通用的形式,去代替诸多数据类型,使得使用同一种函数的时候,可以实现对于不同数据类型的相同操作。增强类和函数的可重用性。 使用模板函数为函数或类声明一个一般的模式,使得…...
SWM181按键控制双通道PWM固定占空比输出
SWM181按键控制双通道PWM固定占空比输出📌SDK固件包:https://www.synwit.cn/kuhanshu_amp_licheng/ 🌼开发板如下图: ✨注意新手谨慎选择作为入门单片机学习。目前只有一个简易的数据手册和SDK包,又没有参考手册&am…...
pygame函数命令
pygame.mixer.music.load() —— 载入一个音乐文件用于播放 pygame.mixer.music.play() —— 开始播放音乐流 pygame.mixer.music.rewind() —— 重新开始播放音乐 pygame.mixer.music.stop() —— 结束音乐播放 pygame.mixer.music.pause() —— 暂停音乐播放 pygame.mixer.mu…...
异步循环
业务 : 批量处理照片 , 批量拆建 , 裁剪一张照片需要异步执行等待 , 并且是批量 所以需要用到异步循环 裁剪图片异步代码 : 异步循环 循环可以是 普通 for 、 for of 、 for in 不能使用forEach ,这里推荐 for…...
Vue表单提交与数据存储
学习内容来源:视频p5 书接目录对页面重新命名选择组件后端对接测试接口设置接口前端调用对页面重新命名 将之前的 Page1 Page2 进行重新命名,使其具有实际意义 Page1 → BookManage ; Page2 → AddBook 并且 /router/index.js 中配置页面信息…...
API网关(接入层之上业务层之上)以及业务网关(后端服务网关)设计思路(二)
文章目录 流量网关业务网关常见网关对比1. OpenResty2. KongKong解决了什么问题Kong的优点以及性能Kong架构3. Zuul1.0过滤器IncomingEndpointOutgoing过滤器类型Zuul 1.0 请求生命周期4. Zuul2.0Zuul 与 Zuul 2 性能对比5. Spring Cloud GatewaySpring Cloud Gateway 底层使用…...
有些笑话,外行人根本看不懂,只有程序员看了会狂笑不止
我一直都觉得我们写代码的程序员与众不同,就连笑话都跟别人不一样。 如果让外行人来看我们一些我们觉得好笑的东西,他们根本不知道笑点在哪里。 不信你来瞧瞧,但凡有看不懂的地方,说明你的道行还不够深。 1.大多数人开始学编程时…...
企业电子招投标采购系统——功能模块功能描述
功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为外…...
Presto 在美图的实践
导读:本文的主题是Presto高性能引擎在美图的实践,首先将介绍美图在处理ad-hoc场景下为何选择Presto,其次我们如何通过外部组件对Presto高可用与稳定性的增强。然后介绍在美图业务中如何做到合理与高效的利用集群资源,最后如何利用…...
Molecule:使用Jetpack Compose构建StateFlow流
Molecule:使用Jetpack Compose构建StateFlow流 看下面的jetpack compose片段: Composable fun MessageCard(message: Message) {Column {Text(text message.author)Text(text message.body)} }这段代码最有趣的部分是它实际上是reactive。其反应性为 通过Composa…...
计算机组成原理(2.2)--系统总线
目录 一、总线结构 1.单总线结构 1.1单总线结构框图 编辑1.2单总线性能下降的原因 2.多总线结构 2.1双总线结构 2.2三总线结构 2.3四总线结构 编辑 二、总线结构举例 1. 传统微型机总线结构 2. VL-BUS局部总线结构 3. PCI 总线结构 4. 多层 PCI 总线结构 …...
如何使用dlinject将一个代码库实时注入到Linux进程中
关于dlinject dlinject是一款针对Linux进程安全的注入测试工具,在该工具的帮助下,广大研究人员可以在不使用ptrace的情况下,轻松向正在运行的Linux进程中注入一个共享代码库(比如说任意代码)。之所以开发该工具&#…...
Docker安装Cassandra数据库,在SpringBoot中连接Cassandra
简介 Apache Cassandra是一个高度可扩展的高性能分布式数据库,旨在处理许多商用服务器上的大量数据,提供高可用性而没有单点故障。它是NoSQL数据库的一种。首先让我们了解一下NoSQL数据库的作用。 NoSQL 数据库 NoSQL数据库(有时称为“Not …...
Linux常用命令总结(建议收藏)
Linux常用命令总结(建议收藏) 这里收集了一些常用命令以便需要时查看,欢迎作补充。(这里的提到操作都默认以CentOS系统为基础) 文件管理 目录操作 切换目录 cd 查看目录 ls -l 列出文件详细信息 或者直接ll-a 列出当前目录下所有文件及…...
JavaScript做的网站/昆山网站建设公司
方法如下 https://www.codeproject.com/Articles/560798/ASP-NET-MVC-Controller-Dependency-Injection-for-Be转载于:https://www.cnblogs.com/llcdbk/p/6861526.html...
作业3 主题资源网站建设/产品推广的目的和意义
NGS建库试剂 一、基本信息: 1、产品名称:SynplSeq DNA Library Prep Kit for Illumina 2、货号及规格 3、保存条件:-20℃ 二、产品描述: 1、产品介绍 文库构建是NGS测序的关键环节。SynplSeq DNA Library Prep Kit for illu…...
中核集团/seo托管
在工作中遇到了很多STL的咚咚,真实汗颜,以前没有用过,所以不得不现学现卖了,:)。只要有了一点泛型编程的概念,看起资料来应该不成问题,此篇也仅限于初学者,高手莫进。STL…...
兰州市建设局网站/seo基础理论
1.创建用户名以及密码: 右键我的电脑 -》 管理-》本地用户和组-》右键用户-》新用户----设置用户名密码; 2.安装IIS 和FTP :控制面板-》程序-》打开或关闭windows功能-》勾选FTP WEB管理工具以及(TFCP我不知道这个有没有用) 3.建立FTP&#x…...
四川城乡建设官方网站/关键词点击价格查询
课程目标: ① 在Servlet中懂得ServletContext HttpSession 以及HttpServletRequest之间的关系 ② 懂得怎样使用它们 概念介绍: 1. [共同点]不管对象的作用域怎样,共享变量和获得变量的 方法都是一致的 –setAttribute(“varName”,obj); –ge…...
ecshop 网站标题修改/免费的网站域名查询565wcc
如新语法的字面含义,NOWAIT表示当无法获取到锁时直接返回错误,而不是等待;SKIP LOCKED表示忽略那些已经被其他session占有行锁的记录。下面看测试: 测试 一 session 1 : mysql> select * from t; ---- | a | ---- | 42 | | …...