MySQL-CRUD入门2

news2024/11/25 10:11:31

文章目录

    • 数据的查询(补充)
      • 条件查询
      • 关于SQL语句的执行顺序
      • 分页查询(LIMIT)
    • 数据的修改
      • 数据修改基础知识

数据的查询(补充)

这一节接着写, 包括数据的查询(补充), 数据的更新, 数据的删除

条件查询

其实就是根据给定的一些条件, 然后过滤掉不符合实际情况的记录, 把符合条件的记录返还给用户, 执行这些操作是通过一些运算符, 比如说比较运算符, 逻辑运算符, 和Java中的思路的是一样的

运算符说明
> , >= , < , <=大于, 大于等于, 小于, 小于等于
=等于, NULL不安全, 如NULL= NULL的结果就是NULL(参加运算)
<=>等于, NULL安全, NULL <=> NULL 的结果是1(表示真)
!=, <>不等于, NULL不安全
betweed m and n范围匹配, [m, n], 如果m <= value <= n, 返回1(表示真)

小练习(关于NULL) :

-- 进行简单的select操作不需要使用数据库
select NULL > 1;
select NULL = NULL;
select NULL <=> NULL;
select not (NULL = NULL);
select not (NULL <=> NULL);
select NULL <> NULL;

-- 执行结果 : NULL, NULL, 1, NULL, 0, NULL
-- 总结就是 : 
关于NULL的数学运算结果都是NULL
关于NULL的含有安全等于的运算是有一定意义的
运算符说明
in (option,…)如果是option中的任意一个返回1(表示真)
is null是NULL
is not null不是NULL
like模糊查询, %表示任意个(包括0个)任意字符; _表示任意一个字符

小练习 :

-- 进行简单的select操作不需要使用数据库
select 1 in (1, 2, 3);
select 5 in (1, 2, 3);
select NULL is null;
select NULL is not null;
-- 查询结果是 1, 0, 1, 0


-- 关于模糊查询的操作就需要使用数据库了
use sel_test;
select * from exam where name like '%孙%';
-- 上面的查找的是名字中有 '孙' 这个字的信息
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    2 | 孙悟空    |    87.5 | 78.0 |    77.0 |
|    6 | 孙权      |    70.0 | 73.0 |    78.5 |
+------+-----------+---------+------+---------+
select * from exam where name like '孙_';
+------+--------+---------+------+---------+
| id   | name   | chinese | math | english |
+------+--------+---------+------+---------+
|    6 | 孙权   |    70.0 | 73.0 |    78.5 |
+------+--------+---------+------+---------+

-- 之前我们查看当前数据库的字符集的时候用的下面这个指令就是模糊查询(下面一致)
show variables like '%character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8mb4                                                 |
| character_set_connection | utf8mb4                                                 |
| character_set_database   | utf8mb4                                                 |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8mb4                                                 |
| character_set_server     | utf8mb4                                                 |
| character_set_system     | utf8mb3                                                 |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
show variables like '%charac%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | utf8mb4                                                 |
| character_set_connection | utf8mb4                                                 |
| character_set_database   | utf8mb4                                                 |
| character_set_filesystem | binary                                                  |
| character_set_results    | utf8mb4                                                 |
| character_set_server     | utf8mb4                                                 |
| character_set_system     | utf8mb3                                                 |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+
运算符说明
and(&&)多个条件必须都为true(1), 结果才是true(1)
or(l l)任意一个条件为true(1), 结果就是true(1)
not条件为true(1), 结果为false(0), 类似于Java中!
特殊说明一下, 逻辑运算符的优先级不建议记忆, 建议使用的时候还是通过小括号的方式, 手动的去指定优先级, 使用where条件的语法
select * from 表名 where 列名/表达式 运算符 条件;

首先展示一下我们的数据中的数据(等会测试验证)

