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的特殊之处

  1. NULL数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面
  2. 不论和什么值进行运算,返回的值都是NULL
  3. NULL始终倍判定为FALSE
  4. 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,就可以完成删除操作。


下一篇博客,我们就要介绍联合查询等相关知识点,我们不见不散!

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

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

相关文章

使用静态住宅代理解锁YouTube营销的新维度

YouTube作为众多跨境商家的重要营销推广阵地&#xff0c;YouTube的运营数据与店铺的开单息息相关。那么如何做好YouTube营销来增加产品的知名度呢&#xff1f;如何高效运营YouTube矩阵并防止账号间的关联呢&#xff1f;下文介绍的静态住宅代理就能在YouTube营销上助你一臂之力。…

使用 LabVIEW 编程更改 IMAQ/IMAQdx 接口的相机文件

问题详情 可能需要通过编程方式更改与 IMAQ/IMAQdx 接口关联的相机文件。这种需求通常发生在图像采集系统中&#xff0c;例如使用 PCIe-1433 硬件时&#xff0c;可能需要动态切换不同的相机配置文件来适应不同的应用场景。 解决方案 当前在 Measurement & Automation Ex…

Facebook国内企业户、海外户、国内二不限户以及三不限户区别何在?

Facebook广告账户的类型和设置对于企业在不同市场中的广告活动至关重要。了解国内企业户、海外企业户&#xff0c;以及国内二不限户和三不限户的区别&#xff0c;可以帮助你更好地选择和管理广告账户。以下是对这些账户类型的详细解析。 一、Facebook海外企业广告账户 海外企业…

卫星图像检测,分割,跟踪,超分辨率,数据集调研

卫星图像检测&#xff0c;分割&#xff0c;跟踪&#xff0c;超分辨率&#xff0c;数据集调研 超分辨率Image super-resolution: A comprehensive review, recent trends, challenges and applicationsA Review of GAN-Based Super-Resolution Reconstruction for Optical Remot…

Verilog基础:模块端口(port)定义的语法(2001标准)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 Verilog中的端口定义有两种风格&#xff0c;一种是Verilog Standard 1995风格&#xff0c;一种是Verilog Standard 2001风格&#xff0c;本文将对Verilog Standar…

NoSQL之 Redis 配置与优化

Redis 数据库是一个非关系型数据库&#xff0c;在正式学习Redis 之前&#xff0c;先来了解关系型数据库 与非关系型数据库的概念。 关系数据库与非关系型数据库 1.关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型基础上&#xff0c;一般面向于记…

Mapreduce_partition分区入门

分区 将输入的csv按照员工号拆分成每个员工&#xff0c;每个员工存储为员工对象&#xff0c;之后按每个员工的不同部门存储 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:x…

超越流水线,企业研发规范落地新思路

作者&#xff1a;子丑 内容大纲&#xff1a; 1、研发规范≠流程约束 2、自动化工具→研发规范载体 3、研发规范在工具上的落地示例 4、研发规范的选型方法与常见实践 研发规范≠流程约束 这个故事特别适合研发规范的场景&#xff0c;我们要避免成为把猫绑在柱子上的信众…

Java 垃圾回收,看一遍就懂

了解 Java 垃圾收集的工作原理并优化应用程序中的内存使用情况。详细了解 Java 中内存管理的复杂性。 垃圾收集是一个关键过程&#xff0c;可以帮助任何Java 开发公司。编程语言中的这一强大功能可以巧妙地管理内存分配和释放&#xff0c;防止内存泄漏并优化资源利用率。它就像…

Vue2移动端(H5项目)项目基于vant实现select单选(支持搜索、回显、自定义下拉label展示功能)

一 最终效果 二、参数配置 1、代码示例&#xff1a; <t-selectv-model"formData.materialNo"valueKey"materialNo"showLabel"materialName"labelKey"label"label"判定品级"input-align"right"placeholder&qu…

Docker-命令

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、Docker架构二、Docker进程相关命令&#xff08;一&#xff09;启动 docker 服务&#xff08;二&#xff09;重启 docker 服务&#xff08;三&#xff09;停…

尚硅谷MYSQL(12-13章)

第十二章数据类型 比如说tinyint&#xff08;4&#xff09;这个四表示的是那个取值范围的位数 他只是一个显示 比如说int后面应该是int&#xff08;11&#xff09;这是有符号的 无符号int是int&#xff08;10&#xff09; 如果写成int&#xff08;3&#xff09;但是存的数据是…

JS入门学习

JS引入方式 内部引入 内部脚本:将JS代码定义在HTML页面中 JavaScript代码必须位于<script></script>标签之间在HTML文档中&#xff0c;可以在任意地方&#xff0c;放置任意数量的<script>可以放在HTML文件的任意位置&#xff0c;一般会把脚本置于<body…

红酒与节日装饰:打造节日氛围的需备品

随着节日的脚步渐渐临近&#xff0c;节日的氛围也愈发浓厚。在这个特殊的时刻&#xff0c;红酒与节日装饰无疑成为了营造节日氛围的需备品。洒派红酒&#xff08;Bold & Generous&#xff09;作为定制红酒的品牌&#xff0c;其不同的韵味与节日装饰的精致整合&#xff0c;共…

通过域名和HTTPS上线MSF

使用受信任证书的Meterpreter载荷 现在大多数安全解决方案还会通过分析进出目标机器的流量来进行网络入侵检测。在这种情况下&#xff0c;很可能即使使用编码器绕过了防病毒软件&#xff0c;但有效载荷也会在尝试连接到我们的侦听器时被捕获和拦截。 # 准备工作 首先需要准备…

SpringBoot + Hadoop + HDFS + Vue 实现一个简单的文件管理系统

1. 安装前的准备工作 1.1 更新系统并安装必要的工具 在终端中运行以下命令&#xff1a; sudo apt-get update sudo apt-get install -y ssh rsync curl1.2 安装 Java 如果系统中没有安装 Java&#xff0c;可以通过以下命令安装 OpenJDK&#xff1a; sudo apt-get install …

基于ESP32的智能门锁系统测试

项目介绍 基于ESP32的智能门锁系统。可以运用在商务办公、家用住宅、酒店以及公租房短租公寓等领域。基于esp32的智能门锁系统是生物识别技术和嵌入式系统技术的完美结合&#xff0c;基于ESP32系统进行开发&#xff0c;同时在云端服务器搭建了MQTT服务器并连接开源的家庭自动化…

工商业和户用光伏区别及怎样运维

工商业光伏系统和户用光伏系统在设计、安装和运维方面存在一些显著的区别。首先&#xff0c;工商业光伏系统通常安装在工厂、办公楼、商场等大型建筑物的屋顶或空地上&#xff0c;而户用光伏系统则主要安装在居民住宅的屋顶上。工商业光伏系统的规模一般较大&#xff0c;发电量…

Unity | AmplifyShaderEditor插件基础(第二集:模版说明)

目录 一、前言 二、核心模版和URP模版 1.区别介绍 2.自己的模版 三、输出节点 1.界面 2.打开OutPut 3.ShderType 4.ShaderName 5.Shader大块内容 6.修改内容 四、预告 一、前言 内容全部基于以下链接基础以上讲的。 Unity | Shader基础知识&#xff08;什么是shader…

Android 实现动态换行显示的 TextView 列表

在开发 Android 应用程序时&#xff0c;我们经常需要在标题栏中显示多个 TextView&#xff0c;而这些 TextView 的内容长度可能不一致。如果一行内容过长&#xff0c;我们希望它们能自动换行&#xff1b;如果一行占不满屏幕宽度&#xff0c;则保持在一行内。本文将带我们一步步…