【MySQL】增删改查操作(基础)

文章目录

  • 1、新增操作(Create)
    • 1.1单行数据+全列插入
    • 1.2多行数据+指定列插入
  • 2、查询操作(Retrieve)
    • 2.1全列查询
    • 2.2指定列查询
    • 2.3指定列查询
    • 2.4别名(as)
    • 2.5去重(distinct)
    • 2.6排序(order by)
    • 2.7条件查询(where)
    • 2.8分页查询(limit)
  • 3、修改操作(Update)
  • 4、删除操作(Delete)


1、新增操作(Create)

在我们的数据库中,用insert into来进行新增操作,首先我们需要一张表
注意:在进行下列操作时,要选中数据库进行操作

mysql> create table student(id int, name varchar(20));
Query OK, 0 rows affected (0.02 sec)

1.1单行数据+全列插入

一次只插入一行,每一行都会插入数据

insert into 表名 values (,...);

举例如下:

mysql> insert into student values(1,'张三');
Query OK, 1 row affected (0.01 sec)

1.2多行数据+指定列插入

insert into student (表名,表名...) values (,...);

举例如下:

mysql> insert into student (id, name) values (2, '李四'),(3, '王五');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

这里通过 mysql 客户端给出的信息,也能看到我们成功插入了 2 行数据
注意:values()括号中的内容,个数和类型一定要和表的结构匹配

2、查询操作(Retrieve)

创建考试成绩表

create table exam_result(id int, name varchar(20), chinese decimal(3,1), math decimal(3,1), english decimal(3,1)
);

插入测试数据

insert into exam_result (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);

2.1全列查询

查询表里的所有列,*表示通配符

     --select * from 表名
mysql> select * from exam_result;
+------+-----------+---------+------+---------+
| 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 |
+------+-----------+---------+------+---------+
7 rows in set (0.00 sec)

2.2指定列查询

这个查询不用按照表中列的顺序来查询,只要表中包含该列即可:

     --select 列名, 列名... from 表名;
mysql> select id, name from exam_result;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 唐三藏    |
|    2 | 孙悟空    |
|    3 | 猪悟能    |
|    4 | 曹孟德    |
|    5 | 刘玄德    |
|    6 | 孙权      |
|    7 | 宋公明    |
+------+-----------+
7 rows in set (0.00 sec)

2.3指定列查询

查询每位同学语文成绩+10分的结果

mysql> select name, chinese+10 from exam_result;
+-----------+------------+
| name      | chinese+10 |
+-----------+------------+
| 唐三藏    |       77.0 |
| 孙悟空    |       97.5 |
| 猪悟能    |       98.0 |
| 曹孟德    |       92.0 |
| 刘玄德    |       65.5 |
| 孙权      |       80.0 |
| 宋公明    |       85.0 |
+-----------+------------+
7 rows in set (0.00 sec)

查询每个同学的总成绩

mysql> select name, chinese + math + english from exam_result;
+-----------+--------------------------+
| name      | chinese + math + english |
+-----------+--------------------------+
| 唐三藏    |                    221.0 |
| 孙悟空    |                    242.5 |
| 猪悟能    |                    276.0 |
| 曹孟德    |                    233.0 |
| 刘玄德    |                    185.5 |
| 孙权      |                    221.5 |
| 宋公明    |                    170.0 |
+-----------+--------------------------+
7 rows in set (0.00 sec)

注意:select 只是查询,并不会修改原来表中的数据,而查询的结果是一个 “临时表”,这个查询出来的表是不会写到硬盘里面去的

2.4别名(as)

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

mysql> select name, chinese + math + english as total from exam_result;
+-----------+-------+
| name      | total |
+-----------+-------+
| 唐三藏    | 221.0 |
| 孙悟空    | 242.5 |
| 猪悟能    | 276.0 |
| 曹孟德    | 233.0 |
| 刘玄德    | 185.5 |
| 孙权      | 221.5 |
| 宋公明    | 170.0 |
+-----------+-------+
7 rows in set (0.00 sec)

2.5去重(distinct)

     --98重复了
mysql> select math from exam_result;
+------+
| math |
+------+
| 98.0 |
| 78.0 |
| 98.0 |
| 84.0 |
| 85.0 |
| 73.0 |
| 65.0 |
+------+
7 rows in set (0.00 sec)--去重结果:
mysql> select distinct math from exam_result;
+------+
| math |
+------+
| 98.0 |
| 78.0 |
| 84.0 |
| 85.0 |
| 73.0 |
| 65.0 |
+------+
6 rows in set (0.01 sec)