select * from exam;
+------+--------------+---------+------+---------+
| id   | name         | chinese | math | english |
+------+--------------+---------+------+---------+
|    1 | 唐三藏       |    67.0 | 98.0 |    56.0 |
|    2 | 孙悟空       |    87.5 | 78.0 |    77.0 |
|    3 | 猪悟能       |    88.0 | 98.0 |    90.0 |
|    4 | 曹孟德       |    82.0 | 84.0 |    67.0 |
|    5 | 刘玄德       |    55.5 | 85.0 |    45.0 |
|    6 | 孙权         |    70.0 | 73.0 |    78.5 |
|    7 | 宋公明       |    75.0 | 65.0 |    30.0 |
|    8 | 齐天大圣     |    87.5 | 78.0 |    77.0 |
|    9 | 孙行者       |    NULL | 84.0 |    83.5 |
|   10 | 宋江         |    76.0 | NULL |    77.0 |
|   11 | 李逵         |    67.0 | 90.0 |    NULL |
+------+--------------+---------+------+---------+

练习
需求1 : 找到英语成绩不及格的同学(english < 60)

mysql> select * from exam where english < 60;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    1 | 唐三藏    |    67.0 | 98.0 |    56.0 |
|    5 | 刘玄德    |    55.5 | 85.0 |    45.0 |
|    7 | 宋公明    |    75.0 | 65.0 |    30.0 |
+------+-----------+---------+------+---------+
因为 NULL < 60 不论什么时候都是不成立的, 所以直接过滤, 留下三条记录

需求2 : 找打数学成绩好于英语成绩的同学(math > english)

mysql> select * from exam where math > english;
+------+--------------+---------+------+---------+
| id   | name         | chinese | math | english |
+------+--------------+---------+------+---------+
|    1 | 唐三藏       |    67.0 | 98.0 |    56.0 |
|    2 | 孙悟空       |    87.5 | 78.0 |    77.0 |
|    3 | 猪悟能       |    88.0 | 98.0 |    90.0 |
|    4 | 曹孟德       |    82.0 | 84.0 |    67.0 |
|    5 | 刘玄德       |    55.5 | 85.0 |    45.0 |
|    7 | 宋公明       |    75.0 | 65.0 |    30.0 |
|    8 | 齐天大圣     |    87.5 | 78.0 |    77.0 |
|    9 | 孙行者       |    NULL | 84.0 |    83.5 |
+------+--------------+---------+------+---------+

需求三 : 查询总分在200以下的同学(结果降序排列)

select id, name, chinese + math + english 
as '总分' from exam where chinese + math + english < 200 
order by '总分' desc;
+------+-----------+--------+
| id   | name      | 总分   |
+------+-----------+--------+
|    5 | 刘玄德    |  185.5 |
|    7 | 宋公明    |  170.0 |
+------+-----------+--------+

思考上面的代码, 如果把where中的chinese + math + english替换为’总分’可以么 ?
在这里插入图片描述

关于SQL语句的执行顺序

主要就是下面几个点的执行顺序

  1. select 2. from 3. where 4. order by

关于这个问题, 我有一套自己的逻辑, 我们可以把一个数据库类比为一个数据池, 我们想要从中筛选指定的数据, 首先要搬出来数据池, 也就是from, 那么就需要一个滤网去过滤, 也就是where, 筛选出来指定的数据之后就select把数据选到结果集, 最后再次进行排序(order by)
也就是首先是from, 然后是where, 其次是select, 最后是order by

where中的别名问题
由上面的结论可以得到, 如果在where中通过别名进行筛选的话, 就不会筛选出来指定的结果, 但是有一个例外, 就是当别名通过引号进行标注的话, 就可以正常的执行
在这里插入图片描述
但是也会生成一个警告
在这里插入图片描述

分页查询(LIMIT)

限制结果集中的数据的条数, 在上一节我们说过如果不对数据的条数进行限制, 是一个很危险的操作, 所以就出现了分页查询的操作, 分页查询在实际的项目中应用是十分的频繁的, 只要是多条数据的集合, 一般都是用分页进行查询, 分页查询的优点也是很明显的, 可以有效的控制一次查询出来的结果集记录的条数, 减小数据库的压力, 同时对用户也是十分友好的

