Mysql(四)---增删查改(进阶)
文章目录
- 前言
- 1.查询操作
- 1.1.全列查询
- 1.2.指定列查询
- 1.3.列名为表达式查询
- 1.4.查询中使用别名
- 1.5.去重查询
- 1.6.排序
- 1.6.2.NULL
- 1.7.条件查询
- 1.8.分页查询
- 2.修改
- 3.删除
前言
上一篇博客,我们学习了一些主键的概念,并且分别创造了一些示例表,下面我们添加训练案例,来对增删改查进行全面的学习。
数据案例:位于大松鼠的gitee码云中:https://gitee.com/sun-meng-yu/csdn—mysql-database
将data.sql文件一运行,就会出现6个表
1.查询操作
语法:
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
1.1.全列查询
语法:
select * from 表名
例如:查询 departments 表中的所有数据
select * from department;
1.2.指定列查询
语法:
select 列名[,列名][,列名] from 表名;
查询 departments 表中所有部门名称。
1.3.列名为表达式查询
在查询中也可以使用算数表达式,来改变数据的显示格式,例如知道了学生的语数英三科成绩,那么正好可以知道三科成绩之和
算数运算符:* / + - (优先级从高到低)
示例:
查询雇员的年薪,并显示他们的雇员ID,名字。(employees的salary是月薪)
select employee_id,Last_name,12 * salary from employees;
由于人数众多,我就不在截全了
示例2:
计算 employees 表中的员工薪水加 100 以后的全年薪水是多少,
并显示他们的员工ID与名字。
select employee_id,Last_name,12 * (salary+100) from employees;
1.4.查询中使用别名
上面12*salary这个列名,不好看,并且咱们也知道代表年薪的意思,那么我们可以使用别名来进行代替。
select 列名 [as] 别名 [,列名 [as] 别名]... from 表名;
示例:
查询 employees 表为表定义别名为emp,将雇员 last_name ,列定
义别名为 name,将12*salary定义为年薪
1.5.去重查询
关键字:distinct
select distinct 列名 from 表
示例:
查询 employees 表,显示唯一的部门 ID
select distinct department_id from employees;
1.6.排序
语法:
select 列名 from 表名 order by 列名 [asc | desc];
排序规则:
升序 asc (默认)降序 desc
示例1:
显示雇员ID,名字。计算雇员的年薪,年薪列别名为annsal,并对
该列进行升序排序,
select employee_id,last_name,12*salary as annsal from employees order by annsal asc;
可不可以按照两个进行排序,一个是升序,另一个是降序
示例2:
以升序排序显示 DEPARTMENT_ID 列,同时以降序排序显示
SALARY 列
select department_id,salary from employees order by department_id asc,salary desc;
注意
查看表结构中用到了desc(describe缩写)描述
排序中示desc(descend缩写)
在mysql中一个关键字,表示除了两种意思,要尽量杜绝这种现象,注意以后写代码的命名规范。
1.6.2.NULL
如果一行中的某个列缺少数据值,该值被置为 null, 或者说包含一个空。
空是一个难以获得的、未分配的、未知的,或不适用的值。空和 0或者空格不相同。 0 是一个数字,而空格是一个字符。
示例:
计算年薪包含佣金
select department_id,Last_name,commission_pct,12*salary*commission_pct from employees;
NULL和任何值进行计算都是NULL
NULL的特殊之处
- NULL数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
- 不论和什么值进行运算,返回的值都是NULL
- NULL始终倍判定为FALSE
- NULL的值不是我们以前学过的其他编程语言中的0,在Mysql中他就是NULL
1.7.条件查询
根据指定的一些条件,过滤到不符合条件的记录,把符合条件的记录返回给用户可以通过一些运算符,比如比较运算符,逻辑运算符等
比较运算符:
运算符 | 说明 |
---|---|
>,<,>=,<= | 大于,小于,大于等于,小于等于 |
= | 等于,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) |
示例:
1.检验 = 和 <=>
2.查询 departments 表中部门 ID 为 90 的部门名称与工作地点 ID。
select department_id,location_id from department where department_id = 90;
3,查询 employees 表中员工薪水大于等于 3000 的员工的姓名与薪
水。
select last_name from employees where salary >= 3000;
4.查询 employees 表,薪水在 3000-8000 之间的雇员ID、名字与薪
水。
select department_id,last_name,salary from employees where salary between 3000 and 8000;
5.查询 employees 表,找出薪水是 5000,6000,8000 的雇员ID、名字
与薪水。
select department_id,last_name,salary from employees where salary in (5000,6000,8000);
6.查询 employees 中雇员名字第二个字母是 e 的雇员名字
select last_name from employees where last_name like '_e%' ;
7.找出 emloyees 表中那些没有佣金的雇员雇员ID、名字与佣金。
IS NULL 条件用于空值测试。空值的意思是难以获得的、未指定的、未知的或者不适用的。因此,你不能用 = ,因为 null 不能等于
或不等于任何值。
select department_id,last_name,commission_pct from employees where commission_pct is null;
8.查询 employees 表中雇员薪水是 8000 的并且名字中含有e 的雇员
名字与薪水。
select last_name,salary from employees where salary = 8000 and last_name like '%e%';
1.8.分页查询
前面在学习select * from 表名;的时候,说过,不加限制记录的查询是不安全的,因此我们引出分页查询
通过分页查询可以有效的控制一次查询出来的结果,
可以有效地减少数据库服务器的压力,同时对用户也比较友好
语法:
SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY
LIMIT 开始位置,查询数量;
和
SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY
LIMIT 查询数量 OFFSET 开始位置;
offset 表示偏移量,意思是从哪开始读取数据
示例:
1.查询雇员表中所有数据按 id 排序,实现分页查询,每次返回两条结
果。
select * from departments order by DEPARTMENT_ID limit 0,2;
2.查询雇员表中所有数据按 id 排序,使用 LIMIT OFFSET 实现分页查
询,每次返回两条结果。
select * from departments order by DEPARTMENT_ID limit 2 offset 4;
2.修改
语法:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
因为上面的数据库对接下来的联合查询等仍有用处,
为此我们在使用新的数据来完成下面的操作
先运行下面的代码
DROP TABLE IF EXISTS exam;
CREATE TABLE exam (id bigint,name VARCHAR(20),chinese DECIMAL(3,1),math DECIMAL(3,1),english DECIMAL(3,1)
);
-- 插入测试数据
INSERT INTO exam (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30);
示例:
1.将孙悟空的数学成绩改为80分
update exam set math = 80 where name = '孙悟空';
2.在插入一条学生姓名为孙悟空的数据,然后在执行同样的更新操作
insert into exam values(11,'孙悟空',40,,46,37);
update exam set math = 80 where name = '孙悟空';
谨记:不能写成这个代码
update exam set math = 80;
update操作的时候,如果不加where条件,修改的将是整张表中的所有记录,是非常危险的!
3.将总成绩倒数前三的同学的数学成绩再上30分
那么我们就将总成绩倒数前三的同学的数学成绩再减去30分
update exam set math = math - 30 where math is not null order by (chinese + math + english) limit 3;
3.删除
语法:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
示例:
1.删除孙悟空同学的考试成绩
delete from exam where name = '孙悟空';
2.删除英语成绩倒数前三的同学的所有考试成绩
delete from exam order by english asc limit 3;
谨记:跟update用法一样,如果不加where限制的话,那么整张表都会清空
小技巧:
我们可以在设置一个字段deleteStatus,专门去显示数据是否删除,只需要更改deleteStatus的值,不不用使用delete,就可以完成删除操作。
下一篇博客,我们就要介绍联合查询等相关知识点,我们不见不散!
相关文章:

