• MySQL基础操作总结_CRUD


    文章目录

    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

    语法

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

    先创建一张学生表

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

    1.1 单行数据+全列插入

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

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

    1.2 多行数据+指定列插入

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

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

    2.查询 select

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

    语法

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

    创建一个考试成绩表

     

     插入一些数据

    1. insert into exam_result(id,name,chinese,math,english) values
    2. (71250,'张三',95.5,82.2,67.5),
    3. (69753,'李四',88,86,89),
    4. (12254,'王五',87,88,98),
    5. (61256,'张六',73,85,65),
    6. (30258,'孙七',25,88,65),
    7. (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;

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

     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; 

  • 相关阅读:
    大语言模型微调过程中的 RLHF 和 RLAIF 有什么区别?
    51单片机—智能垃圾桶(定时器)
    【C++】C++中的qualified name和unqualified name
    网络七层结构(讲人话)
    基于ZYNQ-7000的AI加速器设计之Python网络编程(TCP协议)
    基于SpringMVC+html5+BootStrap的图书销售智能推荐系统
    【无标题】
    elementui 菜单选中优化
    node-@hapi/joi校验前端数据
    2022年全球市场液相导热油总体规模、主要生产商、主要地区、产品和应用细分研究报告
  • 原文地址:https://blog.csdn.net/chenchenchencl/article/details/127850062