From 2f21939087383b7bf4a3032d1d0a02359f704e75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=9E=E6=80=9D=E8=BF=9C?= <444515752@qq.com> Date: Sun, 5 Mar 2023 11:49:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20230227 \344\275\234\344\270\232.md" | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 "43 \345\272\236\346\200\235\350\277\234/20230227 \344\275\234\344\270\232.md" diff --git "a/43 \345\272\236\346\200\235\350\277\234/20230227 \344\275\234\344\270\232.md" "b/43 \345\272\236\346\200\235\350\277\234/20230227 \344\275\234\344\270\232.md" new file mode 100644 index 0000000..1beb55a --- /dev/null +++ "b/43 \345\272\236\346\200\235\350\277\234/20230227 \344\275\234\344\270\232.md" @@ -0,0 +1,194 @@ +-- 1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 +-- 2. 数据库的表结构 +create database psy; + +use psy; +-- 表(一)Student (学生表) +-- 属性名 数据类型 可否为空 含义 +-- Sno varchar (20) 否 学号(主码) +-- Sname varchar (20) 否 学生姓名 +-- Ssex varchar (20) 否 学生性别 +-- Sbirthday datetime 可 学生出生年月 +-- Class varchar (20) 可 学生所在班级 + +create table Student( +Sno varchar(20) not null primary key, +Sname varchar(20) not null, +Ssex varchar(20), +Sbirthday datetime, +Class varchar(20) +); + + +insert into Student values +(108,'曾华','男','1977-9-1','95033'), +(105,'匡明','男','1975-10-2','95031'), +(107,'王丽','女','1976-1-23','95033'), +(101,'李军','男','1976-2-20','95033'), +(109,'王芳','女','1975-2-10','95031'), +(103,'陆君','男','1974-6-3','95031'); + + +-- 表(二)Course(课程表) +-- 属性名 数据类型 可否为空 含义 +-- Cno varchar (20) 否 课程号(主码) +-- Cname varchar (20) 否 课程名称 +-- Tno varchar (20) 否 教工编号(外码) + +create table Course( +Cno varchar(20) not null primary key, +Cname varchar(20) not null, +Tno varchar(20) not null +); + +insert into Course values +('3-105','计算机导论','825'), +('3-245','操作系统','804'), +('6-166','数字电路','856'), +('9-888','高等数学','831'); + +-- 表(三)Score(成绩表) +-- 属性名 数据类型 可否为空 含义 +-- Sno varchar (20) 否 学号(外码) +-- Cno varchar (20) 否 课程号(外码) +-- Degree Decimal(4,1) 可 成绩 + +create table Score( +Sno varchar(20) not null, +Cno varchar(20) not null, +Degree Decimal(4,1), +primary key(Sno,Cno) +); + +insert into Score values +('103','3-245',86), +('105','3-245',75), +('109','3-245',68), +('103','3-105',92), +('105','3-105',88), +('109','3-105',76), +('101','3-105',64), +('107','3-105',91), +('108','3-105',78), +('101','6-166',85), +('107','6-166',79), +('108','6-166',81); + +-- 主码:Sno+ Cno +-- 表(四)Teacher(教师表) +-- 属性名 数据类型 可否为空 含义 +-- Tno varchar (20) 否 教工编号(主码) +-- Tname varchar (20) 否 教工姓名 +-- Tsex varchar (20) 否 教工性别 +-- Tbirthday datetime 可 教工出生年月 +-- Prof varchar (20) 可 职称 +-- Depart varchar (20) 否 教工所在部门 + +create table Teacher( +Tno varchar(20) not null PRIMARY KEY, +Tname varchar(20) not null, +Tsex varchar(20) not null, +Tbirthday datetime, +Prof varchar(20), +Depart varchar(20) not null +); + + +insert into Teacher values +('804','李毅','男','1958-12-2','副教授','计算机系'), +('856','张旭','男','1969-3-12','讲师','电子工程系'), +('825','王萍','女','1972-5-5','助教','计算机系'), +('831','刘冰','女','1977-8-14','助教','电子工程系'); + +-- 3. 数据库中的数据: +-- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ + +select st.Sname,co.Cname from student st,course co,score sc where st.Sno=sc.Sno and co.Cno=sc.Cno; + +-- 2,查询没有学生的教师的所有信息 +select * from teacher te left join course co on te.Tno = co.Tno left join score sc on co.Cno = sc.Cno where sc.Sno is null ; + + +##表(一)Student +-- Sno Sname Ssex Sbirthday class +-- 108 曾华 男 1977-9-1 95033 +-- 105 匡明 男 1975-10-2 95031 +-- 107 王丽 女 1976-1-23 95033 +-- 101 李军 男 1976-2-20 95033 +-- 109 王芳 女 1975-2-10 95031 +-- 103 陆君 男 1974-6-3 95031 +##表(二)Course +-- Cno Cname Tno +-- 3-105 计算机导论 825 +-- 3-245 操作系统 804 +-- 6-166 数字电路 856 +-- 9-888 高等数学 831 +##表(三)Score +-- Sno Cno Degree +-- 103 3-245 86 +-- 105 3-245 75 +-- 109 3-245 68 +-- 103 3-105 92 +-- 105 3-105 88 +-- 109 3-105 76 +-- 101 3-105 64 +-- 107 3-105 91 +-- 108 3-105 78 +-- 101 6-166 85 +-- 107 6-166 79 +-- 108 6-166 81 +##表(四)Teacher +-- Tno Tname Tsex Tbirthday Prof Depart +-- 804 李诚 男 1958-12-2 副教授 计算机系 +-- 856 张旭 男 1969-3-12 讲师 电子工程系 +-- 825 王萍 女 1972-5-5 助教 计算机系 +-- 831 刘冰 女 1977-8-14 助教 电子工程系 +##4. 查询 +-- ① 查询Score表中的最高分的学生学号和课程号。 +select Sno,Cno from score where Degree=(select max(Degree) from score); +-- ② 查询所有学生的Sname、Cno和Degree列。 +select st.Sname,sc.Cno,sc.Degree from student st ,score sc where st.sno=sc.sno; +-- ③ 查询所有学生的Sno、Cname和Degree列。 +select st.Sno,st.Sname,sc.Degree from student st ,score sc where st.sno=sc.sno; +-- ④ 查询所有学生的Sname、Cname和Degree列。 +select st.Sname,co.Cname,sc.Degree from student st ,course co ,score sc where st.sno=sc.sno and co.Cno=sc.Cno; +-- ⑤ 查询“95033”班学生的平均分。 +select avg(sc.Degree) from student st, score sc where st.Sno=sc.Sno and Class='95033'; +-- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 +select * from score where Degree>(select Degree from score where Sno='109'and Cno='3-105') and Cno='3-105'; +-- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 +select * from score where Degree not in (select max(Degree) from score group by Cno); +-- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 +select * from score where Degree>(select Degree from score where Sno='109' and Cno='3-105'); +-- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 +select Sno,Sname,Sbirthday from student where year(Sbirthday)=(select year(Sbirthday) from student where Sno='108') and Sno!='108'; +-- ⑩ 查询“张旭“教师任课的学生成绩。 +select Degree from teacher te,score sc,course co where te.Tno= co.Tno and co.Cno=sc.Cno and tname='张旭'; +-- 11 查询选修某课程的同学人数多于5人的教师姓名。 +select tname from course co,teacher te where co.Tno=te.Tno and Cno=(select Cno from score group by Cno having count(*)>5); +-- 12 查询出“计算机系“教师所教课程的成绩表。 +select sc.* from course co, score sc where co.Cno = sc.Cno and co.Tno in(select Tno from teacher where Depart='计算机系'); +-- 13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 +select Tname,Prof from teacher where Prof not in (select Prof from teacher where Depart='计算机系') +union all +select Tname,Prof from teacher where Prof not in (select Prof from teacher where Depart='电子工程系'); +-- 14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 +select Cno,Sno,Degree from score where Cno='3-105' and Degree>all(select Degree from score where Cno='3-245') order by Degree desc; +-- 15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. +select * from score where Cno='3-105' and Degree>all(select Degree from score where Cno='3-245'); +-- 16 查询成绩比该课程平均成绩低的同学的成绩表。 +select * from score a where a.Degree<(select avg(Degree) from score b where a.Cno=b.Cno); +-- 17 查询所有任课教师的Tname和Depart. +select Tname,Depart from teacher; +-- 18 查询所有未讲课的教师的Tname和Depart. +select te.tname,te.Depart from teacher te left join course co on te.Tno = co.Tno left join score sc on co.Cno = sc.Cno where sc.Sno is null ; +-- 19 查询“男”教师及其所上的课程。 +select * from teacher te,course co where te.tno=co.Tno and Tsex='男'; +-- 20 查询最高分同学的Sno、Cno和Degree列。 +select sno,Cno,Degree from score where Cno in(select Cno from score group by Cno) and Degree in (select max(Degree) from score group by Cno); +-- 21 查询和“李军”同性别的所有同学的Sname. +select Sname from student where Ssex=(select Ssex from student where Sname='李军'); +-- 22 查询和“李军”同性别并同班的同学Sname. +select Sname from student where Ssex=(select Ssex from student where Sname='李军') and Class=(select class from student where Sname='李军'); +-- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 +select * from student st , score sc ,course co where st.Sno=sc.Sno and co.Cno=sc.Cno and st.Ssex='男' and co.Cname='计算机导论'; \ No newline at end of file -- Gitee From bd861ec84ccf5f3e22b33cb4f52454d61022f38f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=9E=E6=80=9D=E8=BF=9C?= <444515752@qq.com> Date: Tue, 7 Mar 2023 23:35:20 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../20230306.md" | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 "43 \345\272\236\346\200\235\350\277\234/20230306.md" diff --git "a/43 \345\272\236\346\200\235\350\277\234/20230306.md" "b/43 \345\272\236\346\200\235\350\277\234/20230306.md" new file mode 100644 index 0000000..a63de12 --- /dev/null +++ "b/43 \345\272\236\346\200\235\350\277\234/20230306.md" @@ -0,0 +1,117 @@ +-- 在如图的数据表上完成以下题目 +use psy; +create table stuinfo( +stuno varchar(10) not null primary key, +stuname varchar(20) not null, +stusex char not null, +stuage int not null, +stuaddress varchar(20) not null, +stuseat int not null +); + +insert into stuinfo values +('s2501','张秋利','男',20,'美国硅谷',1), +('s2502','李斯文','女',18,'湖北武汉',2), +('s2503','马文才','男',18,'湖南长沙',3), +('s2504','欧阳俊雄','女',21,'湖北武汉',4), +('s2505','梅超风','男',20,'湖北武汉',5), +('s2506','陈旋风','男',19,'美国硅谷',6); + + + +create table stuexam( +examno int not null primary key auto_increment, +stuno varchar(20) not null, +writtenexam int not null, +labexam int not null +); + +insert into stuexam values +(1,'s2501',50,70), +(2,'s2502',60,65), +(3,'s2503',86,70), +(4,'s2504',40,80), +(5,'s2505',70,85), +(6,'s2506',85,90); + +create table stumarks( +examno int not null primary key auto_increment, +stuid varchar(20) not null, +score int not null +); + +insert into stumarks values +(1,'s2501',88), +(2,'s2502',92), +(3,'s2503',53), +(4,'s2504',60), +(5,'s2505',99), +(6,'s2506',82); + + + +alter table stuexam add foreign key (stuno) references stuinfo(stunio); + +alter table stumarks add foreig key (examno) references stuexam(examno); + + + +-- 1.查询出年龄比班上平均年龄大的学生的信息 +select stuname,stuage from stuinfo where stuage > (select AVG(stuage) from stuinfo); +-- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) + +select a.stuno,a.stusex,max(score) from stuinfo a left join stumarks b on a.stuno=b.stuid group by syuno; + +-- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) + +select a.stuNO,a.stuName,a.stuSex,(b.writtenExam+b.labExam)/2 平均分 from stuinfo a left join stuexam b on a.stuNO=b.stuNO; + +-- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) +select stuname,stusex,stuage from stuinfo where stuage >= 20 and stusex = '男'; +-- 5.查询出年龄比所有男生年龄都大的女生的信息 + +select * from stuinfo where stuSex='女' and stuAge>(select max(stuAge) from stuinfo where stuSex='男'); + +-- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) + +select a.* from stuinfo a, stumarks b where a.stuNO=b.stuID group by stuID having min(b.score)>=60; + +-- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) + +select a.* from stuinfo a,(select stuID from stumarks group by stuID) b where a.stuNO=b.stuID; + +-- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) + +select * from stuinfo where stuNO not in(select stuID from stumarks group by stuID); + +-- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) + +select a.* from stuinfo a,(select stuID from stumarks group by stuID having max(score)>90) b where a.stuNO=b.stuID; + +-- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) + +select a.* from stuinfo a,(select stuID from stumarks group by stuID having avg(score)>80) b where a.stuNO=b.stuID; + +-- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) + +select a. * from + +stuinfo a, + +(select stuid from stumarks where studi!='s2501' group by stuid having max(score) > (select max(score) from stumarks where stuid ='s2501')) b where a.stuno=b.stuid; + +-- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) + +select a.* from stuinfo a, (select stuid from stumarks where stuid!='s2501' group by stuid having max(score) > (select min(score) from stumarks where stuid = 's2501')) b where + +a.stuno=b.stuid; + + + +-- 13.查询班上比所有男生年龄都要大的女生的信息 + +select * from stuinfo where stuSex='女' and stuAge>(select max(stuAge) from stuinfo where stuSex='男'); + +-- 14.查询出只是比某个男生年龄大的女生的信息 + +select * from stuinfo where stuSex='女' and stuAge>(select min(stuAge) from stuinfo where stuSex='男'); \ No newline at end of file -- Gitee