• [MySQL] 表的增删查改(CURD)


     

    专栏简介 :MySql数据库从入门到进阶.

    题目来源:leetcode,牛客,剑指offer.

    创作目标:记录学习MySql学习历程

    希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长.

    学历代表过去,能力代表现在,学习能力代表未来! 


    文章目录

    1.CURD

    2.新增(create)

    2.1 单行数据+全列插入

    2.2 多行数据+指定列插入

    3.查询(Retrieve)

    3.1 全列查询

    3.2 指定列查询

    3.3 查询字段为表达式

    3.4 别名

    3.5 去重 distint

    3.6 排序 order by

    3.7 条件查询 where

    3.8 分页查询 limit

    4.修改(Updata)

    5.删除(Delete)

    总结


    1.CURD

    • 注释: SQL中使用 -- + 描述 来表示注释.
    • CURD: 即 C 新增(Creae), U 修改(Updata), R 查询(Retrieve), D 删除(Delete).
    • 操作表时, 增删改操作相对较为单一, 查询操作相对复杂.

    2.新增(create)

    2.1 单行数据+全列插入

    成员数量必须和定义表的列数以及顺序一致.

    语法:

    insert into 表名 values(成员1,成员2....);


    2.2 多行数据+指定列插入

    语法:

    insert into 表名(指定列1,指定列2...) values(成员1,成员2...),(成员1,成员2..)..;
    

    Tips: 使用datatime插入日期时,日期的格式为 yyyy-mm-dd hh:mm:ss ,另外 now()可以获取当前时间.


    3.查询(Retrieve)

    3.1 全列查询

    通常情况下不建议使用 * 进行全列查询

    • 查询的列越多导出查询的数据量越大,可能使硬盘和带宽爆满.
    • 可能影响到索引的使用

    语法: 

    select * from 表名;

    示例: 


    3.2 指定列查询

    语法:

    select 指定列1,指定列2.. from 表名;

    示例: 


    3.3 查询字段为表达式

    • Tips:字段为表中定义的列名

    1.表达式不包含字段

    语法: 

    select name,age,10 from Test;

    示例: 


    2.表达式包含一个字段

    语法: 

    select name,score+10 from Test;

    示例: 


    3.表达式包含多个字段

    语法: 

    select name,score+age+10 from Test;
    

    示例: 


    3.4 别名

    若查询结果过长, 可给查询结果起一个别名更加直观.

    语法: 

    select 成员1+成员2+.. (as) 别名 from 表名;

     示例:


    3.5 去重 distint

    语法:

    select distinct 列名 from Test;

     去重前:

     

    去重后:


    3.6 排序 order by

    • asc 升序 (默认)
    • desc 降序

    语法: 

    select * from 表 (where) order by 列名 (asc/desc);

    1.没有order by 字句的查询, 返回的顺序是未定义的, 不要依赖该顺序.

    2.null 数据排序视为比任何数据都小, 升序位于最上面, 降序位于最下面.

     


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

    语法: 

    select 表达式 (as) 别名 from Test order by 别名 desc;

    将学生总成绩按从高到低排序. 


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

    语法:

    select 字段1,字段2.. from 表名 order by 字段1 asc/desc ,字段2 asc.desc...

    查询同学个门成绩按 语文降序,数学升序,英语降序的顺序来显示.


    3.7 条件查询 where

    比较运算符:

    运算符说明
    >,>=,<,<=大于,大于等于,小于,小于等于
    =等于, null 不安全, eg: null==null结果是 null
    <=>等于, null 安全, eg: null==null结果是true(1)
    !=,<>不等于
    between A and B

    范围匹配, [A,B],

    如果  A<=value<=B .返回true(1)

    in(option,...)如果是 option 中的任意一个,返回true(1)
    is null是null
    is not null不是null
    like

    模糊匹配,%表示任意多个(包含0个)任意字符

    _表示任意一个字符.

    逻辑运算符:

    运算符说明
    and相当于&,多个条件必须都为true, 结果才为true
    or相当于|,任意一个条件为true,结果为true
    not条件为true, 结果为false

    Tips: 别名只是客户端访问服务器的一个临时表的列名,原表中并不存在别名

    • where 条件可以使用表达式, 但不能使用别名.
    • and 优先级高于 or, 同时使用时, 需用小括号{}包裹优先执行的部分.

    1.基本查询

    语法:

    select 列名1,列名2..from 表名 where 限制条件;

    查询英语成绩低于80分的同学

    select name,english from Test where english<80;

    查询语文成绩好于英语的学生

    select name,chinese,english from Test where chinese>english;

    查询总分在200以上的学生

    select name,chinese+english+math from Test where chinese+english+math>200;


    2.and与or

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

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

    观察 and 和 or 的优先级

    1. select * from Test where chinese>80 or math>70 and english>70;
    2. select * from Test where (chinese>80 or math>70) and english>70;

     


    3.范围查询

    查询语文成绩在[80-90]的同学.

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


    4.in

    查询语文成绩是78或者89的同学.

    select name,chinese from Test where chinese in(78,89);


    5.模糊查询

    % 匹配多个字符

    select name from Test where name like "张%";

    _ 匹配任意一个字符

    select name from Test where name like "张_";


    6.null的查询

    查询数学成绩已知的同学的姓名

    select name,math from Test where math is not null;

    查询数学成绩未知的同学的姓名

    select name,math from Test where math is null;


    3.8 分页查询 limit

    该操作日常生活中十分常见,例如:

    语法: 

    1. --从0开始筛选n个结果
    2. select...from 表名 (where) (order by) limit n;
    3. --从s开始筛选n个结果
    4. select...from 表名 (where) (order by) limit s,n;
    5. --从s开始筛选n个结果 建议使用该方法
    6. select...from 表名 (where) (order by) limit n offset s;

    按id分页, 每页三条记录, 分别显示第 1,2,3页.

    1. select * from Test (where) order by id limit 3 offset 0;
    2. select * from Test (where) order by id limit 3 offset 3;
    3. select * from Test (where) order by id limit 3 offset 6;


    4.修改(Updata)

    语法: 

    update 表名 set 列名1=值,列名2=值..where 限制条件;
    • Tips: 若不加限制条件会修改所在列的所有内容. 
    • 可搭配where,order by,limit 使用

    将张三的语文成绩修改为80

    update Test set math=80 where name="张三";

    将李四的数学成绩变为70, 语文成绩变为90.

    update Test set math=70,chinese=90 where name="李四";

    为总成绩倒数前三的同学数学成绩加上30分.(升序排列,倒数前三在最前面)

    update Test set math=math+30  order by math+chinese+english limit 3 offset 0;


    5.删除(Delete)

    语法: 

    delete from 表名 where 限制条件; 
    • Tips: 若不加限制条件会修改所在列的所有内容. 
    • 可搭配where,order by,limit 使用

    删除张三的信息

    delete from Test where name="张三";

    删除整张表

    delete from 表名;

     drop 与 delete 的区别:

    • drop注重删除结构,delete注重删除数据.

    由于字段也属于结构的一部分, 所以可以搭配alter方法来删除.例如:删除students表中的chinese字段.

    alter table students drop chinese;

    若要删除students表中的所有名叫"张三"的人, 应该使用delete.

  • 相关阅读:
    总结710
    Day38 LeetCode
    Sparse编码和字典学习(1)基础知识和python简单实现
    【Linux】内存屏障
    40个高质量SSM毕设项目分享【源码+论文】(三)
    SouthMap平台版省去了安装CAD的诸多麻烦,集成在国产ZWCAD2022平台解决了此瓶颈!!!
    9种艺术类型Vapeplot颜色包---全平台可用
    登录功能注意的点
    高考志愿填报,城市、学校与专业怎么选?
    drools-加载流程
  • 原文地址:https://blog.csdn.net/liu_xuixui/article/details/127763099