From 8453676d8db5508c9c025ba9ffdd280ceba8b9f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E5=BE=90=E7=AB=8B=E5=9F=8E=E2=80=9D?= <“897185960@qq.com”> Date: Sun, 5 Mar 2023 13:27:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=AC=AC=E4=BA=94=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...24\346\254\241\344\275\234\344\270\232.md" | 203 ++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 "11 \345\276\220\347\253\213\345\237\216/20230301 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" diff --git "a/11 \345\276\220\347\253\213\345\237\216/20230301 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" "b/11 \345\276\220\347\253\213\345\237\216/20230301 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" new file mode 100644 index 0000000..8b7eee6 --- /dev/null +++ "b/11 \345\276\220\347\253\213\345\237\216/20230301 \347\254\254\344\272\224\346\254\241\344\275\234\344\270\232.md" @@ -0,0 +1,203 @@ +```mysql + +use book; +CREATE TABLE `book`.`Teacher` ( + `Tno` varchar(20) NOT NULL COMMENT '教工编号', + `Tname` varchar(20) NOT NULL COMMENT '教工姓名', + `Tsex` varchar(20) NOT NULL COMMENT '教工性别', + `Tbirthday` datetime NULL COMMENT '教工出生年月', + `Prof` varchar(20) NULL COMMENT '职称', + `Depart` varchar(20) NOT NULL COMMENT '教工所在部门', + PRIMARY KEY (`Tno`) +); +CREATE TABLE `book`.`Course` ( + `Cno` varchar(20) NOT NULL COMMENT '课程号', + `Cname` varchar(20) NOT NULL COMMENT '课程名称', + `Tno` varchar(20) NOT NULL COMMENT '教工编号', + PRIMARY KEY (`Cno`), + foreign key (Tno) references Teacher(Tno) +); +CREATE TABLE `book`.`Score` ( + `Sno` varchar(20) NOT NULL COMMENT '学号', + `Cno` varchar(20) NOT NULL COMMENT '课程号', + `Degree` Decimal(4,1) COMMENT '成绩', + foreign key (Sno) references Student(Sno) , + foreign key (Cno) references Course(Cno) +); +insert into + +create table Student( +Sno varchar(20) PRIMARY KEY not null comment '学号' , +Sname varchar(20) not null comment '学生姓名', +Ssex varchar(20) not null comment '学生性别', +Sbirthday datetime NULL comment '学生出生年月', +Class varchar(20) NULL comment '学生所在班级' +); +-- 1. 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 +-- 2. 数据库的表结构 +-- 表(一)Student (学生表) +-- 属性名 数据类型 可否为空 含义 +-- Sno varchar (20) 否 学号(主码) +-- Sname varchar (20) 否 学生姓名 +-- Ssex varchar (20) 否 学生性别 +-- Sbirthday datetime 可 学生出生年月 +-- Class varchar (20) 可 学生所在班级 +-- 表(二)Course(课程表) +-- 属性名 数据类型 可否为空 含义 +-- Cno varchar (20) 否 课程号(主码) +-- Cname varchar (20) 否 课程名称 +-- Tno varchar (20) 否 教工编号(外码) +-- 表(三)Score(成绩表) +-- 属性名 数据类型 可否为空 含义 +-- Sno varchar (20) 否 学号(外码) +-- Cno varchar (20) 否 课程号(外码) +-- Degree Decimal(4,1) 可 成绩 +-- 主码:Sno+ Cno +-- 表(四)Teacher(教师表) +-- 属性名 数据类型 可否为空 含义 +-- Tno varchar (20) 否 教工编号(主码) +-- Tname varchar (20) 否 教工姓名 +-- Tsex varchar (20) 否 教工性别 +-- Tbirthday datetime 可 教工出生年月 +-- Prof varchar (20) 可 职称 +-- Depart varchar (20) 否 教工所在部门 +-- 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 +-- 表(二)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 助教 电子工程系 +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'); + +insert into Course values('3-105','计算机导论','825'),('3-245','操作系统','804'),('6-166','数字电路','856'),('9-888','高等数学','831'); + +insert into Teacher values('804','李诚','男','1958-12-2','副教授','计算机系'),('856','张旭','男','1969-3-12','讲师','电子工程系'),('825','王萍','女','1972-5-5','助教','计算机系'),('831','刘冰','女','1977-8-14','助教','电子工程系'); + +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'); +-- 4. 查询 +-- ① 查询Score表中的最高分的学生学号和课程号。 +SELECT Sno,Cno +FROM Score +WHERE Degree = (SELECT MAX(Degree) FROM Score); +-- ② 查询所有学生的Sname、Cno和Degree列。 +SELECT student.Sname,score.Cno,score.Degree FROM student INNER JOIN score ON student.Sno = score.Sno; +-- ③ 查询所有学生的Sno、Cname和Degree列。 +SELECT Course.Cname,score.Sno,score.Degree FROM Course INNER JOIN score ON score.Cno = Course.Cno; + +-- ④ 查询所有学生的Sname、Cname和Degree列。 +select Student.Sname,Course.Cname,Score.Degree from +student LEFT JOIN score ON student.Sno = score.Sno + +LEFT JOIN Course ON score.Cno = Course.Cno; + + +-- ⑤ 查询“95033”班学生的平均分。 +SELECT AVG(Degree) FROM score WHERE Sno IN(SELECT Sno FROM student WHERE Class = 95033); +-- +-- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 +SELECT Degree FROM score WHERE Sno = 109 AND Cno = '3-105' +SELECT * FROM score WHERE Cno = '3-105' AND Degree>(SELECT Degree FROM score WHERE Sno = 109 AND Cno = '3-105'); +-- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 +SELECT MAX(Degree) FROM score; +SELECT Sno,Cno,Degree FROM score WHERE Degree != (SELECT MAX(Degree) FROM score); +-- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 +SELECT Degree FROM score WHERE Sno = 109 AND Cno = '3-105'; +SELECT * FROM score WHERE Degree>(SELECT Degree FROM score WHERE Sno = 109 AND Cno = '3-105'); +-- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列 +SELECT YEAR(Sbirthday) FROM student WHERE Sno = 108; +SELECT * FROM student WHERE Sno = 108 AND ; +SELECT sno,`name`,Sbirthday FROM student WHERE Sbirthday = (SELECT YEAR(Sbirthday) FROM student WHERE Sno = 108); +-- ⑩ 查询“张旭“教师任课的学生成绩。 +SELECT Degree FROM teacher +LEFT JOIN course ON teacher.Tno = course.Tno +LEFT JOIN score ON score.Cno = course.Cno +WHERE score.Cno = '6-166' +-- ⑪ 查询选修某课程的同学人数多于5人的教师姓名。? +SELECT COUNT(Cno) FROM score GROUP BY Cno; +SELECT * FROM teacher +LEFT JOIN course ON teacher.Tno = course.Tno +LEFT JOIN score ON course.Cno = score.Cno +WHERE score.Cno = '3-105' +-- ⑫ 查询出“计算机系“教师所教课程的成绩表。 +SELECT * FROM teacher WHERE Depart = '计算机系' +SELECT * FROM teacher +LEFT JOIN course ON teacher.Tno = course.Tno +LEFT JOIN score ON course.Cno = score.Cno +WHERE course.Cno IN('3-105','3-245') +-- ⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 +SELECT Tname,Prof FROM teacher WHERE Depart IN('计算机系','电子工程系'); +-- ⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 +SELECT Degree FROM score WHERE Cno = '3-105' +SELECT Degree FROM score WHERE Cno = '3-245' +SELECT * FROM score WHERE Cno in ('3-105','3-245'); +select Cno,Sno,Degree from score where cno='3-105' and degree >any(select degree from score where cno='3-245' ) order by degree DESC +-- ⑮ 查询选修编号为“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') ORDER BY Degree DESC; +-- SELECT * FROM (SELECT * FROM score WHERE Cno IN ('3-105','3-245')) AS S WHERE Cno = '3-105' AND Degree > IN (SELECT Degree FROM score WHERE Cno = '3-245'); +-- SELECT * FROM score WHERE Degree > (SELECT Degree FROM score WHERE Cno = '3-245' || Cno = '3-105'); +-- -- ⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 +SELECT * FROM score WHERE Cno = '3-105'; +SELECT AVG(Degree) FROM score WHERE Cno = '3-105'; +SELECT * FROM (SELECT * FROM score WHERE Cno = '3-105') AS S WHERE Degree<(SELECT AVG(Degree) FROM score WHERE Cno = '3-105'); +-- ⑰ 查询所有任课教师的Tname和Depart. +SELECT DISTINCT Tname,Depart FROM teacher +LEFT JOIN course ON teacher.Tno = course.Tno +LEFT JOIN score ON score.Cno = course.Cno +WHERE score.Cno is NOT NULL +-- ⑱ 查询所有未讲课的教师的Tname和Depart. +SELECT DISTINCT Tname,Depart FROM teacher +LEFT JOIN course ON teacher.Tno = course.Tno +LEFT JOIN score ON score.Cno = course.Cno +WHERE score.Cno is NULL +-- ⑲ 查询“男”教师及其所上的课程。 +SELECT * FROM teacher +LEFT JOIN course ON teacher.Tno = course.Tno +LEFT JOIN score ON score.Cno = course.Cno +WHERE score.Cno is NOT NULL AND Tsex = '男' +-- ⑳ 查询最高分同学的Sno、Cno和Degree列。 +SELECT Sno,Cno,Degree FROM score WHERE Degree = (SELECT MAX(Degree)FROM score) +-- 21 查询和“李军”同性别的所有同学的Sname. +SELECT `name` FROM student WHERE Seax = '男' AND `name` != '李军' +-- 22 查询和“李军”同性别并同班的同学Sname. +SELECT Class FROM student WHERE `name` = '李军' +SELECT * FROM student WHERE Seax = '男' AND Class = (SELECT Class FROM student WHERE `name` = '李军') +-- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 +SELECT * FROM score +LEFT JOIN student ON score.Sno = student.Sno +LEFT JOIN course ON score.Cno = course.Cno +WHERE student.Seax = '男' AND course.Cname = '计算机导论' +``` + -- Gitee From cce8799d2d342734cb7ddc66dc894f9d8736cf91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9C=E5=BE=90=E7=AB=8B=E5=9F=8E=E2=80=9D?= <“897185960@qq.com”> Date: Tue, 7 Mar 2023 23:18:59 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=AC=E5=85=AD=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\350\257\242\344\275\234\344\270\232.md" | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 "11 \345\276\220\347\253\213\345\237\216/20230307 \345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" diff --git "a/11 \345\276\220\347\253\213\345\237\216/20230307 \345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" "b/11 \345\276\220\347\253\213\345\237\216/20230307 \345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" new file mode 100644 index 0000000..bf5b788 --- /dev/null +++ "b/11 \345\276\220\347\253\213\345\237\216/20230307 \345\255\220\346\237\245\350\257\242\344\275\234\344\270\232.md" @@ -0,0 +1,86 @@ +```mysql +create database txsb charset utf8; +USE txsb; +CREATE TABLE stuinfo( +stuNO varchar(10), +stuName varchar(10), +stuSex SET('男','女'), +stuAge int, +stuAddress varchar(10), +stuSeat int +); +create table stuExam( +examNO int, +stuNO varchar(10), +writtenExam int, +labExam int +); +create table stuMarks( +examNo int, +stuID varchar(10), +score int +); +insert into stuinfo values('s2501','张秋利','男',20,'美国硅谷',1),('s2502','李斯文','女',18,'湖南武汉',2),('s2503','马文才','男',22,'湖南长沙',3),('s2504','欧阳俊雄','女',21,'湖南武汉',4),('s2505','梅超风','男',20,'湖南武汉',5),('s2506','陈旋风','男',19,'美国硅谷',6); +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); +insert into stuMarks values(1,'s2501',88),(2,'s2501',88),(3,'s2501',53),(4,'s2502',60),(5,'s2502',99),(6,'s2503',82); + +-- 在如图的数据表上完成以下题目 +-- + +-- 1.查询出年龄比班上平均年龄大的学生的信息 +; +select * from stuinfo where stuAge>(select avg(stuAge) from stuinfo); +update stuinfo set stuAge = stuAge-4 where stuNO = '马文才'; +-- 2.查询出每个学生的学号,姓名,性别和选修课程的最高分(stuMarks) + +select stuNO,stuName,stuSex,stuAge,score from +stuinfo LEFT JOIN stuMarks on stuinfo.stuNO = stuMarks.stuID where stuMarks.score=(select max(score) from stuMarks where stuinfo.stuNO = stuMarks.stuID ) ; + +-- + +-- 3.查询出每个学生的学号,姓名,性别和考试平均分(stuExam) + +-- +select a.stuNO,b.stuName,b.stuSex,((writtenExam+labExam)/2) pjf from stuExam a LEFT JOIN stuinfo b on a.stuNO = b.stuNO ; +-- 4.查询性别是男并且年龄大于等于20的学生的信息(用两种方法实现:普通查询和子查询) + +select * from stuinfo where stuSex='男' and stuAge>=20; +select * from stuinfo where stuNO= any(select stuNO from stuinfo where stuSex='男' and stuAge>=20); +-- 5.查询出年龄比所有男生年龄都大的女生的信息 +-- +update stuinfo set stuAge='18' where stuName ='马文才'; +select * from stuinfo where stuAge>(select max(stuAge) from stuinfo where stuSex='男'); +-- 6.查询出所有选修课程都及格的学生的信息 (stuMarks) +-- +select * from stuinfo a LEFT JOIN stuMarks b on a.stuNO =b.stuID where b.score= any(select score from stuMarks where score>=60); +-- 7.查询出参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) +-- +select * from stuinfo a left join stuMarks b on a.stuNO =b.stuID where b.examNo is not null ; + +select * from stuinfo a left join stuMarks b on a.stuNO =b.stuID where +b.examNo =any(select examNo from stuMarks where stuMarks.examNo is not null ); +-- 8.查询出没有参加考试的学生的信息(用表连接,in二种方法做)(stuMarks) +-- +select * from stuinfo a left join stuMarks b on a.stuNO =b.stuID where b.examNo is null; + +select * from stuinfo where stuNo not in (select stuID from stuMarks where score is not null ); +-- 9.将有一门成绩成绩大于90分的学生的基本信息查询出来(stuMarks) +-- +select * from stuinfo a left join stuMarks b on a.stuNO =b.stuID where b.examNo = any(select examNo from stuMarks where score>90) ; +update stuMarks set score=92 where examNo =2; +-- 10.查询出平均成绩在80分以上的学生的基本信息(stuMarks) +-- +select * from stuinfo a left join stuMarks b on a.stuNO =b.stuID where b.score=(select avg(score) from stuMarks GROUP BY stuID having avg(score) > 80); +-- 11.查询出某同学所有考试成绩比“张秋利”同学所有分数都高的学生基本信息(stuMarks) +-- +select * from stuinfo a left join stuMarks b on a.stuNO =b.stuID where b.score > all(select score from stuMarks where stuID='s2501') and a.stuNO != 's2501'; +-- 12.查询出某同学所有考试成绩只需要比“张秋利”同学某个分数高的学生基本信息(stuMarks) +-- +select * from stuinfo a left join stuMarks b on a.stuNO =b.stuID where b.score > any(select score from stuMarks where stuID='s2501') and a.stuNO != 's2501'; +-- 13.查询班上比所有男生年龄都要大的女生的信息 +-- +select * from stuinfo where stuAge>(select max(stuAge) from stuinfo where stuSex='男'); +-- 14.查询出只是比某个男生年龄大的女生的信息 +select * from stuinfo where stuAge>(select min(stuAge) from stuinfo where stuSex='男') and stuSex='女'; +``` + -- Gitee