From 3ec568168e3fbb759a6003e1da042b58fb7fb255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=96=9B=E7=A5=96=E4=BF=A1?= <483307635@qq.com> Date: Wed, 1 Mar 2023 11:48:12 +0800 Subject: [PATCH] =?UTF-8?q?=E8=96=9B=E7=A5=96=E4=BF=A1=E7=9A=84=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...42\347\232\204\345\255\246\344\271\240.md" | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 "05 \350\226\233\347\245\226\344\277\241/2023228 \350\201\224\345\220\210\346\237\245\350\257\242\347\232\204\345\255\246\344\271\240.md" diff --git "a/05 \350\226\233\347\245\226\344\277\241/2023228 \350\201\224\345\220\210\346\237\245\350\257\242\347\232\204\345\255\246\344\271\240.md" "b/05 \350\226\233\347\245\226\344\277\241/2023228 \350\201\224\345\220\210\346\237\245\350\257\242\347\232\204\345\255\246\344\271\240.md" new file mode 100644 index 0000000..c7f5d0c --- /dev/null +++ "b/05 \350\226\233\347\245\226\344\277\241/2023228 \350\201\224\345\220\210\346\237\245\350\257\242\347\232\204\345\255\246\344\271\240.md" @@ -0,0 +1,193 @@ +# 1. 学习 + +```sql +inner join +group by +having by +``` + + + +# 2. 作业 + +```sql +-- 1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 + +create database x charset utf8; +use x; +-- 2. 数据库的表结构 +-- 表(一)Student (学生表) +-- 属性名 数据类型 可否为空 含义 +-- Sno varchar (20) 否 学号(主码) +-- Sname varchar (20) 否 学生姓名 +-- Ssex varchar (20) 否 学生性别 +-- Sbirthday datetime 可 学生出生年月 +-- Class varchar (20) 可 学生所在班级 + +create table student ( + sno varchar(20) primary key, + sname varchar(20) not null, + ssex varchar(20) not null, + sbirthday datetime, + class varchar(20) + +); +-- 表(二)Course(课程表) +-- 属性名 数据类型 可否为空 含义 +-- Cno varchar (20) 否 课程号(主码) +-- Cname varchar (20) 否 课程名称 +-- Tno varchar (20) 否 教工编号(外码) +create table course( + cno varchar(20) primary key, + cname varchar(20), + tno varchar(20) +); + + + + +-- 表(三)Score(成绩表) +-- 属性名 数据类型 可否为空 含义 +-- Sno varchar (20) 否 学号(外码) +-- Cno varchar (20) 否 课程号(外码) +-- Degree Decimal(4,1) 可 成绩 +-- 主码:Sno+ Cno +create table score( + cno varchar(20), + degree decimal(4,1), + sno varchar(20), + primary key(cno,sno) +); + alter table score add foreign key(sno) references student(sno) on update cascade on delete cascade; + + alter table score add foreign key(cno) references course(cno) on update cascade on delete cascade; +-- 表(四)Teacher(教师表) +-- 属性名 数据类型 可否为空 含义 +-- Tno varchar (20) 否 教工编号(主码) +-- Tname varchar (20) 否 教工姓名 +-- Tsex varchar (20) 否 教工性别 +-- Tbirthday datetime 可 教工出生年月 +-- Prof varchar (20) 可 职称 +-- Depart varchar (20) 否 教工所在部门 + + create table teacher( + tname varchar(20) not null, + tsex varchar(20) not null, + tbirthday datetime, + prof varchar(20), + depart varchar(20) not null, + tno varchar(20) primary key + ); + alter table course add foreign key(tno) references teacher(tno) on update cascade on delete cascade; +-- 3. 数据库中的数据: +-- -- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ +-- -- 2,查询没有学生的教师的所有信息 +-- +-- +-- 表(一)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 +desc student; +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'); +delete from student; +select * from student; +-- 表(二)Course +-- Cno Cname Tno +-- 3-105 计算机导论 825 +-- 3-245 操作系统 804 +-- 6-166 数字电路 856 +-- 9-888 高等数学 831 +desc course; +insert into course values ('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 +desc score; +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); +update score set degree='91' where sno='107' and cno='3-105'; +alter table score modify sno varchar(20) first; +-- 表(四)Teacher +-- Tno Tname Tsex Tbirthday Prof Depart +-- 804 李诚 男 1958-12-2 副教授 计算机系 +-- 856 张旭 男 1969-3-12 讲师 电子工程系 +-- 825 王萍 女 1972-5-5 助教 计算机系 +-- 831 刘冰 女 1977-8-14 助教 电子工程系 +desc teacher; +insert into teacher values ('李诚','男','1958-12-2','副教授','计算机系','804'),('张旭','男','1969-3-12','讲师','电子工程系','856'),('王萍','女','1972-5-5','助教','计算机系','825'),('刘冰','女','1977-8-14','助教','电子工程系','831'); + + alter table teacher modify tno varchar(20) first; + +-- 4. 查询 +-- ① 查询Score表中的最高分的学生学号和课程号。 + use x; + select * from score; + select sno,cno from score where degree= (select max(degree) from score); + +-- ② 查询所有学生的Sname、Cno和Degree列。 + select student.sname,cno,degree from student inner join score on student.sno=score.sno; +-- ③ 查询所有学生的Sno、Cname和Degree列。 + select sno,course.cname,degree from score inner join course on score.cno=course.cno; +-- ④ 查询所有学生的Sname、Cname和Degree列。 + select sname,course.cname,score.degree from student inner join score on student.sno=score.sno inner join course on score.cno=course.cno; +-- ⑤ 查询“95033”班学生的平均分。 + select avg(degree) from score inner join student on student.sno=score.sno where class='95033'; +-- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 + select * from score where cno='3-105' and sno!='109' and degree >(select degree from score where sno='109'and cno='3-105'); +-- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 + select score.sno,student.sname,degree from score inner join student on score.sno=student.sno where degree<(select max(degree) from score); + +-- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 + select sno from score where cno='3-105' and sno!='109' and degree >(select degree from score where sno='109'and cno='3-105'); +-- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 + select sno,sname,sbirthday from student where sno!='108' and year(sbirthday)=(select year(sbirthday) from student where sno='108'); +-- ⑩ 查询“张旭“教师任课的学生成绩。 + select degree,course.cname from score inner join course on + score.cno=course.cno inner join teacher on course.tno=teacher.tno where score.cno=(select cno from course where tno=(select tno from teacher where tname='张旭')); +-- 11 查询选修某课程的同学人数多于5人的教师姓名。 + select tname from teacher inner join course on teacher.tno=course.tno inner join score on course.cno=score.cno group by score.cno having count(score.cno)>5; + +-- 12 查询出“计算机系“教师所教课程的成绩表。 + select teacher.tname,course.cname,degree from score inner join course on score.cno=course.cno inner join teacher on course.tno=teacher.tno where teacher.depart='计算机系'; +-- 13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 + select tname,prof from teacher group by prof ; +-- 14 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 + select cno,sno,degree from score where cno='3-105' and degree > (select max(degree) from score where cno='3-245') order by degree desc; +-- 15 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. + select cno,sno,degree from score where cno='3-105' and degree > (select max(degree) from score where cno='3-245') ; +-- 16 查询成绩比该课程平均成绩低的同学的成绩表。 + #select degree from score where degree < (select avg(degree) from score GROUP BY cno); + select Sname,Degree from Student right join Score on Student.Sno=Score.Sno where Degree<(select avg(Degree) from Score); +-- 17 查询所有任课教师的Tname和Depart. + select tname,depart from teacher; +-- 18 查询所有未讲课的教师的Tname和Depart. + select tname,depart from teacher right join course on teacher.tno=course.tno left join score on course.cno= score.cno where degree is null; +-- 19 查询“男”教师及其所上的课程。 + select teacher.tname,cname from course inner join teacher on course.tno=teacher.tno where tsex='男'; +-- 20 查询最高分同学的Sno、Cno和Degree列。 + select sno,cno,degree from score where degree=(select max(degree) from score ); +-- 21 查询和“李军”同性别的所有同学的Sname. + select sname,ssex from student where ssex=(select ssex from student where sname='李军'); +-- 22 查询和“李军”同性别并同班的同学Sname. + select sname,ssex from student where sname!='李军' and ssex=(select ssex from student where sname='李军') and class=(select class from student where sname='李军'); +-- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 + select course.cname,degree,student.ssex from course inner join score on course.cno=score.cno inner join student on score.sno=student.sno where course.cname='计算机导论' and student.ssex='男'; + +``` + -- Gitee