Mysql(四)---增删查改(进阶)
文章目录 前言1.查询操作1.1.全列查询1.2.指定列查询1.3.列名为表达式查询1.4.查询中使用别名1.5.去重查询1.6.排序1.6.2.NULL 1.7.条件查询1.8.分页查询 2.修改3.删除 前言 上一篇博客,我们学习了一些主键的概念,并且分别创造了一些示例表,…...

SOAP @WebService WSDL
SOAP & WebService & WSDL SOAP(Simple Object Access Protocol)WebService(Web服务)WSDL(Web Services Description Language) SOAP(Simple Object Access Protocol) **是一…...

【Qt】QWidget的toolTip属性
QWidget的toolTip属性 如果一个GUI程序,界面比较复杂,按钮比较多,使用toolTip可以设置当鼠标悬停在控件上的时候,可以弹出一个提示。 API说明 setToolTip 设置 toolTip. ⿏标悬停在该 widget 上时会有提⽰说明. setToolTipDur…...

【操作系统】什么是进程?什么是线程?两者有什么区别(面试常考!!!)
什么是进程/任务(Process/Task) 当我们打开我们的电脑的任务管理器就可以看到我们的电脑正在执行的进程。 每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资…...

AI -- Machine Learning
1. What is Machine Learning 1.1 Artificial Intelligence vs. Machine Learning 1.2 Relations to Other Disciplines 与其他学科的关系 1.3 Human Learning vs. Machine Learning 1.4 What is Skill in Machine Learning 什么是机器学习的技能 1.5 Two General Types of Le…...

了解交换机_1.交换机的技术发展
1.LAN的分段-单网线 最简单的网络是两台计算机通过一根网线相连: 一根网线它有很多限制,首先只能连接两台电脑,其次不能距离太远,主要因为: (1)单路网线太长会存在信号衰减;…...

