MySQL表的增删查改(基础)

新增(Create)

1.全列插入

全列单行插入

insert into 表名 values(值,值……);

也可以全列且多行插入

insert into 表名 values (值,值……),(值,值……)……;

2.指定列插入

insert into 表名 (列名,列名……)values (值,值……);单行

insert into 表名 (列名,列名……)values (值,值……),(值,值……);多行

其中,同行未插入的那些列显示为null

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

3.如何插入时间日期

时间日期一般是有固定格式,一般使用如下:

birthday datetime:'2000-01-01 12:00:00'

查询(Retrive)

1.查看整个表,全列查询

select * from 表名;

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

2.指定列查询

select 列名,列名…… from 表名;

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

3.表达式查询

select 表达式 from 表名;

我们先创建一个表示成绩的表

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

查询每个学生的总成绩,如下:

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

最好标注上名字,所以如下查询:

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

注意:

当参与运算的有空值时,计算出来也是空

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

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

4.别名

为查询结果中的列指定别名,如下:

select 列名/表达式1,列名/表达式2 as 别名……from 表名;别名跟在哪一列,哪一列就用别名。

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

as可以省略,但不建议。

5.去重:distinct

select distinct 列名,列名……from 表名;

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

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

但要是加上姓名,就不同了:

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

所以只有distinct后面的所有列都相同才可算作重复

6.查询时排序:order by

select 列名/表达式,…… from 表名 order by 列名/表达式 asc/desc;

asc表示升序,可以省略不写,desc表示降序

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

注意:

1.修改成别名后,不能直接拿别名排序:

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

因为当客户端把查询时排序的请求发给服务器后,服务器首先进行数据查询,然后把查询到的数据进行排序,最后再组织成响应数据返回给客户端,而改名操作,一定是在排序之后

所以只能如下修改:

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

2.排序可以依据多个列/表达式

如果第一列相同就根据第二列……,每一列都要制定升序还是降序,如果没指定,就默认是升序:

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

3.排序的依据不一定非得是select后面的那些列。

7.条件查询:where

select 列名…… from 表名 where 条件;

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

注意:

1.条件查询可以搭配表达式:

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

2.如果某表达式中有null值,会出现如下效果

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

最后一行为78.5和null,假设条件为总成绩小于235,因为任何数与null相加都是null,null<235的结果也是null,null表示false,所以就是查不出来,所以查询结果中没有最后一个学生的

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

常见条件查询

1.比较运算符

>  , < ,>= , <=

= 等于,不太安全,例如null=null的结果是null

<=> 等于,安全,null=null的结果是true

2.and,or

and表示且,or表示或 

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

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

3.范围查询

between……and……,表示的是闭区间

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

4.in(option……)

如果是option中的任意一个,就返回true

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

5.模糊查询:like

这里会用到%以及_

%表示匹配任意多个字符,_表示匹配任意一个字符

比如:where name like 孙%;会匹配到所有姓孙的人

where name like 孙_;会匹配到所有姓孙的且只有俩个字的人

where name like %孙;会匹配到所有最后一个字是孙的人

where name like %孙%;会匹配到所有中间有一个字是孙的人

……

6.null查询

用到 is null 或is not null

8.分页查询:limit

selet 列名 from 表名 (where/orderby)limit n;从0开始筛选n条结果

selet 列名 from 表名 (where/orderby)limit s,n;从s开始筛选n条结果

selet 列名 from 表名 (where/orderby)limit n offset s;从s开始筛选n条结果

如果想从第一条记录开始,那么偏移量就是0,注意不是1.

修改(Update)

update 表名 set 列名=…,列名=…,……(where /order by /limit);

例如:

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

这是未修改之前的表

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

这是进行了修改的表

注意:修改未必成功,例如当修改后的格式与初定数据类型格式不同时,就会修改失败

如下例子:

还是上面的成绩单,将总成绩为倒数前三的同学的英语成绩多加20分:

第一种修改方法:

第二种修改方法:

我一开始以为加不加offset0的报错结果都一样,但为什么不一样呢?我实在是想不清,但当我查了总分倒数前三的我才明了了

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

总成绩倒数前三的是第5,6,7个学生

对于第二种修改方式,报错为:第三行超出范围了,它说的第三行指的是小兰,超出范围是因为78.5+30=108.5,而我们规定的decimal(3,1)表示小数长度为3,小数位数为1,108.5的小数长度是4,与规定不符了,所以修改不成功

删除(Delete)

delete from 表名 (where/order by/limit)

例如:

1.删除某同学的成绩

2.删除整张表的数据

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

注意,删除整张表和删除数据库不一样,删除整张表后,表还在,只是表是空的

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