2.6排序(order by)

要想让查询的结果“有序”就必须手动使用order by语句,让MySQL主动排序

     --select * from 表名 order by 列名/表达式;
mysql> select * from exam_result order by chinese;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    5 | 刘玄德    |    55.5 | 85.0 |    45.0 |
|    1 | 唐三藏    |    67.0 | 98.0 |    56.0 |
|    6 | 孙权      |    70.0 | 73.0 |    78.5 |
|    7 | 宋公明    |    75.0 | 65.0 |    30.0 |
|    4 | 曹孟德    |    82.0 | 84.0 |    67.0 |
|    2 | 孙悟空    |    87.5 | 78.0 |    77.0 |
|    3 | 猪悟能    |    88.0 | 98.0 |    90.0 |
+------+-----------+---------+------+---------+
7 rows in set (0.00 sec)

此处默认是按照升序排序,如果要使用降序排序,需要加上desc关键字

mysql> select * from exam_result order by chinese desc;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    3 | 猪悟能    |    88.0 | 98.0 |    90.0 |
|    2 | 孙悟空    |    87.5 | 78.0 |    77.0 |
|    4 | 曹孟德    |    82.0 | 84.0 |    67.0 |
|    7 | 宋公明    |    75.0 | 65.0 |    30.0 |
|    6 | 孙权      |    70.0 | 73.0 |    78.5 |
|    1 | 唐三藏    |    67.0 | 98.0 |    56.0 |
|    5 | 刘玄德    |    55.5 | 85.0 |    45.0 |
+------+-----------+---------+------+---------+
7 rows in set (0.00 sec)

也可以按照别名的方式进行order by直接表达式是一样的

mysql> select name, chinese + math + english as total from exam_result order by total;
+-----------+-------+
| name      | total |
+-----------+-------+
| 宋公明    | 170.0 |
| 刘玄德    | 185.5 |
| 唐三藏    | 221.0 |
| 孙权      | 221.5 |
| 曹孟德    | 233.0 |
| 孙悟空    | 242.5 |
| 猪悟能    | 276.0 |
+-----------+-------+
7 rows in set (0.00 sec)

order by 也可以指定多个列排序,通过多个列排序约定更复杂的比较规则

     --select * from 表名 order by 列名[desc], 列名[desc];--先按照第一列排序,第一列相同了,再按照第二列排序
mysql> select * from exam_result order by math desc,chinese desc;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    3 | 猪悟能    |    88.0 | 98.0 |    90.0 |
|    1 | 唐三藏    |    67.0 | 98.0 |    56.0 |
|    5 | 刘玄德    |    55.5 | 85.0 |    45.0 |
|    4 | 曹孟德    |    82.0 | 84.0 |    67.0 |
|    2 | 孙悟空    |    87.5 | 78.0 |    77.0 |
|    6 | 孙权      |    70.0 | 73.0 |    78.5 |
|    7 | 宋公明    |    75.0 | 65.0 |    30.0 |
+------+-----------+---------+------+---------+
7 rows in set (0.00 sec)

2.7条件查询(where)

比较运算符:
在这里插入图片描述
逻辑运算符:
在这里插入图片描述
注意:
1.WHERE条件可以使用表达式,但不能使用别名。
2.AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

查询语文成绩大于60分的同学:

mysql> select name, chinese from exam_result where chinese > 60;
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 唐三藏    |    67.0 |
| 孙悟空    |    87.5 |
| 猪悟能    |    88.0 |
| 曹孟德    |    82.0 |
| 孙权      |    70.0 |
| 宋公明    |    75.0 |
+-----------+---------+
6 rows in set (0.01 sec)

数据库服务器收到SQL之后就会遍历表中的每一个数据(行)取出当前行,带入到条件之中,如果条件成立,当前这一行数据就会进入到结果集合中,如果不成立,跳过进入下一行
上述条件查询的过程,可以理解成按照条件进行“筛选”

可以在条件选择的时候使用order by来排序
(如果没有显示使用order by,顺序是不可预期的)

mysql> select name, chinese from exam_result where chinese > 60 order by chinese;
+-----------+---------+
| name      | chinese |
+-----------+---------+
| 唐三藏    |    67.0 |
| 孙权      |    70.0 |
| 宋公明    |    75.0 |
| 曹孟德    |    82.0 |
| 孙悟空    |    87.5 |
| 猪悟能    |    88.0 |
+-----------+---------+
6 rows in set (0.00 sec)

