首页 > 数据库 >MySQL:CRUD

MySQL:CRUD

时间:2024-11-15 18:48:19浏览次数:3  
标签:name chinese english CRUD select student MySQL math

MySQL表的增删改查(操作的是表中的记录)

CRUD(增删改查)

  • C-Create新增
  • R-Retrieve检查,查询
  • U-Update更新
  • D-Delete删除

新增(Create)

语法:

单行数据+全列插入 

insert into 表名[字段一,字段二] values(值一,值二);

 通过看表的结果,我们可以看出内容已经写好

注:列和值的数据类型一定要匹配,如果不匹配,则无法写入数据表中

简写方式(可以将表后的字段进行省略)

指定列插入

只写一个name的值,那么其他的值则会默认为null

多行插入

 show databases;
  create database u;
  use u;
  create table student(
    id bigint,
     name varchar(50),
     math int,
    english int,
    chinese int
    );
   insert into  student(id,name,math,english,chinese)  values(1,'zhangsan',88,86,74);
  insert into  student(id,name,math,english,chinese)  values(2,'lisi',85,76,94);
  insert into  student(id,name,math,english,chinese)  values(3,'xiaoliu',65,96,84);
insert into  student  values(4,'xiaohe',95,76,89);
  insert into student(name) values('daliu');
  insert into student(id,name) values(5,'ni'),(6,'wo'),(7,'hao');

查询(Retrieve)

全列查询

select * from 表名

注:查询表中所有的元素是一个很危险的事情,有些数据库的表很大,如果要一次性全部查询,会导致服务器崩塌,所以在查询的时候要加许多的限制条件。

指定列查询

select 字段 +from 表名

查询的结果是一个表达式

1.在字段名后加一个10后,会在临时创建的表上添加一个全为10的新列。

2.在某一列成绩加10,会使临时创建的表整个列的成绩都加10

3.将三个成绩的相加可以求成绩之和

表达式的别名

1.select 字段名 as +别名+from 表名

2.select 字段名  +'别名'+from 表名

3.select 字段名  别名  from 表名

注:最简单的方法是select 字段名  别名  from 表名,最标准的方法是select 字段名 as  '别名'  from 表名

如果在别名中有空格等符号必须用  ' 别名 '的形式。

否则会报错

注:所以查询出来的表都是一个临时表,返回给我们,执行完就自动删除了。

 show databases;
  create database u;
  use u;
  create table student(
    id bigint,
     name varchar(50),
     math int,
    english int,
    chinese int
    );
   insert into  student(id,name,math,english,chinese)  values(1,'zhangsan',88,86,74);
  insert into  student(id,name,math,english,chinese)  values(2,'lisi',85,76,94);
  insert into  student(id,name,math,english,chinese)  values(3,'xiaoliu',65,96,84);
insert into  student  values(4,'xiaohe',95,76,89);
  insert into student(name) values('daliu');
  insert into student(id,name) values(5,'ni'),(6,'wo'),(7,'hao');
   select * from student;
   select name from student;
  select id,name,10 from student;
  select id,name,math+10 from student;
  select id,name,math+chinese+english from student;
  select id,name,math+chinese+english as 总分 from student;
   select id,name,math+chinese+english as '总分' from student;
  select id,name,math+chinese+english  '总分' from student;
  select id,name,math+chinese+english  总分 from student;
  select id,name,math+chinese+english  '总  分' from student;
  select id 编号,name 姓名,math 数学 ,chinese 语文,english 英语,math+chinese+english  总分 from student;

去重(distinct)

select 列名 from 表名

单独去重某一个列

去重好几个列

注:去重时所有的列都相同才会被认为是可以去重的

   select * from student;
  insert into  student  values(8,'xiaohai',88,76,89);
  select * from student;
   select distinct * from student;
    select distinct math from student;
    select math from student;
   select distinct math,chinese,english from student;
    insert into  student  values(9,'zhu',88,76,89);
   select distinct math,chinese,english from student;

排序

select 列名 from 表名 order by 列名[ASC/DESC ]

ASC(降序)

DESC(升序)

注:如果既不写ASC或者DESC的话,则会默认为ASC

注:NuLL数据排序,视为比任何的数据都小,包括负数,比负数都小,升序出现在最上面,降序出现在最下面。

可以使用表达式及别名进行排序

对多个字段进行排序的时候,排序的顺序与出现的先后顺序有关

先对数学按逆序排序,在数学排序的基础上对语文按顺序排序,再对英语按逆序进行排序。