ubuntu 24.04 安装 Nvidia 显卡驱动 + CUDA + cuDNN,配置 AI 深度学习训练环境,简单易懂,一看就会!
ubuntu 24.04 安装 Nvidia 显卡驱动 CUDA cuDNN,配置 AI 深度学习训练环境,简单易懂,一看就会! 1.查看本机显卡型号 lspci | grep -i nvidia输出如下: 01:00.0 3D controller: NVIDIA Corporation GM108M [GeForc…...

跟李沐学AI:目标检测的常用算法
区域神经网络R-CNN 使用启发式搜索算法来选择锚框 -> 使用预训练模型来对每个锚框抽取特征 -> 训练一个SVM对类别进行分类 -> 训练一个线性回归模型来预测边缘框偏移 锚框大小不一,如何将不同的锚框统一为一个batch? -> 兴趣区域池化层 兴趣区域(RoI…...

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(一)---UnrealCV获取深度+分割图像
前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程使用的环境: ubuntu 22.04 ros2 humblewindows11 UE5.4.3python8 本系列教程将涉及以…...

Java算法解析一:二分算法及其衍生出来的问题
这个算法的前提是,数组是升序排列的 算法描述: i和j是指针可以表示查找范围 m为中间值 当目标值targat比m大时,设置查找范围在m右边:i m-1 当目标值targat比m小时,设置查找范围在m左边:j m1 当targat的…...

数学建模预测类—【一元线性回归】
每日格言:行动是治愈恐惧的良药,而犹豫拖延将不断滋养恐惧. 目录 前言 一、什么是回归分析? 1.概念理解 2.分类和一般步骤 二、一元线性回归(Matlab算法) 1.利用regress函数 2、例题讲解 总结 前言 在具体讲述线性回归…...
配置更加美观的 Swagger UI
//注册Swagger服务 private static void AddSwaggerService(IServiceCollection services){services.AddSwaggerGen(opt >{opt.SwaggerDoc("Push", new OpenApiInfo{Version "v1",Title "Push API",Description "Push API 文档"…...
软件测试 - 基础(软件测试的生命周期、测试报告、bug的级别、与开发人员产生争执的调解方式)
一、软件测试的生命周期 测试贯穿软件的整个生命周期 软件测试的生命周期: 需求分析 →测试计划→ 测试设计、测试开发→ 测试执行→ 测试评估->上线->运行维护 需求分析:判断用户的需求是否合理,是否可实现 测试计划:计划项…...

RTX 4070 GDDR6显存曝光:性能与成本的平衡之选
近期,关于NVIDIA RTX 4070新显卡的信息曝光,这款显卡将配备较为缓慢的GDDR6显存,而非更高性能的GDDR6X。这一配置的选择引发了业内的广泛关注,特别是在性能与成本的平衡问题上。 新版RTX 4070 OC 2X的核心特点 **1.显存类型与带…...

canvas的基础使用
canvas的基础使用 一、画一条直线二、线的属性设置三、防止多次绘制的样式污染四、闭合五、快捷绘制矩形六、绘制圆形七、绘制文字八、绘制图片js版dom版图片截取 一、画一条直线 画一条直线需要用到三个方法:cxt.moveTo、cxt.lineTo、cxt.stroke <canvas id&qu…...

Windows 常用网络命令之 telnet(测试端口是否连通)
文章目录 1 概述1.1 启用 telnet 2 常用命令2.1 ping:测试网络是否连通2.2 telnet:测试端口是否连通 3 扩展3.1 进入 cmd 命令3.2 cls 清屏命令 1 概述 1.1 启用 telnet telnet ip:port // 格式 telnet 10.0.24.154:8001若出现上述提示&…...
x264 编码器像素运算系列:asd8函数
x264 编码器中像素间运算 在 x264 编码器中有多种像素间的运算,如下: sad 计算:SAD(Sum of Absolute Differences,绝对差值和)是一种在图像处理和视频编码中常用的度量,用于计算两个图像块之间的差异。SAD值越小,表示两个图像块越相似。hadamard_ac计算:用于计算Hadam…...

什么是AR、VR、MR、XR?
时代背景 近年来随着计算机图形学、显示技术等的发展,视觉虚拟化技术得到了广泛的发展,并且越来越普及化,慢慢的也走入人们的视野。目前市场上视觉虚拟化技术的主流分为这几种 VR、AR、MR、XR。这几项技术并不是最近才出现的,VR的…...

Epic Games 商店面向欧盟 iPhone 用户上线
Epic Games Store 终于在欧盟推出,为玩家提供了不通过 App Store 就能在 iPhone上访问游戏的途径。在经历了漫长而昂贵的关于支付和竞争对手应用程序店面的法律战,以及公证方面的麻烦之后,Epic Games 成功地为App Store 带来了一个数字店面。…...
【计算机毕设项目】2025级计算机专业小程序项目推荐 (小程序+后台管理)
以下项目选题适合计算机专业大部分专业,技术栈主要为:前端小程序,后端Java语言,数据库MySQL 后台免费获取源码,可提供远程调试、环境安装配置服务。(文末有联系方式) 以下是本次部分项目推荐1…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...