查询语文成绩大于80或者英语大于60的同学:

mysql> select name, chinese, english from exam_result where chinese > 80 or english > 60;
+-----------+---------+---------+
| name      | chinese | english |
+-----------+---------+---------+
| 孙悟空    |    87.5 |    77.0 |
| 猪悟能    |    88.0 |    90.0 |
| 曹孟德    |    82.0 |    67.0 |
| 孙权      |    70.0 |    78.5 |
+-----------+---------+---------+
4 rows in set (0.01 sec)

查询数学成绩在[80 90]的同学:

mysql> select name, math from exam_result where math >= 80 and math <= 90;
+-----------+------+
| name      | math |
+-----------+------+
| 曹孟德    | 84.0 |
| 刘玄德    | 85.0 |
+-----------+------+
2 rows in set (0.00 sec)
mysql> select name, math from exam_result where math between 80 and 90;
+-----------+------+
| name      | math |
+-----------+------+
| 曹孟德    | 84.0 |
| 刘玄德    | 85.0 |
+-----------+------+
2 rows in set (0.00 sec)

上述两种写法都是可以的

查询英语成绩是56分,67分,77分的同学:

mysql> select name, english from exam_result where english in(56,67,77);
+-----------+---------+
| name      | english |
+-----------+---------+
| 唐三藏    |    56.0 |
| 孙悟空    |    77.0 |
| 曹孟德    |    67.0 |
+-----------+---------+
3 rows in set (0.00 sec)
mysql> select name, english from exam_result where english = 56 or english = 67 or english = 77;
+-----------+---------+
| name      | english |
+-----------+---------+
| 唐三藏    |    56.0 |
| 孙悟空    |    77.0 |
| 曹孟德    |    67.0 |
+-----------+---------+
3 rows in set (0.00 sec)

上述这两种也是可以的

查询姓‘孙’的同学:
%匹配任意多个(包括0个)字符

mysql> select name from exam_result where name like '孙%';
+-----------+
| name      |
+-----------+
| 孙悟空    |
| 孙权      |
+-----------+
2 rows in set (0.00 sec)

_匹配严格的一个任意字符

mysql> select name from exam_result where name like '孙_';
+--------+
| name   |
+--------+
| 孙权   |
+--------+
1 row in set (0.00 sec)

查询没有数学成绩的同学:

mysql> select name, math from exam_result where math is null;
Empty set (0.00 sec)

查询有数学成绩的同学:

mysql> select name, math from exam_result where math is not null;
+-----------+------+
| name      | math |
+-----------+------+
| 唐三藏    | 98.0 |
| 孙悟空    | 78.0 |
| 猪悟能    | 98.0 |
| 曹孟德    | 84.0 |
| 刘玄德    | 85.0 |
| 孙权      | 73.0 |
| 宋公明    | 65.0 |
+-----------+------+
7 rows in set (0.00 sec)

2.8分页查询(limit)

分页查询,限制了每次查询显示的最多为多少条数据,比如我们现在只查询俩条数据:

mysql> select * from exam_result limit 2;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    1 | 唐三藏    |    67.0 | 98.0 |    56.0 |
|    2 | 孙悟空    |    87.5 | 78.0 |    77.0 |
+------+-----------+---------+------+---------+
2 rows in set (0.00 sec)

搭配offset关键字,offset称为偏移量(相当于下标),offset默认是从0开始的

mysql> select * from exam_result limit 2 offset 2;
+------+-----------+---------+------+---------+
| id   | name      | chinese | math | english |
+------+-----------+---------+------+---------+
|    3 | 猪悟能    |    88.0 | 98.0 |    90.0 |
|    4 | 曹孟德    |    82.0 | 84.0 |    67.0 |
+------+-----------+---------+------+---------+
2 rows in set (0.00 sec)

3、修改操作(Update)

     --update 表名 set 列名 = 值 where 条件
mysql> update exam_result set english = 56 where name = '曹孟德';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0--修改结果:
mysql> select name, english from exam_result;
+-----------+---------+
| name      | english |
+-----------+---------+
| 唐三藏    |    56.0 |
| 孙悟空    |    77.0 |
| 猪悟能    |    90.0 |
| 曹孟德    |    56.0 |
| 刘玄德    |    45.0 |
| 孙权      |    78.5 |
| 宋公明    |    30.0 |
+-----------+---------+
7 rows in set (0.00 sec)

修改多个列,set后面写多组列,分别进行= 赋值即可
修改操作也可以借助一些表达式,还可以搭配order by 和 limit
如果update不指定任何条件,所有的数据都会被修改

4、删除操作(Delete)

     --delete from 表名 where 条件;
mysql> delete from exam_result where name = '宋公明';
Query OK, 1 row affected (0.01 sec)--删除结果
mysql> select * from exam_result;
+------+-----------+---------+------+---------+
| 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 |    56.0 |
|    5 | 刘玄德    |    55.5 | 85.0 |    45.0 |
|    6 | 孙权      |    70.0 | 73.0 |    78.5 |
+------+-----------+---------+------+---------+
6 rows in set (0.00 sec)

注意:删除操作也是在操作数据库服务器的硬盘,需要小心
delete 的操作,后面的条件是可以跟 update 一样的,支持 where,order by,limit 等操作
如果没有写任何条件,那就是把整个表中的数据都删除了

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

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

相关文章

机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战,以及XGBClassifier分类器的调优策略

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战&#xff0c;以及XGBClassifier分类器的调优策略。XGBClassifier是基于eXtreme Gradient Boosting (XGBoost)算法的分类器模型&#xff0c;在机器学习领…

[Semi-笔记]Switching Temporary Teachers for Semi-Supervised Semantic Segmentation

目录 概要创新一&#xff1a;Dual Temporary Teacher挑战&#xff1a;解决&#xff1a; 创新二&#xff1a;Implicit Consistency Learning&#xff08;隐式一致性学习&#xff09;挑战&#xff1a;解决&#xff1a; 实验结果小结论文地址代码地址 分享一篇2023年NeurIPS的文章…

python 利用xpath 爬取一周天气

需求&#xff1a; 爬取 中国天气网指定城市一周的天气&#xff0c;以天津为例 实现&#xff1a; 1&#xff0c;先找到一周的数据位置。 divs html.xpath("//div[classhanml]") 2&#xff0c;再遍历每天。 trs div.xpath("./div/div[2]/table//tr[position…

PC发送指令给单片机控制LED(与上一篇文章相反)

此时要重新配置寄存器 &#xff0c;实现电脑往单片机传输数据 1、配置SCON寄存器的REN 即 REN 1 2、有TI&#xff08;发送中断&#xff09;就有RI&#xff08;接收中断&#xff09; 3、优化 发现发送 o 时&#xff0c;D5亮灯会有延迟 下面就是做到真正的无延迟的全双工通信 …

深入理解计算机系统 家庭作业 2.85

A 7111.01.11*V E2,M1.11,f0.11 位表示: exp:10000...001其中0有k-2个.frac:1100...000其中0有n-2个 B 有个默认条件就是E>n, En,M1.111...(小数部分n个1),f0.1111(n个1),V exp:111...11其中1有n-1个.frac:111...111其中1有n个 C有个默认条件就是没有符号位.最小的规格…

JS详解-设计模式

工厂模式&#xff1a; 单例模式&#xff1a; // 1、定义一个类class SingleTon{// 2、添加私有静态属性static #instance// 3、添加静态方法static getInstance(){// 4、判断实例是否存在if(!this.#instance){// 5、实例不存在&#xff0c;创建实例this.#instance new Single…

Android 关于apk反编译d2j-dex2jar classes.dex失败的几种方法

目录 确认路径正确直接定位到指定目录确定目录正确&#xff0c;按如下路径修改下面是未找到相关文件正确操作 确认路径正确 &#xff0c;即d2j-dex2jar和classes.dex是否都在一个文件夹里&#xff08;大部分的情况都是路径不正确&#xff09; 直接定位到指定目录 路径正确的…

第12届蓝桥杯省赛 ---- C/C++ C组

文章目录 1. ASC2. 空间3. 卡片4. 相乘5. 路径6.时间显示7.最少砝码8. 杨辉三角形9. 左孩子右兄弟 第12届蓝桥杯省赛&#xff0c;C/C C组真题&#xff0c;第10题不是很清楚&#xff0c;题解不敢乱放&#x1f601;&#x1f601;&#x1f601; 1. ASC 额。。。。 #include <i…

Java NIO Selector选择器源码分析

