Mysql(四)---增删查改(进阶)

news2024/12/25 13:42:15

文章目录

  • 前言
  • 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.coloradmin.cn/o/2046267.html

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

相关文章

通过相机来获取图片

文章目录 1. 概念介绍2. 方法与细节2.1 实现方法2.2 具体细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何混合选择多个图片和视频文件"相关的内容&#xff0c;本章回中将介绍如何通过相机获取图片文件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. …

Codeforces Round 966 (Div. 3)(A,B,C,D,E,F)

A. Primary Task 签到 void solve() {string s;cin>>s;bool bltrue;if(s.size()<2)blfalse;else{if(s.substr(0,2)"10"){if(s[2]0)blfalse;else if(s[2]1&&s.size()<3)blfalse; }else blfalse;}if(bl)cout<<"YES\n";else cout…

数据结构第二天

分文件编程实现&#xff1a; main.c #include <stdio.h> #include <stdlib.h> #include "seqlist.h"int main(int argc, char const *argv[]) {seqlist_p p CreateEpSeqlist();InsertIntoSeqlist(p, 0, 10);InsertIntoSeqlist(p, 1, 20);InsertIntoSeql…

打卡第四十五天:不同的子序列、两个字符串的删除操作、编辑距离

一、不同的子序列&#xff08;困难&#xff09; 题目 文章 视频 这道题目如果不是子序列&#xff0c;而是要求连续序列的&#xff0c;那就可以考虑用KMP。相对于72. 编辑距离简单了不少&#xff0c;因为本题相当于只有删除操作&#xff0c;不用考虑替换增加之类的。但相对于…

Mapreduce_Distinct数据去重

MapReduce中数据去重 输入如下的数据&#xff0c;统计其中的地址信息&#xff0c;并对输出的地址信息进行去重 实现方法&#xff1a;Map阶段输出的信息K2为想要去重的内容&#xff0c;利用Reduce阶段的聚合特点&#xff0c;对K2进行聚合&#xff0c;去重。在两阶段中&#xff…

【数据结构篇】~顺序表

顺序表前言 想要学好数据结构的三大基本功&#xff1a;1.结构体2.指针3.动态内存开辟,这三样将是贯彻整个数据结构的工具。&#xff08;可以去这里了解这三大基本功&#xff09; 顺序表也是线性表的一种&#xff0c;那线性表又是什么呢&#xff1f; 线性表&#xff08;linear …

系列:水果甜度个人手持设备检测-无损检测常用技术和方式汇总

系列:水果甜度个人手持设备检测 -- 无损检测常用技术和方式汇总 概述 无损检测以不损坏被检测对象的使用性能为前提&#xff0c;以物理或化学方法为手段&#xff0c;借助相应的设备器材&#xff0c;按照规定的技术要求&#xff0c;对材料、零部件、结构件进行有效的检验和测…

软件测试第1章 软件测试是什么

目录​​​​​​​ 内容说明 一、软件测试与质量概览需要熟悉什么 二、如何理解质量保证 三、软件测试的误区-程序员和测试的关系 四、软件测试是什么&#xff1f; 五、软件测试的目的 六、软件测试与软件质量保证 七、软件测试的必要性 八、软件测试的基本概念分析 …

HarmonyOS Next 系列之列表下拉刷新和触底加载更多数据实现(十一)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】

智碳云/高能耗企业 水-电-气-热-油-空压机等能源数据采集系统【源码】 介绍基于SpringCloud的能源管理系统-能源管理平台源码-能源在线监测平台-双碳平台源码-SpringCloud全家桶-能管管理系统源码-能管系统软件架构

js 深入学习各种继承方法使用场景

前言 问题&#xff1a; JS 如何实现继承呢&#xff1f;主要有几种继承方式及分别适用于哪些场景呢&#xff1f; 我们学习高级语言&#xff0c;就必须学习面向对象&#xff0c;想要成为高手&#xff0c;就必须学习别人不会的&#xff0c;就比如JS中的继承&#xff0c;好多前端人…

ASP.NET在线交流论坛管理系统

ASP.NET在线交流论坛管理系统 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库 用户功能有个人信息管理 帖了信息管理 意见反馈信息管理 点赞管理 收藏管理 后台管理员可以进行用户管理 …

部署及使用seata

目录 1.下载seata1.7.0.zip 2.上传至云服务器&#xff0c;使用unar工具解压 3.配置application.yml&#xff0c;主要配置如下参数 4.为seata执行mysql脚本 5.配置nacos配置中心 *6.启动seata服务器 问题&#xff1a;“cause:can not register RM,err:can not connect to…

国外项目管理软件最佳实践:选型与应用

国内外主流的10款国外项目管理软件对比&#xff1a;PingCode、Worktile、Asana、Trello、Monday.com、ClickUp、Wrike、ProofHub、Zoho Projects、Hive。 在寻找适合的国外项目管理软件时&#xff0c;你是否感到不知从何选择&#xff1f;市场上琳琅满目的选项往往令人眼花缭乱&…

微软披露Office最新零日漏洞,可能导致数据泄露

近日&#xff0c;微软披露了 Office 中一个未修补的零日漏洞&#xff0c;如果被成功利用&#xff0c;可能导致敏感信息在未经授权的情况下泄露给恶意行为者。 该漏洞被追踪为 CVE-2024-38200&#xff08;CVSS 得分&#xff1a;7.5&#xff09;&#xff0c;被描述为一个欺骗漏洞…

关于xilinx的FFTIP的使用和仿真

工具&#xff1a;vivado2018.3&#xff0c;modelsim10.6d 场景&#xff1a;在进行数据进行频谱分析的时候&#xff0c;使用FPGA来完成FFT的计算可以加快数据的计算速度。 下面使用仿真完成DDS产生的数据的FFT以及IFFT。原始数据使用DDSIP产生&#xff0c;通过IP产生的波形数据…

旧手机NAS方案

这里写目录标题 1、参考2、alpine-term-v16.0-release.apk下载安装3、电脑端ssh连接3、安装docker3.1 网络配置3.2 配置APK源 1、参考 【Docker与Termux】闲置旧安卓手机上的NAS无缝部署方案 https://blog.csdn.net/AnRanGeSi/article/details/138717589 【Alpine Term】Andr…

线程与进程(5)

目录 信号量&#xff08;线程的同步 &#xff09; 信号量的分类&#xff1a; 框架&#xff1a; &#xff08;1&#xff09;信号量的定义(semaphore): &#xff08;2&#xff09;信号量的初始化&#xff1a; &#xff08;3&#xff09;信号量的PV 操作 &#xff08;4&#…

Ubuntu Linux安装Go语言

Golang是Google公司在2007年开始开发的一种静态强类型、编译型语言。Go语言被设计成一门简单、高效且可靠的编程语言&#xff0c;旨在解决大规模网络服务和分布式系统开发中的复杂性问题。Go语言结合了动态语言的开发速度和C/C等编译型语言的性能与安全性&#xff0c;提供了强大…

[DL]深度学习_针对图像恢复的高效扩散模型DiffIR

DiffIR: Efficient Diffusion Model for Image Restoration Abstract 扩散模型(DM)通过将图像合成过程建模为去噪网络的顺序应用&#xff0c;实现了SOTA的性能。然而&#xff0c;与图像合成不同的是&#xff0c;图像恢复(IR)对生成符合ground-truth的结果有很强的约束。因此&am…