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 表名;

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

MySQL 表的增删查改(基础)_第1张图片

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

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

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

  (2)指定列查询

select 列名 form 表名;

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

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

MySQL 表的增删查改(基础)_第2张图片

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

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

  (3)查询字段为表达式

 一遍查,一遍计算       

1.对列进行计算MySQL 表的增删查改(基础)_第3张图片

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

 2.列和列之间进行计算

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

MySQL 表的增删查改(基础)_第4张图片

注意:

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

MySQL 表的增删查改(基础)_第5张图片

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

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

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

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

select 表达式 as 别名 from 表名;

MySQL 表的增删查改(基础)_第6张图片

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

MySQL 表的增删查改(基础)_第7张图片

  (4)去重查询

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

MySQL 表的增删查改(基础)_第8张图片

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

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

MySQL 表的增删查改(基础)_第9张图片

  (5)排序查询

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

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

MySQL 表的增删查改(基础)_第10张图片

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

MySQL 表的增删查改(基础)_第11张图片

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

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

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

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

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

select 列名 from 表名 order by 列1 , 列2...;

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

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

MySQL 表的增删查改(基础)_第12张图片

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

MySQL 表的增删查改(基础)_第13张图片

   (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)

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

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

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

MySQL 表的增删查改(基础)_第14张图片

  ' > ' : 查询语文成绩好于英语成绩的同学,总分大于 200 的学生
MySQL 表的增删查改(基础)_第15张图片

 MySQL 表的增删查改(基础)_第16张图片

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

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

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

MySQL 表的增删查改(基础)_第17张图片

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

MySQL 表的增删查改(基础)_第18张图片

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

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

再用 ‘=’ 进行查询

MySQL 表的增删查改(基础)_第19张图片

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

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

MySQL 表的增删查改(基础)_第20张图片

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

  • and 与 or

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

MySQL 表的增删查改(基础)_第21张图片

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

MySQL 表的增删查改(基础)_第22张图片

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

MySQL 表的增删查改(基础)_第23张图片

  •  范围查询

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

MySQL 表的增删查改(基础)_第24张图片

  ' in ' : 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
 MySQL 表的增删查改(基础)_第25张图片

  ' like'  模糊查询

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

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

通配符主要分为两种

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

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

MySQL 表的增删查改(基础)_第26张图片

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

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

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

MySQL 表的增删查改(基础)_第27张图片

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

  null 的查询

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

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

MySQL 表的增删查改(基础)_第28张图片

 查询数学成绩非空的人

MySQL 表的增删查改(基础)_第29张图片

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

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

  (7)分页查询  

    分页查询 用 limit 关键字

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

例:查询前三条记录

MySQL 表的增删查改(基础)_第30张图片

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

MySQL 表的增删查改(基础)_第31张图片

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

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

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

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

MySQL 表的增删查改(基础)_第32张图片

 然后根据条件进行修改 

matched: 3   有三条记录匹配

Changed: 2   有两条记录被改变

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

 修改成功MySQL 表的增删查改(基础)_第33张图片

四、删除

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

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

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

例:删除 公孙燕 这条记录

MySQL 表的增删查改(基础)_第34张图片

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

-- 创建exam_result表
create table exam_result(
    id int,
    name varchar(20),
    Chinese decimal(3,1),-- 3表示3位整数 1表示小数点后1位
    math decimal(3,1),
    English decimal(3,1)
    );

-- 插入数据 
insert into exam_result(id,name,Chinese,math,English)values
    (1,'唐三藏',67,98,56),
    (2,'孙悟空',87.5,78,77),
    (3,'猪悟能',88,98,90),
    (4,'曹孟德',82,84,67),
    (5,'刘玄德',55.5,85,45),
    (6,'孙权',70,73,78.5),
    (7,'宋公明',75,65,30);

你可能感兴趣的:(MySQL,mysql,数据库)