基础语法

-- 第一种分页语法(从索引为0的位置开始查询n条记录, 索引的起始位置是0)
select[字段]from[表名]where[查询条件]order by[字段][asc|desc]limit n;
-- 第二种分页语法(从索引为s的位置开始查询n条记录)
select[字段]from[表名]where[查询条件]order by[字段][asc|desc]limit s,n;
-- 第三种分页语法(跟第二种一样但是语法更加严密)
select[字段]from[表名]where[查询条件]order by[字段][asc|desc]limit n offset s;

假设上面的数据库我们要用分页查询法, 每4个是一页, 按照id排序

-- 分页的偏移量是 (页数 - 1) * 每页数据量
mysql> select * from exam order by id limit 4 offset 0;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    1 | 唐三藏    |    67.0 | 98.0 |    56.0 |
|    2 | 孙悟空    |    87.5 | 78.0 |    77.0 |
|    3 | 猪悟能    |    88.0 | 98.0 |    90.0 |
|    4 | 曹孟德    |    82.0 | 84.0 |    67.0 |
+------+-----------+---------+------+---------+
4 rows in set (0.00 sec)

mysql> select * from exam order by id limit 4 offset 4;
+------+--------------+---------+------+---------+
| id   | name         | chinese | math | english |
+------+--------------+---------+------+---------+
|    5 | 刘玄德       |    55.5 | 85.0 |    45.0 |
|    6 | 孙权         |    70.0 | 73.0 |    78.5 |
|    7 | 宋公明       |    75.0 | 65.0 |    30.0 |
|    8 | 齐天大圣     |    87.5 | 78.0 |    77.0 |
+------+--------------+---------+------+---------+
4 rows in set (0.00 sec)

mysql> select * from exam order by id limit 4 offset 8;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    9 | 孙行者    |    NULL | 84.0 |    83.5 |
|   10 | 宋江      |    76.0 | NULL |    77.0 |
|   11 | 李逵      |    67.0 | 90.0 |    NULL |
+------+-----------+---------+------+---------+
3 rows in set (0.00 sec)

现在分页查询需求是按照总分进行排序(每一页四条数据)

mysql> select id, name, chinese + math + english as '总分' from exam order by '总分' desc limit 4 offset 0;
+------+-----------+--------+
| id   | name      | 总分   |
+------+-----------+--------+
|    1 | 唐三藏    |  221.0 |
|    2 | 孙悟空    |  242.5 |
|    3 | 猪悟能    |  276.0 |
|    4 | 曹孟德    |  233.0 |
+------+-----------+--------+
4 rows in set (0.00 sec)

mysql> select id, name, chinese + math + english as '总分' from exam order by '总分' desc limit 4 offset 4;
+------+--------------+--------+
| id   | name         | 总分   |
+------+--------------+--------+
|    5 | 刘玄德       |  185.5 |
|    6 | 孙权         |  221.5 |
|    7 | 宋公明       |  170.0 |
|    8 | 齐天大圣     |  242.5 |
+------+--------------+--------+
4 rows in set (0.00 sec)

mysql> select id, name, chinese + math + english as '总分' from exam order by '总分' desc limit 4 offset 8;
+------+-----------+--------+
| id   | name      | 总分   |
+------+-----------+--------+
|    9 | 孙行者    |   NULL |
|   10 | 宋江      |   NULL |
|   11 | 李逵      |   NULL |
+------+-----------+--------+
3 rows in set (0.00 sec)

思考, 我们的null进行运算完之后数据都是null, 但现在我们的需求是如果是null默认为0, 那就要用到我们ifnull函数了, 关于函数我们会详细讲解, 这里简单说一下

select id, name, ifnull(chinese, 0) + ifnull(math, 0) + ifnull(english, 0) as '总分' from exam order by '总分' desc limit 4 offset 0;

