• MySQL 表的增删查改


    目录

    一、插入

      1️⃣一次插入一条记录

      2️⃣指定列插入记录

      3️⃣插入多条记录

    二、查询

      1️⃣全列查找

      2️⃣指定列查询

      3️⃣查询字段为表达式

      4️⃣去重查询

      5️⃣排序查询

      6️⃣条件查询

      7️⃣分页查询  

     三、修改

      1️⃣一次修改一列

    ​  2️⃣一次修改多列

     四、删除

    🎈给大家一些数据方便大家练习😘,直接复制粘贴到控制台就行🎈 


    一、插入

            在SQL语句中,插入数据使用的关键字是insert

    insert into  表名 values(value,value...);

       1️⃣一次插入一条记录

       2️⃣指定列插入记录

    指定列查询,需要在表名后面加上 列名

    insert into  表名 (列名) values(value,value...);

       3️⃣插入多条记录

    insert插入语句还可以一次插入多行,每条记录用逗号隔开

    insert into  表名 values(value,value...),(value,value...)...;

     一次插多条记录比一次插一条记录,分多次插入效率更高!!!

    往数据库中插入记录也不是单纯的就往硬盘里一写就完事了,也是要做一些额外的工作的,一次插入多条记录只做一次额外工作,而插入多次记录要做多次额外的工作。 

    二、查询

            SQL 中是使用select 关键字,表示查询

      1️⃣全列查找

    select * from 表名;

    * 称为通配符,表示所有的列

     上述全列查询,其实是一个危险操作!!!

    select * 操作,会让服务器大规模的读取磁盘上的数据,在把数据通过网卡写会到客户端

    如果当前存储的数据量级非常大,就会导致读磁盘和写网卡的时间非常长,甚至于把 磁盘带宽 和 网卡 都吃满!!

      2️⃣指定列查询

    select 列名 form 表名;

    这里要求和表中的列名匹配,可以同时写多个列名,中间使用,分割。

    相比于上述 select * 来说,指定列查询传输数据量少了不少!!!

     思考:这里的查询只能看见两列,是否以为着其他的列就被删除了呢?

    📍 在查询过程中,客户端这里显示的内容只是一个 临时表 ! 临时表是根据服务器的数据生成的!!! 所有查询操作,都不会影响服务器磁盘上是数据。

      3️⃣查询字段为表达式

     一遍查,一遍计算       

    1.对列进行计算

    这里只是影响到临时表的数据展示!!对于数据库服务的原有数据没有温和影响!!!  

     2.列和列之间进行计算

    如果我们想要求 学生成绩 综合,我们就可以把所有列加到一起。

    注意:

    1、我们不能拿字符串跟数字相加,不然会报警告

    拓展:我们可以通过 show warinings; 来查看警告信息!

     2、查询结果,是“临时表”的数据类型,其不一定和原始的标一模一样,会尽量保证数据的正确有效性。

    3.给查询结果的列起别名 

    在上述表达式查询过程中,临时表的列名,也就是表达式的内容,有时候比较长可读性不高,因此 SQL 允许在进行查询的时候,给临时表的列 指定 别名!

    select 表达式 as 别名 from 表名;

     as 可以省略,但是 代码可读性不高,容易把 total 误以为是 表达式中的一部分。

      4️⃣去重查询

            distinct 关键字,修饰某个列,针对这列的数据进行去重!!会把重复的记录,合并成一个!! 

     去重操作,也可以针对多个列进行。

    多列去重条件:当多多个列都是相同的时候,才会去重!!

      5️⃣排序查询

            排序查询结果,使用 order by 关键字(默认为升序)!!

    select 列名 表名 order by 列名1;//指定按照列名1进行排序  ~~ 默认为升序

     🔻如果想要进行降序排序,在最后加上一个 desc 来表示~~

     这里大家不要跟 desc 描述表结构关键字弄混

    desc  tables;// 描述表的结构   describe

    select * from exam_result order by Chinese desc; // 排序降序  descend

    🔺与 desc 对应的就是 asc 升序,但是order by 默认就是升序,所以asc 加上没啥意义。

    order by 既然能根据一个列排序,那必然也能根据多个列进行排序。

    select 列名 from 表名 order by1 , 列2...;

    多列排序规则:先根据 列1 进行排序,如果 列1 有数据重复,则根据 列2 排序,一次类推。

    例如:对 数学 和 语文 进行排序,先根据 数学成绩 排序,遇到相同的数学成绩,在根据 语文成绩 进行排序。 

     💨而上述是升序排列,而对多列进行降序排列,那我们加多个 desc

       6️⃣条件查询

            查询的时候指定筛选条件~ 用 where 关键字 来表示条件!、

    select * from 表名 where 条件;

    条件相当于是针对表,进行遍历~

    依次取出每一条记录,带入条件,进行计算,看条件是 true 还是 false

    条件成立,就把记录留下来放到结果中!

     在SQL中提供一些条件运算符,分为两类:比较运算符和逻辑运算符

    🌒比较运算符:

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

    🌘逻辑运算符:

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

    下面根据不同的条件进行举例讲解 

    • 基本查询(大于、小于、不等于)

      🧡 ' < ' : 查询英语成绩 不及格的同学

      💛' > ' : 查询语文成绩好于英语成绩的同学,总分大于 200 的学生

     

    这里要注意一点,where 中条件不能写 我们重新命名的列,不然会报错

     在条件查询的SQL中,先执行 where,符合条件的记录,在执行 select 前半部分决定显示哪些列,以及进行啥样的运算。

    因此 total 就是在条件判定后才定义的! 而 order by可以使用别名排序

      💚' = ' ' <=> ' : 查询语文成绩等于数学成绩的人

    注意:‘ = ’ 只能比较非空值,如果比较 null 和 null 那结果就为 null

    例如:我向表中插入  insert into exam_result values('9','公孙燕',null,null,null); 这行代码

    再用 ‘=’ 进行查询

    大家不难发现,没有公孙燕这一行

    但是我用 ‘<=>’ 进行比较时,这一行就会出现

     这个两个运算符的特点,希望大家能够记住

    • and 与 or

      💙' and ' : 查询语文成绩大于80分,且英语成绩大于80分的同学

      🤎' or ' : 查询语文成绩大于80分,或英语成绩大于80分的同学

    ❗注意:在SQL中 and 的优先级 比 or 更高,当一个条件里同时有 and 和 or 的时候,先算 and。

    •  范围查询

      💕' between...and... ' : 查询语文成绩在 [80, 90] 分的同学及语文成绩

      💗' in ' : 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
     

      🤍 ' like'  模糊查询

            like 模糊查询,依赖一些 通配符 来表示要匹配的值是啥样的~

    select 列名 from 表名 where 列名1 like '通配符+文字'

    通配符主要分为两种

    %匹配任意多个(包括0个)字符
    _匹配严格的一个任意字符

     例如:查找姓 ‘孙’ 的人(匹配以 ‘孙’ 开头的)

    ‘%孙’ 匹配以 ‘孙’ 结尾的

    ‘%孙%’ 匹配内容包含‘ 孙’

     查询以  ‘孙’ 开头,名字字数为 2 的人

      查询以  ‘孙’ 开头,名字字数为 2 的人那就是 '孙__'。

      💟null 的查询

            查询 null 我们可以用 is null, 查询非 null 可以用 is not null

    例如:查询语文成绩为空的人

     查询数学成绩非空的人

     注意:查询 null 值时不能用 = 而要用 <=>,用 = 的话 会判断为假。

    例如 a = b: 等号会先判断 a 和 b 是否为null,为空表达式直接为假。若不为空,则判断 a 是否等于 b,等于为真,否为假。

      7️⃣分页查询  

            分页查询 用 limit 关键字

    1. select 列名 from 表名 limit N; -- 查询前 N 条记录
    2. select 列名 from 表名 limit N offset M; -- 从第 M 条记录开始,查询 N 条记录(M从0开始算)

    例:查询前三条记录

     从第三条开始,查询三条记录

     上述查询方式是可以结合在一起使用的~~

    例:找出总成绩三名,且姓名不为 猪悟能

    select name,Chinese + math + English as total from exam_result where name !='猪悟能' order by total desc limit 3;

     这里 我们需要注意一点,一般 where 是紧跟 from 后面, order by 在where 后,limit 在最后

    select 列名 from 表名 (where 条件) (order by 列名 (desc)) (limie N); 

     三、修改

            在SQL中,想要修改记录需要使用 update 关键字

    update 表名 set 列名 = 值 (where ...) (order by ..) (limit ..);

     1️⃣一次修改一列

     2️⃣一次修改多列

    例:将总分倒数前三的同学,数学成绩加上 10

    首先我们查看一下倒数前三名成绩【把三列合并成一列,排序,查看前三个记录】

     然后根据条件进行修改 

    matched: 3   有三条记录匹配

    Changed: 2   有两条记录被改变

     注意:null 和其他值进行算术运算,结果还是 null !!

     修改成功

    四、删除

            在 SQL 删除记录,需要使用 delete 

    delete from 表名 where 条件; -- 通过where条件,来控制删除那条记录

    where 后面的条件,选择几个记录,就会删除几个记录!!! 

    例:删除 公孙燕 这条记录

    给大家一些数据方便大家练习😘,直接复制粘贴到控制台就行 

    1. -- 创建exam_result表
    2. create table exam_result(
    3. id int,
    4. name varchar(20),
    5. Chinese decimal(3,1),-- 3表示3位整数 1表示小数点后1位
    6. math decimal(3,1),
    7. English decimal(3,1)
    8. );
    9. -- 插入数据
    10. insert into exam_result(id,name,Chinese,math,English)values
    11. (1,'唐三藏',67,98,56),
    12. (2,'孙悟空',87.5,78,77),
    13. (3,'猪悟能',88,98,90),
    14. (4,'曹孟德',82,84,67),
    15. (5,'刘玄德',55.5,85,45),
    16. (6,'孙权',70,73,78.5),
    17. (7,'宋公明',75,65,30);
  • 相关阅读:
    王思葱、京西购物网-《软件方法》自测题解析017
    LeetCode_动态规划_中等_97.交错字符串
    设计模式-解析器-笔记
    Maven 命令行环境
    『Bug挖掘机 - 赠书02期』|〖Effective软件测试〗
    灵活调整宣传策略,媒体发稿和新闻发布的优势所在
    【源码】SpringBoot事务注册原理
    Spring项目bean 无法注入问题--Thread中注入Bean无效-多线程下@Resource和@Autowired和@Value 注入为null
    【MySQL篇】第二篇——库的操作
    大学生数学建模赛题解析及优秀论文-2021电工杯A题高铁牵引供电系统运行数据分析及等值建模(附Python代码)
  • 原文地址:https://blog.csdn.net/weixin_53564801/article/details/126097666