-- 用户表
create table t_user(
id bigint(20) PRIMARY KEY ,
username varchar(20) ,
age int
);-- 科目表
create table t_subject(
id bigint(20) PRIMARY KEY ,
subjectname varchar(20) -- 科目名称
);-- 成绩表
create table t_score(
id bigint(20) PRIMARY KEY ,
subject_id bigint(20),
user_id bigint(20),
score double
);要求:
1.查询每个人,所有科目的成绩 ,没有成绩的 显示null.
显示:用户 科目 分数
2.查询有不及格科目的用户的所有成绩
显示:用户 科目 分数
3.查询三门科目都有的用户
显示:用户 科目 分数
4.查询 有成绩的用户的信息
显示:用户 科目 分数
create table t_user(
id bigint(20) PRIMARY KEY ,
username varchar(20) ,
age int
);-- 科目表
create table t_subject(
id bigint(20) PRIMARY KEY ,
subjectname varchar(20) -- 科目名称
);-- 成绩表
create table t_score(
id bigint(20) PRIMARY KEY ,
subject_id bigint(20),
user_id bigint(20),
score double
);要求:
1.查询每个人,所有科目的成绩 ,没有成绩的 显示null.
显示:用户 科目 分数
2.查询有不及格科目的用户的所有成绩
显示:用户 科目 分数
3.查询三门科目都有的用户
显示:用户 科目 分数
4.查询 有成绩的用户的信息
显示:用户 科目 分数
create table t_user(
id bigint(20) PRIMARY KEY ,
username varchar(20) ,
age int
); -- 科目表
create table t_subject(
id bigint(20) PRIMARY KEY ,
subjectname varchar(20) -- 科目名称
);-- 成绩表
create table t_score(
id bigint(20) PRIMARY KEY ,
subject_id bigint(20),
user_id bigint(20),
score double
);insert into t_subject values (1,'语文');
insert into t_subject values (2,'英语');
insert into t_subject values (3,'数学');insert into t_user values (1,'user_a',1);
insert into t_user values (2,'user_b',2);
insert into t_user values (3,'user_c',1);insert into t_score values (1,1,1,76);
insert into t_score values (2,2,1,50);
insert into t_score values (4,3,1,70);
insert into t_score values (3,3,2,99);--查询科目成绩视图
create view v_score_subject as
select * from t_score sc
right join t_subject su on su.id = sc.subject_id union all
select * from t_score sc
left join t_subject su on su.id = sc.subject_id --3.查询三门科目都有的用户
select userName,subjectName,score from (select * from t_user u left join v_score_subject v on u.id = v.user_id union
select * from t_user u right join v_score_subject v on u.id = v.user_id ) a
join (select count(*) as count ,user_id from v_score_subject group by user_id having count(*) > 2) b on a.user_id = b.user_id--4.查询 有成绩的用户的信息
select userName,subjectName,score from t_user u left join v_score_subject v on u.id = v.user_id where
v.score is not null 2.查询有不及格科目的用户的所有成绩
select userName,subjectName,score from t_user u left join v_score_subject v on u.id = v.user_id where
v.score < 60 --1.查询每个人,所有科目的成绩 ,没有成绩的 显示null.
可以用程序加予处理(大体思想就是,把科目全查出,把存在数据用户成绩科目也查出,遍历用户成绩科目如果在科目结果集里没有就补上一条该用户成绩),纯sql的暂时没想到