【MySQL】表的增删改查

ops/2024/9/20 6:55:51/ 标签: mysql, 数据库

目录

前言:

新增(Create):

查询(Retrieve):

别名:

去重:DISTINCT 

排序:ORDER BY :

条件查询:WHERE :

分页查询:LIMIT:

修改(Update):

删除(Delete):

内容总结:


前言:

在学会对数据库的操作后,我们就要进入到更为复杂的对表的操作,可以说MySQL的难点和数据库的核心操作基本都在对表的操作,包括后面要学到约束什么的基本也都是对表的操作,所以我们就要开始表的基本内容增删改查(CRUD)。

CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写。

为了方便叙述下面均采用下面参数的表(student)来进行表的各类操作的演示。

新增(Create):

语法:

INSERT [INTO] table_name [(column [, column] ...)] VALUES (value_list) [, (value_list)] ...value_list: value, [, value] ...

小写简单版:

在表名后面可以指定某些列用括号括起来,里面的参数用逗号分开,values要对应。

基本语法如上,下面为它的多种用法👍👍👍。

(1)单行数据 + 全列插入

insert into student values ('唐三藏',65,71,83);

(2)多行数据 + 全列插入

如果可以的话我们是更加推荐多行数据插入的因为这样只需要向数据库发起一次请求,效率肯定要比访问数据库多次要高得多。

用逗号隔开即可。

insert into student values ('孙悟空', 81,45,63), ('张三', 73,84,56);

(3)多行数据 + 指定列插入

insert into student (name,math) values ('李四', 35), ('王五',83);

还有一个单行数据 + 指点列插入,这个由于和前面的这些类似,这里就不再演示。 

最终插入的数据如下:

扩展SQL语言特性:

友友们可以看看下面这个SQL语句,math的类型是int,但是这里插入varchar类型却显示成功了,这是为什么呢?

解释如下: SQL是一个“弱类型”的编程语言,和Java是不太一样的(强类型),当然C语言也是弱类型语言,那么我们如何理解弱类型和强类型呢?

在一个语言中,越是支持“隐式类型转换”,类型系统就越弱,越不支持“隐式类型转换”类型系统就越强,我们在学习Java的过程中不难看到Java基本都要自己手动转换(例如字符和整形,在c语言中二者可以直接相减,在Java中我们要进行手动转换后才能运算)。

查询(Retrieve):

语法:

SELECT [DISTINCT] {* | {column [, column] ...} [FROM table_name][WHERE ...][ORDER BY column [ASC | DESC], ...]LIMIT ...

简单小写如下: 

(1)全列查询:

用法如下:

SELECT * FROM exam_result;

查找我们上面插入的数据。

但是在通常情况下不建议使用 * 进行全列查询。

原因主要有以下两点: 

(1)查询的列越多,需要传输的数据量越大,数据的压力越大。

(2)可能会影响到索引的使用。

(2)指定列查询:

SELECT id, name, english FROM exam_result;

 注意:指定列的顺序不需要按定义表的顺序来。

(3)查询字段为表达式: 

-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;

运用我们上面演示来进行。

注意:还记得一开始就和大家说的,MySQL是一个“客户端-服务器”结构的程序,此时数据是存储在服务器上的硬盘上的。上述的表达式查询,只是针对服务器响应得到的临时结果进行了计算,不会影响硬盘上存储的数据本身。

别名:

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称,语法:

SELECT column [AS] alias_name [...] FROM table_name;

用法如下: 

去重:DISTINCT 

使用DISTINCT关键字对某列数据进行去重:

语法:

演示如下: 

使用distinct语句:

排序:ORDER BY :

具备排序功能我们才能更好的管理数据。

语法:

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...] ORDER BY column [ASC|DESC], [...];

小写: 

注意点:

(1)没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。

(2)NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面  。

针对一列排序:

演示如下:

使用表达式及别名排序:

演示如下:这里会出现NULL的原因是,元素只要和NULL发生运算都为NULL。

可以对多个字段进行排序,排序优先级随书写顺序:

演示如下:

原始数据如下:我们要对math和english排序,math的优先级大于english

排序前:

排序后:

降序排序:

默认排序是升序,我们可以在要排序的列后面加一个desc就可以升序排序。

条件查询:WHERE :

比较运算符:

运算符说明
>, >=,<,<=大于,大于等于,小于,小于等于
=等于,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)WHERE条件可以使用表达式,但不能使用别名。

(2)AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分。

这里给大家解释一下为什么在使用where表达式不可以使用别名而order by却可以。这是因为一个SQL的执行顺序:

(1)遍历表

(2)带入条件(where)

(3)计算列名中的表达式(定义别名)

(4)排序/聚合等操作

 我们可以看见带入条件的顺序在定义别名之前,所以在where中不能够使用别名。

上述的演示如下🌸🌸🌸:

1.基本查询:

这个和一般语言的用法差不多。

-- 查询英语不及格的同学及英语成绩 ( < 60 )
SELECT name, english FROM exam_result WHERE english < 60;
-- 查询语文成绩好于英语成绩的同学
SELECT name, chinese, english FROM exam_result WHERE chinese > english;
-- 查询总分在 200 分以下的同学
SELECT name, chinese + math + english 总分 FROM exam_result WHERE chinese + math + english < 200;

 2.AND与OR:

-- 查询语文成绩大于80分,且英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 and english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
SELECT * FROM exam_result WHERE chinese > 80 or english > 80;
-- 观察AND 和 OR 的优先级:
SELECT * FROM exam_result WHERE chinese > 80 or math>70 and english > 70;
SELECT * FROM exam_result WHERE (chinese > 80 or math>70) and english > 70;

 这里和我们一般学的语言&& 和 || 不一样友友们要区分清楚。

3.范围查询:

(1)BETWEEN ... AND ...  

语法:

-- 查询语文成绩在 [80, 90] 分的同学及语文成绩
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
-- 使用 AND 也可以实现
SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese 
<= 90;

注意我们一般语言的范围默认是左闭右开,这里的between and 是左闭右闭。 

(2)IN

语法:

-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
-- 使用 OR 也可以实现
SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math 
= 98 OR math = 99;

where是连续的,in就是一个一个点。

4.模糊查询:LIKE

-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';-- 匹配到孙权

 “ = ” 是精确查询,要求查询出的结果和条件中的指定的内容完全一致。

“ like ” 是模糊查询,不要求完全一致,只要有一部分一致即可。这里需要引入通配符。注意:*不是like的通配符,like的通配符是“%”,“_”.

%:可以匹配任意多个字符(包括0),而_不能匹配0个字符。

例如:

 like这种模糊匹配在SQL中要慎用,因为开销很大,性能低下,本来SQL就不适合做这种😭😭😭。

5.NULL 的查询:IS [NOT] NULL  

-- 查询 qq_mail 已知的同学姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL;
-- 查询 qq_mail 未知的同学姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NULL;

这个简单就是和英文句子的意思一样。

分页查询:LIMIT:

有的时候虽然是进行条件查询,但是查询到的结果仍然非常多(例如浏览器就给你进行进行分页)

语法:

-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;

总共有三种用法: 

1.limit n;

从 0 开始,筛选 n 条结果

2.limit s, n;

从 s 开始,筛选 n 条结果

3.limit n offset s;

从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用这种

修改(Update):

语法:

UPDATE table_name SET column = expr [, column = expr ...][WHERE ...] [ORDER BY ...] [LIMIT ...]

小写:

也可以一次修改多个列,set后面写多组列用‘ ,’ 分别进行 = 赋值即可。

例如:

原来唐三藏的math为71现在我们要把它改成98. 

修改结果如下:

注意:

(1)update 会修改服务器硬盘上存储的数据,且此操作不能撤回。

(2)注意MySQL语法不支持math += 10;这种写法,只能math = math + 10;

删除(Delete):

语法:

DELETE FROM  table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

 

删除唐三藏的数据。 

如果不指定条件的话就是删除所有数据,它和drop table 的区别是:drop是表和内容都没了,delete是只有数据没了,表还在。

内容总结:

新增:

-- 单行插入
insert into 表(字段1, ..., 字段N) values (value1, ..., value N);
-- 多行插入
insert into 表(字段1, ..., 字段N) values 
(value1, ...),
(value2, ...),
(value3, ...);

查询:

-- 全列查询
select * from 表
-- 指定列查询
select 字段1,字段2... from 表
-- 查询表达式字段
select 字段1+100,字段2+字段3 from 表
-- 别名
select 字段1 别名1, 字段2 别名2 from 表
-- 去重DISTINCT
select distinct 字段 from 表
-- 排序ORDER BY
select * from 表 order by 排序字段
-- 条件查询WHERE:
-- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR 
(8)NOT
select * from 表 where 条件

修改:

update 表 set 字段1=value1, 字段2=value2... where 条件

删除:

delete from 表 where 条件

希望友友们要自己实际操作一下,本身和数据结构比起来就不难,就是一个熟练度的问题。

结语:

其实写博客不仅仅是为了教大家,同时这也有利于我巩固知识点,和做一个学习的总结,由于作者水平有限,对文章有任何问题还请指出,非常感谢。如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注,这可以激励我写出更加优秀的文章。


http://www.ppmy.cn/ops/6396.html

相关文章

.net反射(Reflection)

文章目录 一.概念&#xff1a;二.反射的作用&#xff1a;三.代码案例&#xff1a;四.运行结果&#xff1a; 一.概念&#xff1a; .NET 反射&#xff08;Reflection&#xff09;是指在运行时动态地检查、访问和修改程序集中的类型、成员和对象的能力。通过反射&#xff0c;你可…

C++:多态

先看到多态的定义&#xff1a; C的多态是指在面向对象程序设计中&#xff0c;允许使用基类的指针或引用来调用派生类的虚函数的特性。这样的调用将根据对象的实际类型来动态绑定到适当的函数实现&#xff0c;实现了不同对象调用相同函数的不同行为。 虚函数 通过使用虚函数&am…

独孤思维:集中火力赚钱,单点爆破

独孤的粉丝体量比较小&#xff0c;不如很多大咖。 所以&#xff0c;独孤给自己设定了一个规则&#xff1a; 即自己体量不够大的时候&#xff0c;这一段时间&#xff0c;只主推一个项目。 独孤之前同时推了好几个项目的时候。 好多粉丝过来问&#xff0c;独孤&#xff0c;你…

从选品策划、变现、数据分析、App矩阵多方面,分享App蓝海精细化运营玩法

本篇分享主要分为以下两部分: 通过七麦和蝉大师等数据工具或者同行网站选出蓝海产品; 通过版本、语言、皮肤等实现 App 矩阵,获得更多用户并进行差异化变现。 文章目录 —前言—选品标准一个小案例更进阶的选品思路流量变现App 矩阵最后总结—前言— 据官方统计,App St…

20240329-1-SVM面试题

SVM面试题 1. SVM直观解释 SVM&#xff0c;Support Vector Machine&#xff0c;它是一种二分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;间隔最大使它有别于感知机&#xff1b;其还包括核技巧&#xff0c;这使它成为实质上的非线性分类…

大屏-flex布局

<div class"container"><div class"title">标题</div><div class"content"><div class"item"></div><div class"item" style"width: calc((100% - 30) / 3 * 2)"><…

就业班 第三阶段(ansible) 2401--4.16 day2 ansible2 剧本+角色

六、Ansible playbook 简介 playbook 是 ansible 用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。   通过 playbook 的详细描述&#xff0c;执行其中的一系列 tasks &#xff0c;可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的…

【架构方法论(一)】架构的定义与架构要解决的问题

文章目录 一. 架构定义与架构的作用1. 系统与子系统2. 模块与组件3. 框架与架构4. 重新定义架构&#xff1a;4R 架构 二、架构设计的真正目的-别掉入架构设计的误区1. 是为了解决软件复杂度2. 简单的复杂度分析案例 三. 案例思考 本文关键字 架构定义 架构与系统的关系从业务逻…

R-tree:一种高效的空间数据索引结构

