1. 空值判断:
    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 修改列名称 数据类型 默认值等