锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. MySQL基础操作总结_CRUD

MySQL基础操作总结_CRUD

0
  • 软件开发
  • 发布于 2024-09-19
  • 0 次阅读
黄健
黄健

文章目录

1.新增 insert

1.1 单行数据+全列插入

1.2 多行数据+指定列插入

2.查询 select

2.1 全列查询

2.2 指定列查询

2.3 查询字段包含表达式

2.4 别名

2.5 去重:distinct

2.6 排序:order by

2.7 条件查询

2.7.1 where条件查询

2.7.2 and与or查询

2.7.3 范围查询

2.7.4 模糊查询 like

2.7.5 NULL 的查询:IS [NOT] NULL

2.8 分页查询 : limit

3.修改 update

4.删除 delete



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

其中查询操作是应用场景最多的,需要熟练使用,下面对四个操作演示一下用法

1.新增 insert

语法

insert [into] table_name values (value_list)...
value_list: value,......

先创建一张学生表

 insert into student1 values (1001,20110,'张三','123456@qq.com');

1.1 单行数据+全列插入

插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致

 insert into student1 values (1001,20110,'张三','123456@qq.com');
 insert into student1 values (1002,20111,'李四','2123456@qq.com');

1.2 多行数据+指定列插入

插入两条记录,value_list 数量必须和指定列数量及顺序一致

insert into student1 (id,sn,name,qq_emial) values 
    (1003,20112,'王五','323456@qq.com'),
    (1004,20113,'赵六','42345@qq.com');

2.查询 select

在工作的场景中,查询操作出现的概率是四个操作中最大的,比起其它三个操作也相对复杂

语法

select  [distinct]{* | colunm [,ccolumn] ...]}
        [from table_name]
        [where ...]
        [order by column [asc|desc],...]
        limit...

创建一个考试成绩表

插入一些数据

insert into exam_result(id,name,chinese,math,english) values
        (71250,'张三',95.5,82.2,67.5),
        (69753,'李四',88,86,89),
        (12254,'王五',87,88,98),    
        (61256,'张六',73,85,65),
        (30258,'孙七',25,88,65),
        (11260,'柯八',82,76,45);

2.1 全列查询

一般不建议使用 *进行全列查询,原因如下:

1.全列查询是一个危险的操作,当数据库的数据很多时,全列查询意味着需要传输的数据量也很大

2.可能影响到索引的使用

 select*from exam_result;

2.2 指定列查询

指定列的查询不用按照表定义的顺序来

select name,chinese from exam_result;

2.3 查询字段包含表达式

表达式不包含字段时,就像上面介绍的指定列查询

包含一个字段的查询

select name,chinese+10 from exam_result;

表达式:chinese+10

包含多个字段的表达式查询

 select name,chinese+math from exam_result;

2.4 别名

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

语法

select column [as] alias_name[] from table_name;

as 后加别名,也可以省略

查询每个同学的总成绩:

 select name,chinese+math+english as count_result from exam_result;

省略as效果相同

2.5 去重:distinct

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

english 列有重复数据,使用DISTINCT关键字去重

select distinct english from exam_result;

2.6 排序:order by

asc 为升序

desc 为降序

默认为asc

语法

select ... from table ....order by column [asc|desc];

注意:

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

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

  3. 使用表达式及别名排序

查询同学及总分,由高到低

select name,chinese+math+english from exam_result order by chinese+math+english desc;

  1. 可以对多个字段进行排序,排序优先级随书写顺序
 select name,chinese,math from exam_result order by chinese desc,math;

2.7 条件查询

比较运算符:

| 运算符 | 说明 |
|——————|—————————————————|
| >, >=, <, <= | 大于,大于等于,小于,小于等于 |
| = | 等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL |
| <=> | 等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
| !=, <> | 不等于 |
| BETWEEN a0 ANDa1 | 范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
| IN (option, …) | 如果是 option 中的任意一个,返回 TRUE(1) |
| IS NULL | 是 NULL |
| IS NOT NULL | 不是 NULL |
| LIKE | 模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 |



逻辑运算符:

和逻辑关系运算符相同,and和\&\&,or和\|\|,not和非

|—–|——————————-|
| 运算符 | 说明 |
| AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
| OR | 任意一个条件为 TRUE(1), 结果为 TRUE(1) |
| NOT | 条件为 TRUE(1),结果为 FALSE(0) |






2.7.1 where条件查询

查询总分在 200 分以下的同学

注意:where条件可以用于表达式,不能使用别名

 select name,chinese+math+english 总分 from exam_result where chinese + math + english < 200;

如果加别名

MySQL不允许在WHERE子句中使用列别名,因为

计算WHERE子句时,可能尚未确定列值

2.7.2 and与or查询

注意: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 的优先级

不加括号时:

先执行 english > 80 and math > 80,返回结果后再执行or再返回结果,为了避免不必要的麻烦,我们可以在使用时加上括号

 select * from exam_result where chinese > 80 or english > 80 and math > 80;

加括号时:

select * from exam_result where (chinese > 80 or english > 80) and math > 80;

2.7.3 范围查询

1.between…and…

也可以用and 完成查询操作

查询语文成绩在 [80, 90] 分的同学及语文成绩

 select name,chinese from exam_result where chinese between 80 and 90;

2.in

使用or 也能实现

查询数学成绩是 76 或者 88 或者 82 或者 99 分的同学及数学成绩

 select name,math from exam_result where math in(76,88,82,99);

2.7.4 模糊查询 like

% 匹配任意多个(包括 0 个)字符

select name from exam_result where name like '张%';

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

select name from exam_result where name like '王_';

2.7.5 NULL 的查询:IS [NOT] NULL

查询 qq_mail 已知的同学姓名

 select name,qq_emial from student1 where qq_emial is not null;

查询 qq_mail 未知的同学姓名

 select name,qq_emial from student1 where qq_emial is null;

2.8 分页查询 : limit

从0开始筛选n条结果

… … limit n

从s开始筛选n条结果

… … limit s,n

比第二种方法更明确

从s开始筛选n条结果

… … limit n offset s

我们对成绩表按id分页,分别显示3页

第一页

 select id,name,math,english,chinese from exam_result order by id limit 3 offset 0;

第二页

select id,name,math,english,chinese from exam_result order by id limit 3 offset 3;

第三页

select id,name,math,english,chinese from exam_result order by id limit 3 offset 6;

如果没有结果会显示空,如果有结果但是不满足要查询的数量,也会显示不满足查询数量的数据,也就是如果只剩下两条数据,分页后查询的是三条,最后一页也会显示剩下的两条数据

3.修改 update

语法

update table_name set column = ……

将张三同学的数学成绩变更为 80 分

update exam_result set math = 80 where name = '张三';

将总成绩倒数前三的 3 位同学的英语成绩加上 30 分

update exam_result set english = english + 30 order by chinese + math + english limit 3;

4.删除 delete

涉及删除了,肯定又是一个比较危险的操作

语法

delete from tbale _name … …

删除张三同学的考试成绩

delete from exam_result where name = '张三';

删除整张表

delete from table_name;



原文链接: https://blog.csdn.net/chenchenchencl/article/details/127850062

标签: #MySQL 49 #软件开发 1171
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.