【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.hqwc.cn/news/595541.html

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

相关文章

【毕业论文】酒店价格可视化查询系统设计方案

【毕业论文】酒店价格可视化查询系统设计方案 1. 系统概述 本系统旨在为用户提供一个一站式的酒店价格查询和可视化服务。系统将从多个在线平台&#xff08;如美团、大众点评、抖音等&#xff09;采集酒店价格信息&#xff0c;并提供一个用户友好的界面&#xff0c;让用户能够…

【C++】c++11新特性(一)

目录 { }列表初始化 内置类型---对单值变量及数组的初始化 列表初始化时进行的类型转换 自定义类型---对类对象或结构的初始化 initializer_list 1. 定义接受 initializer_list 参数的构造函数 2. 在函数中使用 initializer_list 参数 3. 使用 initializer_list 与 vect…

基础总结篇:Activity生命周期

private int param 1; //Activity创建时被调用 Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, “onCreate called.”); setContentView(R.layout.lifecycle); Button btn (Button) findViewById(R.id.…

柯桥外语机构商务英语学习,“五星级”酒店到底是five star还是five stars?这个千万别搞错!

“五星级酒店”的英语表达 关于酒店&#xff0c;大家都知道有星级之分&#xff1b;其中&#xff0c;最高级的酒店当属“五星级”了&#xff1b; 那么问题来了&#xff0c;这个“五星级”的英语&#xff0c;究竟是“five star”&#xff0c;还是“five stars”呢&#xff1f; 其…

SAP ERP出海解决方案提供商【工博科技】,为中国企业“出海”护航

当今高质量发展成为主题&#xff0c;中国企业正积极将创新成果、产品、服务“走出去”。然而出海企业面临着充满不确定性的国际环境带来的风险管控挑战和全球化经营带来的竞争挑战&#xff0c;必须要不断提升风险管控能力和综合竞争实力。其中&#xff0c;成熟的数字化能力可以…

MySQL中的redo log 和 undo log

undo log和redo log 先引入两个概念&#xff1a; 当我们做了一些操作 (update/delete/insert)&#xff0c;提交事务后要操作MySql中的数据。 为了能够提升性能&#xff0c;引入了两块区域&#xff1a;内存结构和磁盘结构。 磁盘结构&#xff1a; 主要存储的就是数据页&#x…

非关系型数据库——Redis基本操作

目录 一、Redis数据库常用命令 1.Set——存放数据 2.Get——获取数据 3.Keys——获取符合条件的键值 4.Exists——判断键值是否存在 5.Del——删除指定键值 6.Type——获取键值对应的类型 7.Rename——对已有键值重命名&#xff08;覆盖&#xff09; 8.Renamenx——对…

Oracle 中 where 和 on 的区别

1.Oracle 中 where 和 on 的区别 on&#xff1a;会先根据on后面的条件进行筛选&#xff0c;条件为真时返回该行&#xff0c;由于on的优先级高于left join&#xff0c;所以left join关键字会把左表中没有匹配的所有行也都返回&#xff0c;然后生成临时表返回,执行优先级高于…

【.Net】Polly

文章目录 概述服务熔断、服务降级、服务限流、流量削峰、错峰、服务雪崩Polly的基本使用超时策略悲观策略乐观策略 重试策略请求异常响应异常 降级策略熔断策略与策略包裹&#xff08;多种策略组合&#xff09; 参考 概述 Polly是一个被.NET基金会支持认可的框架&#xff0c;同…

C语言--指针终章

目录 1. sizeof和strlen的对⽐ 1.1 sizeof 1.2 strlen 1.3 sizeof 和 strlen的对⽐ 2. 数组和指针的理解——题目理解 2.1.sizeof 代码1&#xff1a; 代码2&#xff1a; 代码3&#xff1a; 代码4&#xff1a; 代码5&#xff08;二维数组&#xff09;&#xff1a; 2.2…

分类预测 | Matlab实现DRN深度残差网络数据分类预测

分类预测 | Matlab实现DRN深度残差网络数据分类预测 目录 分类预测 | Matlab实现DRN深度残差网络数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现DRN深度残差网络数据分类预测&#xff08;完整源码和数据&#xff09;&#xff0c;运行环境为Matl…

【Docker系列】在 Linux 上安装 Docker Compose 的简明步骤

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…