### 数据 ###
增:
插入数据:insert into ads (stu_name,sex,money_2) values ('lynn','女',100.23);
插入多条数据:insert into ads () values (),(),()...... --- ','隔开多条数据值
注:当语句中不写对应字段的话,默认填入所有参数,即values 值个数要与表中所有字段一致
删:
清空表中数据:truncate tablename; --- 自增长 id 会重新开始,比delete 速度快,因为是从磁盘删除,不能恢复
删除整个表数据:delete from ads; --- 自增长 id 还会继续增长
删除指定数据:delete from ads where name = 'lynn';
改:
修改整个字段的数据:update ads set money = 80;
修改指定条件的数据:update ads set money = 80 where name = 'lynn';
修改多字段数据:update ads set sex = 'nv',money = 80 where name = 'lynn';
在原值基础上做修改:update ads set money = money+100;
查:
##### 单表 ####
指定查询字段:select id,name from ads;
查询所有字段:select * from ads;
指定条件查询:select * from ads where sex = '男' and phone = 110;
(条件可用 and/or 连接;或者用 in (,);或者 between 10 and 100)
限制查询条数:select * from ads limit 5;(查询前 5 行)
指定查询行数范围:select * from ads limit 2,4;(查询3、4、5行;0:为第一行)
模糊匹配-通配符:select * from ads where addr like '%东京%';(% :通配符)
表起别名:select a.name from ads as a where a.phone = 110;(as 可以省略)
字段起别名:select name as 姓名 from ads where phone = 110;(as 可以省略)
模糊匹配-单字符:select * from ads where addr like '东_';('_':单字符匹配)
排序查询:select * from ads order by id asc;(asc:升序;desc:降序)
空数据查询:select * from ads a where a.addr = '' or a.addr is null;('':空字符串,null:空)
去重查询:select distinct money from ads;(distinct:去重某个字段重复数据)
统计查询:select count(*) 学生人数 from ads;(count:统计行数)
最大值查询:select max(money) 钱最多 from ads;(max:最大值)
最小值查询:select min(money) 钱最少 from ads;(min:最小值)
平均值查询:select avg(money) 平均钱 from ads;(avg:平均值)
总和查询:select sum(money) 总共多少钱 from ads;(sum:求和)
分组:select * from ads group by sex;(group by:根据字段进行分组)
例:根据性别统计男生、女生各有多少人
select sex 性别,count(*) 人数 from ads group by sex;
分组后加条件查询:select * from ads group by sex having name like '姚%';(用 having)
注:分组后条件判断用 having
多字段分组:select * from ads group by sex,name;(原理,字段间先组合,然后进行分组)
#### 多表关联 ####
'='关联:select * from user a,accounts b where a.id = b.user_id and a.username = 'niuniu';
'left join on':select * from blk a left join score b on a.id =b.id;(把左边表所有的数据都查出来,右边表有匹配的就查出来)
'right join on':select * from blk a right join score b on a.id=b.id;(把右边表所有的数据都查出来,左边表有匹配的就查出来)
'inner join':select * from blk a inner join score b on a.id=b.id;(两边表里都匹配的数据查出来)
#### 子查询 ####
1、把一条 sql 的结果,作为另一条 sql 的条件
select * from score a where a.s_id = (select id from blk where stu_name='阿翔');
2、把一条 sql 的结果,作为另一条 sql 的表
select * from score a,(select id from blk where stu_name='阿翔') b where a.s_id=b.id;
#### 合并查询结果 ####
合并两条查询结果集;条件:两个查询字段个数相同,具有相同的数据类型,合并后的字段名与前面的查询字段名一致
1、select id,stu_name from blk union slect id,t_name from teacher;(union:可以去重)
2、select id,stu_name from blk union all slect id,t_name from teacher;(union:不能去重;执行效率高)
备注:
关闭自动提交:set @@autocommit = 0;
查看提交方式:select @@autocommit;(1:自动提交,0:手动提交)
手动提交:commit;
回滚:rollback;(用于提交之前,即在非自动提交条件下,不小心执行错语句,只要没执行提交就可以回滚)