- 空值判断:
where age is not NULL
2.in()
where university in(‘北京大学’,‘复旦大学’,‘山东大学’)
复杂点的条件:
where (gpa>3.5 and university=‘山东大学’) or (gpa>3.8 and university=‘复旦大学’)
3.模糊查询,查找大学名含有“北京”字样的信息
where university like ‘%北京%’
★4. 计算男生人数及他们的平均GPA
select count(gender) as male_num,round(avg(gpa),1) as avg_gpa
from user_profile
where gender=‘male’
round(x,b)主要用于四舍五入,b代表舍几位
5.聚合函数结果作为筛选条件时,不能用where,而是用having语法
6.select后的聚合函数字段可以写在 order by 后面!!!
7.插入语句条件为空时要填写:null !!!
同时 insert 关键字没有set,别和update搞混了!!!
二。常用函数:
★8.SQL26:计算25岁以上和以下的用户数量
select if(age<25 or age is null,‘25岁以下’,‘25岁及以上’) age_cut,
count(*) number
from user_profile
GROUP BY age_cut
9.SQL27:查看不同年龄段的用户明细
select device_id,gender,
case
when age<20 then ‘20岁以下’
when age between 20 and 24 then ‘20-24岁’
when age>24 then ‘25岁及以上’
// when age is null then ‘其他’
else ‘其他’
end as age_cut
from user_profile
10:日期函数: 计算用户8月每天的练题数量
select DAY(date) as day,count(question_id) as question_cnt
from question_practice_detail
where YEAR(date)=‘2021’ and MONTH(date)=‘08’
group by day
11.统计每种性别的人数
select SUBSTRING_INDEX(profile,’,’,-1) as gender,
count(*) as number
from user_submit
group by gender
‘,’:数据按逗号分隔
-1:取倒数第一个元素
12.删除exam_record表中作答时间小于5分钟整且分数不及格(及格线为60分)的记录
delete from exam_record
where TIMESTAMPDIFF(MINUTE,start_time,submit_time)<5
and score<60
13.删除exam_record表中未完成作答或作答时间小于5分钟整的记录中,开始作答时间最早的3条记录
DELETE from exam_record
where submit_time is null
or TIMESTAMPDIFF(MINUTE,start_time,submit_time)<5
order by start_time limit 3
14删除exam_record表中所有记录,并重置自增主键
1.DELETE 可以加where 条件,truncate 不能加
2.truncate删除,效率高一些
3.假如要删除的表中有自增长列,如果用delete 删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始
4.truncate删除后没有返回值,delete 删除有返回值
5.truncate 删除后不能回滚,delete 删除可以回滚
15.已经创建了一张新表exam_record_before_2021用来备份2021年之前的试题作答记录,结构和exam_record表一致,请将2021年之前的已完成了的试题作答纪录导入到该表。
insert into exam_record_before_2021
select null,uid,exam_id,start_time,submit_time,score from exam_record
where year(submit_time)<2021
注:新表有自己的AI序号,不用原表id列
16 创建新表
create table user_info_vip(
id int(11) not null primary key auto_increment comment ‘自增ID’,
uid int(11) not null unique key comment ‘用户ID’,
nick_name varchar(64) comment ‘昵称’,
achievement int(11) default 0 comment ‘成就值’,
level int(11) comment ‘用户等级’,
job varchar(32) comment ‘职业方向’,
register_time datetime default CURRENT_TIMESTAMP comment ‘注册时间’
)default charset=utf8
17.修改表(Alter关键字):
alter table user_info add school varchar(15) after level;
增加列在某列之后
alter table 增加的表格 add 增加列的名称 数据类型 位置(after level 在level 之后)
alter table user_info change job profession varchar(10);
更换列的名称及数据类型
alter table user_info change 原列名 修改列名 修改数据类型
alter table user_info modify achievement int(11) default 0;
更改数据类型
alter table 表名 modify 修改列名称 数据类型 默认值等