文章目录 前言Selector类结构Selector抽象类AbstractSelectorSelectorImplWindowsSelectorImpl三种SelectionKey集合 前言 Java NIO&#xff08;New I/O&#xff09;的Selector选择器是一个用于多路复用&#xff08;Multiplexing&#xff09;的I/O操作的关键组件。它允许一个单…

【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(九)

2021年全国职业院校技能大赛 网络系统管理&#xff08;样题9&#xff09;模块B&#xff1a;Windows环境 全国职业院校技能大赛执委会.技术专家组 2021年03月 竞赛简介 请认真阅读以下指引&#xff01; 比赛共4个小时&#xff0c;你必须自行决定如何分配你的时间。 当比赛结…

java-权限修饰符、代码块

一、权限修饰符概念 权限修饰符是用来控制一个成员被访问的范围&#xff0c;可以用来修饰成员变量、方法、构造方法、内部类 二、权限修饰符的分类 举例&#xff1a; 1、private 2、空着不写 3、protected 4、public 三、权限修饰符的使用规则 实际开发中&#xff0c;一般使…

Mahalanobis距离(马氏距离)的本质

马氏距离是加权 ℓ 2 \ell_2 ℓ2​范数的特例。 马氏距离是一种基于样本分布的距离&#xff0c;加权矩阵是样本或总体协方差矩阵的逆&#xff0c;其本质为去相关数据标准化&#xff0c;通过数据变换&#xff0c;消除样本中不同特征维度间的相关性和量纲差异。

电子台账:用控件颜色提高工作效率和数据质量

目录 1 前言 2 用页签颜色表示月度数据锁定状态 3 模板制作中定位数据源表格及其行列 3.1 鼠标移过水平过滤模板 3.2 鼠标移过垂直过滤模板 4 数据抓取过程对账页和源单元格同时染色 5 数据溯源过程&#xff0c;对企业数据源单元格染色 6 用键盘进行数据编辑后 1 前言 …

第1个Django应用及Django的请求处理

Python学习之路系列文章目录 python面向对象之警察与匪徒火拼场景模拟python面向对像之第二次笔记Django环境搭建及测试第1个Django应用及Django的请求处理 第1个Django应用及Django的请求处理 Python学习之路系列文章目录一、PyCharm创建django项目二、创建app什么是app怎么创…

JavaScript权威指南(第7版) 笔记 - 扩展操作符总结

扩展操作符 ... &#xff0c;不是真正意义上的JavaScript操作符。 let str "0123ABC" console.log(typeof ...str);// Uncaught SyntaxError: Unexpected token ... 上面的第2行代码会报错&#xff0c;扩展操作符 ... 只能在数组字面量、对象字面量、函数调用中使…

C语言中的字符与字符串:魔法般的函数探险

前言 在C语言的世界里&#xff0c;字符和字符串是两个不可或缺的元素&#xff0c;它们像是魔法般的存在&#xff0c;让文字与代码交织出无限可能。而在这个世界里&#xff0c;有一批特殊的函数&#xff0c;它们如同探险家&#xff0c;引领我们深入字符与字符串的秘境&#xff0…

Linux:进程等待究竟是什么?如何解决子进程僵尸所带来的内存泄漏问题?

Linux&#xff1a;进程等待究竟是什么&#xff1f;如何解决子进程僵尸所带来的内存泄漏问题&#xff1f; 一、进程等待的概念二、进程等待存在的意义三、如何进行进程等待3.1 wait()是实现进程等待1、wait()原型2. 验证wait()能回收僵尸子进程的空间 3.2 waitpid()实现进程等待…

560.和为K的子数组

560.和为K的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xf…

Win10 下 git error unable to create file Invalid argument 踩坑实录

原始解决方案参看&#xff1a;https://stackoverflow.com/questions/26097568/git-pull-error-unable-to-create-file-invalid-argument 本问题解决于 2024-02-18&#xff0c;使用 git 版本 2.28.0.windows.1 解决方案 看 Git 抛出的出错的具体信息&#xff0c;比如如下都来自…

c51 单片机如何控制小灯闪烁?

目录 硬件电路设计 软件编程 烧录程序 测试 调整和优化 C51单片机是一种经典的8位微控制器&#xff0c;广泛应用于各种嵌入式系统和智能控制项目中。 C51单片机控制小灯闪烁主要涉及到硬件电路设计和软件编程两个方面。下面是一个基本的步骤说明&#xff1a; 硬件电路设计…