数据库相关习题3
1. 题目描述
2.某大学研究生院有若干研究生导师,包括职工编号、姓名、职称、研究方向,其中每个导师的职工编号是唯一的。
若干研究生,包括学号、姓名、性别、入学日期,其中每个研究生的学号是唯一的。
每个导师可以带若干研究生,但每个研究生只能有一个导师。
请设计一个数据库,要求可以正确体现导师和研究生之间的关系。
设计完毕之后,请插入一定量的数据,并验证你设计的数据库是否满足要求。
在你设计的表中插入若干数据。
1.请查出每个导师所带研究生的姓名。
2.请查出特定姓名的导师所带研究生的姓名。
3.请查出每个导师所带研究生的数量。
4.请查出每个导师所带的男研究生的数量。
5.请找出选择哪个研究方向的导师最多。
6.请找统计不同职称的导师的个数。
除上述列出的各项操作之外
你也可以自己再思考一些需求,然后再练习多表查询的相关操作。
2. SQL语言实现
在你设计的表中插入若干数据。
0.创建表,插入数据
create table tutor(
t_id int primary key auto_increment,
name varchar(50),
grade varchar(50),
direction varchar(200)
);
INSERT INTO tutor VALUES (1, '袁隆平', '副教授', '人工智能');
INSERT INTO tutor VALUES (2, '终南山', '教授', '大数据');
INSERT INTO tutor VALUES (3, '屠呦呦', '讲师', '数据挖掘');
INSERT INTO tutor VALUES (4, '姚期智', '教授', '大数据');
INSERT INTO tutor VALUES (5, '毛爷爷', '主席', '毛泽东思想');
INSERT INTO tutor VALUES (6, '邓爷爷', '主席', '邓小平理论');
select * from tutor;
create table postgraduate(
s_id int primary key auto_increment,
name varchar(50),
gender varchar(10),
time varchar(50),
tutor_id int
);
-- drop table postgraduate;
INSERT INTO postgraduate VALUES (1, '王一', '男', '2009-09-08', 2);
INSERT INTO postgraduate VALUES (2, '吴二', '男', '2011-03-04 ', 4);
INSERT INTO postgraduate VALUES (3, '张三', '女', '2015-09-04 ', 3);
INSERT INTO postgraduate VALUES (4, '秦二', '男', '2019-01-23 ', 1);
INSERT INTO postgraduate VALUES (5, '武四', '女', '2011-04-06 ', 2);
INSERT INTO postgraduate VALUES (6, '李白', '男', '2020-11-14 ', 6);
INSERT INTO postgraduate VALUES (7, '高源', '女', '2019-08-27 ', 2);
INSERT INTO postgraduate VALUES (8, '张旭辉', '男', '2022-09-01 ', 6);
INSERT INTO postgraduate VALUES (9, '王尚', '男', '2015-09-04 ', 1);
INSERT INTO postgraduate VALUES (10, '郑恺', '男', '2017-09-01', 5);
select * from postgraduate;
alter database testdb1 character set utf8 collate utf8_bin;
1.请查出每个导师所带研究生的姓名。
select * from tutor t left join postgraduate p on t.t_id=p.tutor_id;
2.请查出特定姓名的导师所带研究生的姓名。
select * from tutor t left join postgraduate p on t.t_id=p.tutor_id where t.name='袁隆平';
3.请查出每个导师所带研究生的数量。
select t.name ,count(*) from tutor t ,postgraduate p where t.t_id=p.tutor_id group by p.tutor_id;
4.请查出每个导师所带的男研究生的数量。
select t.name ,count(*) from tutor t ,postgraduate p where t.t_id=p.tutor_id and p.gender='男' group by p.tutor_id;
5.请找出选择哪个研究方向的导师最多。
select direction 研究方向导师最多 from tutor group by direction order by count(*) desc limit 1;
6.请找统计不同职称的导师的个数。
select grade 职称,count(*) 导师人数 from tutor group by grade;