自学内容网 自学内容网

Mysql表的增删查改(基础)

1.新增(Create)

1.1单行数据+全列插入

语法: insert into  表名 [(字段1),(字段2)],...   values [(值),(值)];

注释:

定义表时的字段名,可以是一个或者是多个

按照前面字段名的顺序,设置对应的值

字符类型的值用英文单引号包裹

1.2全列插入简写方式

语法:insert into 表名 values (值),(值).....   ;

 简写方式,不用在表名之后指定列名,只需要在values列表中按照定义字段的顺序设置相应的值

1.3指定列插入

语法:insert into 表名 (指定字段) values (指定列设置的值);

没有指定列值的插入,会用默认值去填充,例子中id没有被填充,bigint的默认值为null

1.4多行插入

语法:insert into 表名 (字段),....   values (值1),(值2),.....   ;

  

小tips:一次插入一条数据和一次插入多条数据哪个效率高呢?
1.执行所有的SQL时候都会进行网络开销   2.写入数据时还会有磁盘IO开销   3.每次执行一条SQL语句都会开启一个事务,事务的开启和关闭都需要消耗资源

综上:一次提交多条数据(可控范围内),一次多条比一次一条提交数据效率高一点!

2.查询(Retrieve)

2.1全列查询

语法:select * from 表名;

 

查询所有表中的数据是十分危险的操作

因为在生产环境中,一个表中的数据量可能会很多很多,可能会达到TB级别

不加任何限制的查询在生产环境中不要使用

我们新创建一个表,学习后面内容更加直观!(因为之前测试有没有插入成功,唐三藏这条记录,后续会出现两次!)

#创建表

CREATE TABLE exam (
id BIGINT,
student_name VARCHAR(50),
chinese DECIMAL(4,1),
math DECIMAL(4,1),
english DECIMAL(4,1)
);
#插入数据

INSERT into exam VALUES (1,'唐三藏',67,98,56),(2,'孙悟空',87.5,78,77),(3,'猪悟能',88,98,90),(4,'曹孟德',82,884,67),(5,'刘玄德',55.5,85,45),(6,'孙权',70,73,78.5),(7,'宋公明',75,65,30);

 

2.2指定列查询

语法:select 列名1,列名2...  form 表名;

 

2.3查询结果是表达式

语法:select 列名/表达式 from 表名;

2.3.1原来基础上+10分,在单列操作 

 

2.3.2算总分,列与列之间的操作

2.3.3as 关键词     表达式/列名起别名

语法:select 表达式/列名 as 别名 from 表名;

 

可以不加as关键词,直接加别名,别名要是特殊符号,需要用单引号 :'别名'

注释:我们的表本来没有总成绩这一列,所以通过表达式查询出来的结果集是通过一个临时表返回给我们的,执行后临时表就删除了。

2.3.4去重:distinct

语法:select distinct 列名 from 表名;

只查询数学成绩,发现有三个相同数据 

 

使用distinct之后,发现只保留了第一个数据! 在查询结果中,每一列都相同MYSQL才会认为是重复数据(数据行与数据行之间,也就是两条记录完全一致)要是加上id这一列,就不会去重!

注释:去重时,只有查询结果中所有的列都相同才会被认定为重复记录,去重后,重复记录只保留一条!

2.3.5排序:order by

语法:select 列名 from 表名 order by 列名 [排序规则];

排序规则:升序(ASC) 降序(DESC)

 示例:1.对语文成绩从高到低排序(降序(DESC))

2.对数学成绩从低到高排序(升序(ASC))

注释:没有写排序规则时,默认排序是升序!建议指定排序规则!!!

没有order by 字句时,返沪结果集是没有严格规定排序的,是不确定的!

NULL数据排序,视为比任何值都小,升序出现在最上面,降序在最下面!

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

语法:select 列名/表达式 as 别名 from 表名 order by 列名/表达式/别名 排序规则;

 

注释:可以对多个字段进行同时排序,排序的优先级和书写顺序有关

可以为每个字段指定不同的排序规则

排序顺序就是:先按数学降序排列,再按语文升序排列,再按英文进行升序排列

2.3.6 条件查询:WHERE

根据指定的一些条件,过滤掉不符合条件的记录,把符合条件的记录返回给用户

可以通过一些运算符,比如比较运算符,逻辑运算符

语法:select * from 表名 where 表达式(运算符) 条件;

1.示例:查询英语成绩不及格的同学 

  

2.示例:查询语文成绩好于英语成绩的同学

 

3.示例:查询总分在200分以下的同学

 

注释:where字句中不能用别名去当作过滤的条件,得把完整的表达式写出来!

出现这种现象是和MYSQL内部的实现有关,换句话书评就是和MYSQL执行的SQl语句的顺序有关!

1.如果要在数据中查询某些数据,首先要确定表,先执行from,

2.在查询的过程中要根据指定的查询条件把符合条件的数据过滤出来,此时执行的是where子句(执行where时,别名还未被定义!)

3.执行select后面的指定列/表达式(别名),这些列是需要加入最终的结果集中

4.排序操作,根据order by子句指定的列名/表达式和排序规则进行最后的排序!

4.示例:查询语文成绩大于80分且英语成绩大于80分的同学,使用AND关键词,并且的意思!
 

5. 示例:查询语文成绩大于80分或英语成绩大于80分的同学,使用OR关键词,或者的意思!

6.示例:查询语文成绩不等与67分的同学,使用NOT关键词,否定的意思。这个也可以使用!=(不等于符号)

 

7.示例:查询语文成绩在[80,90]区间内同学,使用 between and关键词,意思就是在num1~num2之间(between and 是闭区间!

8.示例:查询数学成绩是58或59或98或99分的同学,使用IN关键词,IN(option,....)如果是option中任意一个,返回true

9.LIKE关键词,匹配字符    ( _ )匹配严格的一个任意字符,相当于一个占位符;( % )匹配任意多个字符!

 2.3.7分页查询:LIMIT     作用:限制查询结果的条数

语法:

① select ... from 表名 ....... LIMIT n;    (从0开始,筛选n条数据)

② select ... from 表名 ....... LIMIT s,n;   (从s开始,筛选n条数据)

③ select ... from 表名 ....... LIMIT n OFFSET s;   (从s开始,筛选n条数据)

 分页查询,s=(当前页号-1)*每页显示的记录数;

示例:第一页取三条数据

注释:

书写顺序:.........[where] [order by] [limit...];

3.修改(Update)

语法:UPDATE 表名 SET 列名=修改的值 ....;

一次性可以修改多条数据!

示例:将孙悟空同学的数学成绩改为80分

匹配到几条需要修改的数据,就修改几条数据

4.删除(Delete)

语法:DELETE FROM 表名....;

示例:删除孙悟空同学的考试成绩

 

注意:如果删除表不加任何限制条件(where),那么整张表就会被删除!十分危险的操作!

数据库知识不定期更新,感谢各位点赞与关注


原文地址:https://blog.csdn.net/longnice666/article/details/143950592

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!