您的位置:首页 > 职场人生

SQL面试练习(MySql)

2017-05-26 10:47 323 查看
创建测试数据库:

/*如果已经存在此数据库,先删除*/
drop database if exists sqltest  ;
/*创建并设置编码为UTF-8*/
create database sqltest default character set utf8 ;


一、单表查询

idsnonamecnocoursescore
220170101001张三1001语文86
320170101001张三1002数学56
420170101001张三1003英语48
520170101001张三1004化学 90
620170101001张三1005物理57
720170101002李四1001语文90
820170101002李四1002数学68
920170101002李四1003英语87
1020170101002李四1004化学 68
1120170101002李四1005物理45
1220170101003王五1001语文86
1320170101003王五1002数学60
1420170101003王五1003英语48
1520170101003王五1004化学 90
1620170101003王五1005物理70
1720170101004赵六1001语文82
1820170101004赵六1002数学80
1920170101004赵六1003英语30
2020170101004赵六1004化学 70
2120170101004赵六1005物理88
/*切换至测试数据库*/
use sqltest;

/*如果表存在,则删除*/
drop table if exists tb_score  ;

/*创建学生表ST*/
CREATE TABLE `tb_score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`Sno` varchar(50) not null ,
`name` varchar(50) DEFAULT NULL,
`Cno` varchar(50) not null ,
`course` varchar(50) DEFAULT NULL,
`score` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

/*插入数据*/
insert into tb_score (sno,name,cno,course,score) value('20170101001','张三','1001','语文','86') ;
insert into tb_score (sno,name,cno,course,score) value('20170101001','张三','1002','数学','56') ;
insert into tb_score (sno,name,cno,course,score) value('20170101001','张三','1003','英语','48') ;
insert into tb_score (sno,name,cno,course,score) value('20170101001','张三','1004','化学','90') ;
insert into tb_score (sno,name,cno,course,score) value('20170101001','张三','1005','物理','57') ;

insert into tb_score (sno,name,cno,course,score) value('20170101002','李四','1001','语文','90') ;
insert into tb_score (sno,name,cno,course,score) value('20170101002','李四','1002','数学','68') ;
insert into tb_score (sno,name,cno,course,score) value('20170101002','李四','1003','英语','87') ;
insert into tb_score (sno,name,cno,course,score) value('20170101002','李四','1004','化学','68') ;
insert into tb_score (sno,name,cno,course,score) value('20170101002','李四','1005','物理','45') ;

insert into tb_score (sno,name,cno,course,score) value('20170101003','王五','1001','语文','86') ;
insert into tb_score (sno,name,cno,course,score) value('20170101003','王五','1002','数学','60') ;
insert into tb_score (sno,name,cno,course,score) value('20170101003','王五','1003','英语','48') ;
insert into tb_score (sno,name,cno,course,score) value('20170101003','王五','1004','化学','90') ;
insert into tb_score (sno,name,cno,course,score) value('20170101003','王五','1005','物理','70') ;

insert into tb_score (sno,name,cno,course,score) value('20170101004','赵六','1001','语文','82') ;
insert into tb_score (sno,name,cno,course,score) value('20170101004','赵六','1002','数学','80') ;
insert into tb_score (sno,name,cno,course,score) value('20170101004','赵六','1003','英语','30') ;
insert into tb_score (sno,name,cno,course,score) value('20170101004','赵六','1004','化学','70') ;
insert into tb_score (sno,name,cno,course,score) value('20170101004','赵六','1005','物理','88') ;


1.1查询不及格科目数大于等于2的学生学号、姓名和不及格科目数量:

/*不加having条件筛选*/
select sno as '学号' , name as '姓名' , count(score) as '不及格科目数' from tb_score where score < 60 group by sno ;




select sno as '学号' , name as '姓名' , count(score) as '不及格科目数' from tb_score where score < 60 group by sno having count(score) > 2 ;




1.2查询不及格科目数大于等于2的学生学号、姓名:

select sno as '学号' , name as '姓名' from tb_score where score < 60 group by sno having count(score) > 2 ;




1.3、查询不及格科目数大于等于2的学生学号、学生姓名、科目号、科目名称和分数,并按学号降序、科目号升序排序:

中间步骤探索

select * from tb_score where score < 60 group by sno having count(score) >= 2 order by sno desc , cno asc ;




最终结果

select * from tb_score where score < 60 and sno in (
select sno from tb_score where score < 60 group by sno having count(score) >= 2
)
order by sno desc , cno asc ;




二、多表查询

/*选择数据库*/
use sqltest ;

/*删除已有的学生表*/
drop table if exists tb_student ;

/*创建学生表*/
CREATE TABLE `tb_student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stuId` varchar(45) DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
`clsId` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*插入学生的数据*/
insert into tb_student (stuId,name,clsId) value ('1001','张三','201') ;
insert into tb_student (stuId,name,clsId) value ('1002','李四','201') ;
insert into tb_student (stuId,name,clsId) value ('1003','王五','201') ;
insert into tb_student (stuId,name,clsId) value ('1004','赵六','202') ;
insert into tb_student (stuId,name,clsId) value ('1005','巩发财','202') ;
insert into tb_student (stuId,name,clsId) value ('1006','柏拉图','202') ;
insert into tb_student (stuId,name,clsId) value ('1007','钱老虎','203') ;
insert into tb_student (stuId,name,clsId) value ('1008','杨伟','203') ;
insert into tb_student (stuId,name,clsId) value ('1009','陈海','203') ;


/*删除已有的班级表*/
drop table if exists tb_class ;

/*创建班级表*/
CREATE TABLE `tb_class` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`clsId` varchar(45) DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*插入班级的数据*/
insert into tb_class (clsId,name) value ('201','高二(1)班') ;
insert into tb_class (clsId,name) value ('202','高二(2)班') ;
insert into tb_class (clsId,name) value ('203','高二(3)班') ;


/*删除已有的课程表*/
drop table if exists tb_course ;

/*创建课程表*/
CREATE TABLE `tb_course` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`couId` varchar(45) DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*插入课程数据*/
insert into tb_course (couId,name) value ('A01','语文') ;
insert into tb_course (couId,name) value ('A02','数学') ;
insert into tb_course (couId,name) value ('A03','英语') ;


/*删除已有的分数表*/
drop table if exists tb_score ;

/*创建分数表*/
CREATE TABLE `tb_score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stuId` varchar(45) DEFAULT NULL,
`couId` varchar(45) DEFAULT NULL,
`score` float DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*插入分数数据*/
insert into tb_score (stuId,couId,score) value ('1001','A01',81) ;
insert into tb_score (stuId,couId,score) value ('1001','A02',73) ;
insert into tb_score (stuId,couId,score) value ('1001','A03',79) ;

insert into tb_score (stuId,couId,score) value ('1002','A01',79) ;
insert into tb_score (stuId,couId,score) value ('1002','A02',83) ;
insert into tb_score (stuId,couId,score) value ('1002','A03',87) ;

insert into tb_score (stuId,couId,score) value ('1003','A01',65) ;
insert into tb_score (stuId,couId,score) value ('1003','A02',97) ;
insert into tb_score (stuId,couId,score) value ('1003','A03',65) ;

insert into tb_score (stuId,couId,score) value ('1004','A01',78) ;
insert into tb_score (stuId,couId,score) value ('1004','A02',86) ;
insert into tb_score (stuId,couId,score) value ('1004','A03',78) ;

insert into tb_score (stuId,couId,score) value ('1005','A01',67) ;
insert into tb_score (stuId,couId,score) value ('1005','A02',89) ;
insert into tb_score (stuId,couId,score) value ('1005','A03',88) ;

insert into tb_score (stuId,couId,score) value ('1006','A01',98) ;
insert into tb_score (stuId,couId,score) value ('1006','A02',90) ;
insert into tb_score (stuId,couId,score) value ('1006','A03',92) ;

insert into tb_score (stuId,couId,score) value ('1007','A01',85) ;
insert into tb_score (stuId,couId,score) value ('1007','A02',78) ;
insert into tb_score (stuId,couId,score) value ('1007','A03',72) ;

insert into tb_score (stuId,couId,score) value ('1008','A01',78) ;
insert into tb_score (stuId,couId,score) value ('1008','A02',85) ;
insert into tb_score (stuId,couId,score) value ('1008','A03',77) ;

insert into tb_score (stuId,couId,score) value ('1009','A01',68) ;
insert into tb_score (stuId,couId,score) value ('1009','A02',91) ;
insert into tb_score (stuId,couId,score) value ('1009','A03',94) ;


学生表



分数表



班级表



课程表



2.1查询各班各科最高[b]分数:[/b]

SELECT
cls.name AS '班级',
cou.name AS '课程',
MAX(temp.score) AS '最高分'
FROM
(SELECT
st.clsId, sc.couId, sc.score
FROM
tb_score AS sc
INNER JOIN tb_student AS st ON sc.stuId = st.stuId) as temp
INNER JOIN tb_class AS cls ON temp.clsId = cls.clsId
INNER JOIN tb_course AS cou ON temp.couId = cou.couId
GROUP BY temp.clsId , temp.couId


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: