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