注:MySQL中的null比较特殊

  • 无论和什么值进行运算,返回的值都是null。
  • null始值被判定为false。
  • null的值不是我们学习的其他语言中的0,在MySQL就是null。
  select chinese from student order by chinese asc;
   select math from student order by math desc;
    select math from student order by math ;
    select id 编号,name 姓名,math+chinese+english total from student order by total desc;
   select id 编号,name 姓名,math,chinese,english total from student order by math desc,chinese asc,english desc;

条件查询(where) 

可以通过条件查询,过滤掉一些不符合条件的记录,将符合条件的记录返回给用户

比较运算符

运算符

说明

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

 注:

模糊查询(LIKE):

字符后加 % 意思为只要是开头为xiao的,无论后面是什么,有多少个都符合条件。

 

字符后加 _ 意思为有几个 _ ,则在xiao后就有多少个字符。

small后有两个字符

small后有三个字符 

IS NULL

 

IS NOT NULL

 

逻辑运算符

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

注:

AND类似于Java中的 && ,OR类似于Java中的 || ,NOT类似于Java中的 !  

使用where的语法:select * from 表名 where 列名/表达式  运算符  条件

练习:

1.查询英语成绩<80分的同学及英语成绩

修改后:

select name,english from student where english<80;

注:自动过滤掉了值为null的列

2.查询语文成绩好于英语成绩的同学
 select name,english,chinese from student where chinese>english;

注 :在一行数据的不同列的同种数据类型是可以进行比较的,如果是不同行的数据,就算是数据类型相同也是无法比较数据的大小

3.查询总分在 260 分以下的同学

 select name,english+chinese+math total from student where (chinese+math+english)<260;

注:where中的语句不能用别名去当过滤的条件,使用了表达式就不能使用别名。

错误的示范:

为什么会出现这种情况呢?

出现这种情况跟MySQL中的SQL语句的执行顺序有关

  1. 如果在数据中查询某些条件,首先要确定表,执行from
  2. 在查询的过程中要根据查询的条件把符合条件的数据取出来,执行where子句
  3. 执行select后面指定的列,要把这些列加入到最终的结果中
  4. 排序操作,根据order by 将指定的列按排序规则进行最后的排序

4.查询语文成绩大于80分,且英语成绩大于80分的同学 

 select name,chinese,english from student where chinese>80 and english>80;

 

5.查询语文成绩大于80分或英语成绩大于80分的同学 

 select name,chinese,english from student where chinese>80 or english>80;

注:

优先级:NOT>AND>OR,我们不需要记,只需要在使用的时候加括号。

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

select name,chinese from student where chinese between 80 and 90;
select name,chinese from student where chinese<=90 and chinese>=80;

也可以使用AND

 

 

7.查询语文成绩是74 或者 84分的同学及数学成绩 

mysql> select name,chinese from student where chinese in(84,74);
select name,chinese from student where chinese=74 or chinese =84;

