数据库篇的笔试
1 sql语句的执行顺序、聚合函数使用条件
依次是: from join on group by having select distinct order by limit
涉及到了后执行的语句不能使用先执行语句中的别名 如:t1等
聚合函数使用需要有where或者having关键字
(1)having后不能使用select查询出来的别名或者字段,但可使用聚合函数
select * from score group by s_id having sum(s_id) > 70;
2 行转列函数
配合case when 字段 as 别名
group by 分组
3 统计空值问题
count(*) count(1) : 会查询出null值的字段列数据,需要处理null值,计入总数,所以速度相对慢的
count(字段名): 不会统计查询出null值的列数据,不计入总数,速度相对快
# 统计非null值的学生数量
select count(student_id) from student;
4 连表sql
(1)on后面的连接条件不能对字段使用函数,想要使用需要在and后面的条件对字段使用函数。
select * from t1 left join t2 on t1.name = t2.t_name
left join t3 on t2.s_id = t3.id;
(2)多表下的where条件连表查
select * from t1,t2 where t1.name = t2.t_name and 其他查询条件;
select * from t1,t2,t3 where t1.name = t2.t_name and t3.id = t2.s_id and 其他查询条件;
(1)单表连自己
select t.*,t2.* from bancs_brhm t join bancs_brhm t2 on t1.s_id = t2.s_id and t1.c_id = 01 and s1.score > t2.score;
select t.单个字段,t.* from bancs_brhm t;
5 备份与插入操作
create table bancs_brhm_20250201 as select * from bancs_brhm where 条件;
# 从备份表插入 不用as
insert into bancs_brhm select * from bancs_brhm_20250201;
6 mysql的group_concat函数
默认将分组后的某个字段的值,使用逗号拼成一个字段展示(可以对里面内容进行排序并更换其他的分隔符)
select group_concat(c_id) as c1 from student group by id;
7 limit
查询1-100条数据 从第0个开始,取出100条
select * from user limit 0,100
查询出第6-18的数据 共13个
select * from user limit 5,13
8 oracle
(1)将一个字段修改为null
oracle中的’’ 空串就是null
update bancs_brhm set name = '';
9 设计一个学生可以选择多门课的管理课程的流程
(1)由于是学生和课程是多对多关系:通常需要建立3张表,学生表、课程表、学生和课程的关联表(对应学生表的id和课程表的id的外键)为了实现这种关系,通常需要创建第三张表
(2)一对多关系
一个实体可以与另一个实体相关联,另一个实体只能与一个实体关联。如:一个部门有多个员工,1个员工只能对应1个部门。
通常在多的一方,插入一个外键,指向表示一方的表的主键
(3)一对一关系
2个实体之间存在一对一关系,如:一个人只能有一个身份证号
在任意一方插入外键,指向另一方的主键。通常选择在数据量少的一方插入外键,提高效率。