引言&#xff1a; 在处理大规模空间数据集&#xff0c;如地理信息系统&#xff08;GIS&#xff09;中的遥感数据时&#xff0c;高效的数据存储和查询至关重要。R-tree&#xff0c;作为一种自平衡的空间数据索引结构&#xff0c;因其出色的性能而在空间数据库中得到了广泛应用。…

5G网络架构;6G网络架构

目录 5G和6G架构 6G网络架构 5G和6G架构 在设计和功能上有显著的区别,这主要体现在它们各自的核心特点、优势和应用场景上。 5G技术架构的核心特点包括高速率与低延迟、大容量与高密度以及网络切片。高速率与低延迟极大地提升了用户体验,支持更多实时应用和大规模数据传输…

数据可视化怎么做

数据可视化是一个将数据通过视觉元素如图表、图形和地图等形式展现出来的过程&#xff0c;目的在于帮助人们更容易理解和分析数据。以下是进行数据可视化的一些步骤和建议&#xff1a; 来百度APP畅享高清图片 明确目标&#xff1a;确定您希望通过可视化传达的信息或故事。这有助…

selenium_定位输入框并输入值_CLASS_NAME

找到class_name # 导包 from selenium import webdriver from time import sleep# 获取浏览器对象 from selenium.webdriver.common.by import Bydriver webdriver.Edge() # 打开url url r"C:\Users\黄永生\Desktop\软件测试\tpshop\web自动化_day01_课件笔记资料代码\0…

【算法】深入理解二分查找算法及其应用

文章目录 1. 朴素二分查找的基本步骤&#xff1a;2. 总结二分模板 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找目标值的高效算法。它的基本思想是将数组分成两半&#xff0c;然后确定目标值可能存在的那一半&#xff0c;重复这个过程直到找到目标值或…

redhatcsa学习笔记--题目+答案

一、semanage命令 semanage命令 – 查询与修改安全上下文 semanage命令来自英文词组“SELinux manage”的缩写&#xff0c;其功能是用于查询与修改安全上下文。semanage的功能类似于chcon命令&#xff0c;它们都可以用于设置文件的SELinux安全上下文策略&#xff0c;而semana…

用例设计-抖音视频上下滑动用例

功能 正向case&#xff1a; 1、正常速度下滑&#xff0c;视频类、图片类、直播类资源能够正常展示 2、快速下滑&#xff0c;资源能够正常加载不会出现卡顿 3、下滑没有可加载的资源时&#xff0c;提示用户无新的资源 4、下滑幅度较大&#xff0c;更新一批新的资源 5、本地资源…

生成人工智能体:人类行为的交互式模拟论文与源码架构解析(1)——场景故事介绍

生成NPC为交互应用程序创建逼真的人类行为模拟。在这项工作中&#xff0c;我们通过将二十五个NPC放置在一个沙盒环境中&#xff08;类似于The Sims&#xff0c;模拟人生&#xff09;&#xff0c;展示了生成NPC的能力。用户可以观察和干预NPC的日常计划、分享新闻、建立关系以及…

OpenHarmony南向开发案例【智慧中控面板(基于 Bearpi-Micro)】

1 开发环境搭建 【从0开始搭建开发环境】【快速搭建开发环境】 参考鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或复制转到。 【注意】&#xff1a;快速上手教程第六步出拉取代码时需要修改代码仓库地址 在MobaXterm中输入…

javaWeb项目创建

文章目录 创建动态Web项目代码运行html文件 创建动态Web项目 创建Servlet的文件 代码 index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-…

linux /proc进程文件目录介绍

参考&#xff1a;https://zhuanlan.zhihu.com/p/619966043 有时候想只查出来进程号&#xff0c;可以通过/proc/下查出该进程的运行及执行脚本情况信息 /proc/pid子目录 记录了进程的相关信息cmdline文件&#xff1a;包含了进程启动时使用的完整命令行参数。 cwd符号链接&#x…

2024运营级租房源码管理PHP后台+uniapp前端(app+小程序+H5)

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 一、详细介绍 房产系统 一款基于ThinkPHPUniapp开发的房产管理系统&#xff0c;支持小程序、H5、APP&#xff1b;包含房客、房东、经纪人三种身份。核心功能有&#xff1a;新盘销售、房屋租赁、地图找房、房源代理、…