也可以使用OR 

 

 分页查询(Limit

分页查询可以有效的控制一次性查询出来的条数,可以减小数据库服务器的压力,是一个非常友好的行为。

1.从 0 开始,筛选 n 条结果

select ... from   表名  [where ...]   [order  by ...]  limit n;

 n表示一次性查询出的条数

2.从 s 开始,筛选 n 条结果

select... from   表名   [where...]  [order  by...] limit s, n; 从0开始,限制两条 从2开始,限制两条

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

select... from   表名  [where...]  [order  by...] limit  n  offset  s;

 从0开始,限制两条

从2开始,限制两条 

练习:

按 id 进行分页,每页 2 条记录,分别显示第 1、2、3 页

按顺序

select * from student where math order by id asc limit 2 offset 0;
select * from student where math order by id asc limit 2 offset 2;
select * from student where math order by id asc limit 2 offset 4;

按逆序

select * from student where math order by id desc limit 2 offset 0;
select * from student where math order by id desc limit 2 offset 2;
select * from student where math order by id desc limit 2 offset 4;

 

注:因为id为5,6,7都是NULL,所以默认不会读入。 

 修改(update)

UPDATE   表名  SET  column = expr [, column = expr ...]   [WHERE ...] [ORDERBY ...] [LIMIT ...]

 

练习

1.将xiaohe同学的数学成绩变更为 80 分

update student set math='80' where name='xiaohe' ;

 注:

2.将xiaoliu同学的数学成绩变更为 60 分,语文成绩变更为 70 分

update  表名  set  列=?,列=? where  限制的条件

update student set math=60 and chinese=70 where name='xiaoliu' ;

 

 

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

原本成绩

select * from student;

进行修改

update student set math=math+3 where math order by math+english+chinese desc limit 3;

 修改后成绩

select * from student;

4.将所有同学的数学成绩更新为原来的 二分之一倍

原来的成绩

select * from student;

进行修改

update student set math =math*2 where math;

修改后的成绩

select * from student;

 

删除(delete)

delete   from   表名 [where ...] [order  by ...] [limit ...]

练习

1.将名字叫daliu的人删除 删除前
select * from student;
进行删除
delete from student where name='daliu';

删除后
select * from student;

 

2.将数学成绩倒数三名的人删除

删除前

select * from student order by math asc;

 

进行删除

 delete from student order by math asc limit 3;

删除后

select * from student;

 

注:在删除时如果不加where条件会怎么样?

会导致整张表全部被删除,所以一定要慎重!!!!

希望能对大家有所帮助!!!!!

标签:name,chinese,english,CRUD,select,student,MySQL,math
From: https://blog.csdn.net/blamep/article/details/143679725

相关文章

  • MySQL:数据库的约束
    约束类型NOTNULL-指示某列不能存储NULL值。UNIQUE-保证某列的每行必须有唯一的值。DEFAULT-规定没有给列赋值时的默认值。PRIMARYKEY-NOTNULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。FOREI......
  • Vue 3实现一个带有左侧导航菜单的页面。该页面包含一个类似的增删改查(CRUD)功能模块。
    效果图:实现步骤:项目结构我们将构建一个简单的Vue3项目,包含以下内容:左侧导航栏:用于切换不同页面或模块。右侧内容区域:用于展示不同模块的内容(如小组成员管理)。代码实现1.创建主页面组件App.vue首先,在App.vue中定义左侧导航栏和内容区域:<template><divid="app"......
  • 深入理解 MySQL 大小写敏感性:配置、问题与实践指南20241115
    深入理解MySQL大小写敏感性:配置、问题与实践指南在开发和部署MySQL数据库时,表名的大小写敏感性问题常常被忽略,却可能在跨平台迁移、团队协作或工具兼容性方面引发复杂的故障。本文将结合实际案例,深入探讨MySQL的lower_case_table_names参数,剖析其行为、配置方法以......
  • 【MySQL的安装与配置】
    目录:一、下载MySQL二、安装MySQL三、配置环境变量一、下载MySQL进入官方下载页面:https://www.mysql.com/downloads二、安装MySQL双击运行下载好的安装程序 三、配置环境变量此部分操作的目的就是方便咱们通过命令行在任何位置都可以......
  • 记一次react+node+nginx+mysql+docker发布
    简言这是为了给老婆工作上算培训班课时,计算课销更方便点的CRM(纸质档转线上)准备工作React项目Node项目(express,koa任意选择)一台服务器(如果你是纯手工发布,服务器选择倒是无所谓,如果要结合docker的话,请选择国外服务器或者香港也行,阿里云就算了,我自己最开始用的阿里云,docker根本p......
  • 力扣-Mysql-3293-计算产品最终价格(中等)
    一、题目来源3293.计算产品最终价格-力扣(LeetCode)二、数据表结构表:Products+------------+---------+|ColumnName|Type|+------------+---------+|product_id|int||category|varchar||price|decimal|+------------+-------......
  • 通过情况数据目录初始化MySQL数据库
    第一步:cd/etc/my.cnf打开配置文件,查看当前数据库的数据目录datadir打开datadir路径,备份所有文件到另外的目录然后删除所有rm -rf*初始化数据库mysqld--defaults-file=/etc/my.cnf--initialize-insecure然后datadir路径下会产生新的数据文件,给所有文件,包括文件夹下面......
  • MySQL 8 复制性能的增强
     新的复制时间戳MySQL主从复制环境,最常见的任务是确保复制确实在进行,而且主从之间没有发生错误。常用的命令是showslavestatus,该命令提供了从库线程的状态信息。因此,通常需要每个从库上执行showslavestatus并检查输出结果。 输出内容中,有个参数指标"Seconds_Behind_M......
  • mysql使用KILL命令来终止特定的查询进程
    在MySQL中,有时可能需要终止一个正在运行的查询进程,特别是当该进程占用了过多的资源或由于某种原因卡住了。可以使用KILL命令来终止特定的查询进程。以下是具体的步骤和注意事项:1.查看活动进程找到想要终止的进程ID。可以使用以下查询来查看当前所有的MySQL活动进程:SH......
  • 力扣-Mysql-3308- 寻找表现最佳的司机(中等)
    一、题目来源3308.寻找表现最佳的司机-力扣(LeetCode)二、数据表结构表:Drivers+--------------+---------+|ColumnName|Type|+--------------+---------+|driver_id|int||name|varchar||age|int||experience......