select id, name, ifnull(chinese, 0) + ifnull(math, 0) + ifnull(english, 0) as '总分' from exam order by '总分' desc limit 4 offset 4;

select id, name, ifnull(chinese, 0) + ifnull(math, 0) + ifnull(english, 0) as '总分' from exam order by '总分' desc limit 4 offset 8;

最后一个SQL语句执行结果就会按照需求进行调整

+------+-----------+--------+
| id   | name      | 总分   |
+------+-----------+--------+
|    9 | 孙行者    |  167.5 |
|   10 | 宋江      |  153.0 |
|   11 | 李逵      |  157.0 |
+------+-----------+--------+

数据的修改

数据修改基础知识

也就是CRUD中的U(update), 更新某一张表中的数据, 这个才是真正意义上的’更改器’
基础语法

update [表名] set [字段1] = [期望值] ... where 筛选条件 order by 排序规则 limit..

需求1 : 将孙悟空同学的数学成绩变为80分

在这里插入图片描述
Rows matched 指的是匹配到了多少行, Changed 是指真正修改的数据行数

mysql> select * from exam where name = '孙悟空';
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    2 | 孙悟空    |    87.5 | 80.0 |    77.0 |
+------+-----------+---------+------+---------+

需求2 : 将孙悟空同学的语文成绩加20分
在这里插入图片描述
注意这里不可以使用math += 10, mysql不支持这种操作

mysql> select * from exam where name = '孙悟空';
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    2 | 孙悟空    |    97.5 | 80.0 |    77.0 |
+------+-----------+---------+------+---------+

需求3 : 把总分排名倒数前3的人的数学成绩加上10分

 update exam set math = math + 10 where math is not null order by math + chinese + english asc limit 3;

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

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

相关文章

Spring Cloud之二 微服务注册

1&#xff1a;Intellij 新建服务 user-service 2&#xff1a;pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"…

知识库管理系统在企业数字化转型中的作用

引言 在数字化转型的浪潮中&#xff0c;企业正以前所未有的速度重塑其业务模式、运营流程和组织架构&#xff0c;以适应快速变化的市场环境和客户需求。这一过程中&#xff0c;知识库管理系统作为信息整合与知识共享的核心平台&#xff0c;发挥着举足轻重的作用&#xff0c;不…

2024/9/9 408“回头看”:b树

B树是什么&#xff1f;有什么作用&#xff1f;B树的插入和删除具体细节是什么&#xff1f;除了B树还有一个是B&#xff0b;树、还是B-树&#xff0c;他们有什么区别&#xff0c;又有什么相同点&#xff1f; b树在王道考研查找这一章&#xff0c;所以他的主要作用就是查找。 在…

基于单片机一种风速测量仪的设计

文章目录 前言资料获取设计介绍功能介绍设计程序具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…

WEBSERVER完整体系

为什么还要做 WebServer? ①对于缺乏项目经验的C++新手,网上可找到的详细项目资料有限,多为简单的管理系统、五子棋游戏、工具库或WebServer等。 ②WebServer项目有助于整合面试所需的基础知识,如C/C++语言、操作系统(包括I/O调用和多路复用机制)、计算机网络(处理网络…

NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现

0x01 产品简介 NUUO网络视频录像机(Network Video Recorder,简称NVR)是NUUO Inc.生产的一种专业视频监控设备,它广泛应用于零售、交通、教育、政府和银行等多个领域。能够同时管理多个IP摄像头,实现视频录制、存储、回放及远程监控等功能。它采用先进的视频处理技术,提供…

生成身临其境的环境模型

清华大学创作的AI软件 aiuni Aiuni.ai是一个基于Unique3D的在线AI图片转3D模型生成建模工具&#xff0c;它的核心功能基于Unique3D&#xff0c;能够从单张图片中生成高效率且高质量的3D模型建模。这项技术的出现&#xff0c;为3D视觉艺术家、游戏开发者以及教育工作者等专业人士…

keil5移植freeRTOS中出现的erro,无法识别_asm

不识别__ASM关键字&#xff0c;并对汇编语法报错。 static portFORCE_INLINE void vPortClearBASEPRIFromISR( void ){__asm{msr basepri, # 0}} 解决办法: 编译器对于汇编和C的混合代码格式做了要求&#xff0c;按照以下方式修改汇编代码&#xff0c;即可编译通过。 static p…

语言课学习系统的设计与实现

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱&#xff0c;出错率高&#xff0c;信息安全…

游戏加速器行业需要办理什么许可证?

我们先来看下&#xff0c;目前做游戏加速器的企业都办理了哪些许可证&#xff1f; 1、流星游戏加速器 流星游戏加速器 流星游戏加速器办理了许可资质 他们办理了IDC、ISP、CDN、VPN、ICP、EDI等增值电信业务经营许可证&#xff0c;办理的还是比较全面的。 2、香肠游戏加速器…

CSS —— 界面布局

flexbox - 弹性盒子布局&#xff08;弹性布局&#xff09; 采用flex布局的元素&#xff0c;称为 Flex 容器&#xff08;flex container&#xff09;&#xff0c;简称"容器" flex-direction 用于设置主轴方向&#xff1b;子元素默认是按照主轴线排列的&#xff0c;所…

Ubuntu中安装Nginx实现靶场的端口转发及其过程中错误的处理

1、安装Nginx需要的配置文件和库&#xff1a; sudo apt-get update sudo apt-get install -y g libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev 2、下载Nginx: wget -c https://nginx.org/download/nginx-1.18.0.tar.gz 3、解压Nginx: tar -zxvf nginx-1.18.0.ta…

群晖SPK套件之NAS公网助手的安装教程

本文将详细介绍神卓互联NAS助手SPK套件的安装步骤&#xff0c;帮助您轻松实现外网访问内网NAS设备。 目录 一、准备工作 二、下载SPK套件 三、安装SPK套件 四、登录套件并配置外网访问 一、准备工作 在开始安装之前&#xff0c;请确保您已满足以下条件&#xff1a; NAS设…

简单说说关于shell中zsh和bash的选择

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、什么是shell、bash、zsh?2.1 bash2.2 zsh 三、选择 Bash 还是 Zsh&#xff1f;…

力扣题/回溯/单词搜索

单词搜索 力扣原题 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那…

2024微信个人名片在线生成HTML源码

源码介绍 微信个人名片卡片在线生成&#xff0c;这是一款微信个人名片生成网站源码&#xff0c;无第三方接口&#xff0c;本地直接生成可长期使用。 主要用于生成用户个性化的名片页面&#xff0c;包括头像、姓名、联系方式、个人介绍等信息。 在本地浏览器打开即可,源码是h…

使用VSCode 安装SAP Fiori 开发所需插件

文章目录 1.0 SAP Fiori Tools - Extension Pack2.0 SAPUI5 Extension 1.0 SAP Fiori Tools - Extension Pack 此插件集成了SAP Fiori 的多个插件&#xff0c;安装这个将包含其他Fiori安装插件 SAP Fiori工具-扩展包 SAP Fiori Tools简化了SAP Fiori元素应用程序的开发。包括…

AI基础 L17 Logic Agents II

Logic in General • Logics are formal languages for representing information such that conclusions can be drawn • Syntax defines the sentences in the language • Semantics define the “meaning” of sentences; i.e., define truth of a sentence in a world •…

文件存储阿里云

1.图片存储 图片存储是指将图片文件保存在服务器或云存储中的技术或服务。图片存储的主要目的是方便用户上传、存储、管理和分享图片文件。 图片存储可以分为两种主要类型&#xff1a;本地存储和云存储。 本地存储是将图片文件保存在本地服务器或计算机上的一种方式。这种存…

SpringBoot教师招聘管理系统---附源码81097

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.1.1 技术可行性 2.1.2 经济可行性 2.1.3 操作可行性 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功…