From dadf9981629f3400649adad7da06f7acb0e8fccd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=8C?= <280180014@qq.com> Date: Wed, 1 Mar 2023 11:50:49 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=B4=E6=96=8C=E7=9A=84=E7=AC=94=E8=AE=B0?= =?UTF-8?q?=E4=B8=8E=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...32\350\241\250\346\237\245\350\257\242.md" | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 "15 \345\220\264\346\226\214/20230227 \345\244\232\350\241\250\346\237\245\350\257\242.md" diff --git "a/15 \345\220\264\346\226\214/20230227 \345\244\232\350\241\250\346\237\245\350\257\242.md" "b/15 \345\220\264\346\226\214/20230227 \345\244\232\350\241\250\346\237\245\350\257\242.md" new file mode 100644 index 0000000..0ca85b8 --- /dev/null +++ "b/15 \345\220\264\346\226\214/20230227 \345\244\232\350\241\250\346\237\245\350\257\242.md" @@ -0,0 +1,217 @@ +# 笔记 + +```mysql +foreign key 外键 + +隐式内连接: +SELECT 字段列表 FROM 表1, 表2 WHERE 条件 ...; + +显式内连接: +select 字段列表 from 表1 [ inner ]/left/right join 表2 on 连接条件 ...; + +order by 排序 +desc 降序 +asc 升序 +select*from 表 order by 字段 desc/asc +``` + + + +# 作业 + +```mysql +/*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) 可 学生所在班级*/ +create database class1 charset utf8; +use class1; +create table Student( + Sno varchar (20) not null primary key comment '学号', + Sname varchar (20) not null comment '学生姓名', + Ssex varchar (20) not null comment '学生性别', + Sbirthday datetime comment '学生出生年月', + Class varchar (20) comment '学生所在班级' +); + +/*表(二)Course(课程表) +属性名 数据类型 可否为空 含义 +Cno varchar (20) 否 课程号(主码) +Cname varchar (20) 否 课程名称 +Tno varchar (20) 否 教工编号(外码)*/ +create table Course( + Cno varchar (20) not null primary key comment '课程号', + Cname varchar (20) not null comment '课程名称', + Tno varchar (20) not null comment '教工编码' +); + alter table Course add foreign key (Tno) references Teacher(Tno); + +/*表(三)Score(成绩表) +属性名 数据类型 可否为空 含义 +Sno varchar (20) 否 学号(外码) +Cno varchar (20) 否 课程号(外码) +Degree Decimal(4,1) 可 成绩 +主码:Sno+ Cno*/ +create table Score( + Sno varchar (20) not null comment '学号', + Cno varchar (20) not null comment '课程号', + Degree Decimal(4,1) comment '成绩' +); + alter table Score add foreign key (Sno) references student(Sno); + alter table Score add foreign key (Cno) references course(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 comment '教工编码', + Tname varchar (20) not null comment '教工姓名', + Tsex varchar (20) not null comment '教工性别', + Tbirthday datetime comment '教工出生年月', + Prof varchar (20) comment '职称', + Depart varchar (20) not null comment '教工所在部门' +); + +/*表(一)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*/ +insert into student values +(108,'曾华','男','1977-9-1','95033'),(105,'匡明','男','1975-10-2','95031'), +(107,'王丽','女','1976-2-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*/ +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*/ +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); + +/*表(四)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 teacher values ('804','李诚','男','1958-12-2','副教授','计算机系'), + ('856','张旭','男','1969-3-12','讲师','电子工程系'), + ('825','王萍','女','1958-5-5','助教','计算机系'), + ('831','刘冰','女','1958-8-14','助教','电子工程系'); + +# 3.数据库中的数据: +-- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ +select Student.Sname,Course.Cname from course,student,score where Student.Sno=Score.Sno and Course.Cno=Score.Cno; + +-- 2,查询没有学生的教师的所有信息 +select Teacher.Tno,Tname,Tsex,Tbirthday,Prof,Depart from Course inner join Score on Course.Cno=Score.Cno right join Teacher on Teacher.Tno=Course.Tno where Degree is null; + +/*4.查询*/ +# ① 查询Score表中的最高分的学生学号和课程号。 +select Sno,Cno from score where Degree=(select max(Degree) from score); + +# ② 查询所有学生的Sname、Cno和Degree列。 +select Student.Sname,Course.Cno,Score.Degree from student,course,score where Course.Cno=Score.Cno and Student.Sno=Score.Sno; + +# ③ 查询所有学生的Sno、Cname和Degree列。 +select Student.Sno,Course.Cname,Score.Degree from student,course,score where Course.Cno=Score.Cno and Student.Sno=Score.Sno; + +# ④ 查询所有学生的Sname、Cname和Degree列。 +select Student.Sname,Course.Cname,Score.Degree from student,course,score where Course.Cno=Score.Cno and Student.Sno=Score.Sno; + +# ⑤ 查询“95033”班学生的平均分 +select avg(Degree) from Score,student,course where Score.Sno=Student.Sno and Course.Cno=Score.Cno and Class=95033; + +# ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 +select student.sname,score.degree from course,score,student where Student.Sno=Score.Sno and Score.Cno='3-105' and Course.Cno='3-105' and Degree>(select Degree from Score where Score.Sno='109' and Score.Cno='3-105'); + +# ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 +select Cname,Degree from score,course where Score.Cno=Course.Cno and Degree<(select max(Degree) from score); + +# ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 +select * from score,student where Score.Sno=Student.Sno and Degree>(select Degree from score where Score.Sno='109' and Cno='3-105'); + +# ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 +select Sno,Sname,Sbirthday from student where Sno='108'; + +# ⑩ 查询“张旭“教师任课的学生成绩。 +select Sname,Degree from score,teacher,course,student where Teacher.Tno='856' and Course.Tno='856' and Course.Cno=Score.Cno and Score.Sno=Student.Sno; + +# ⑪ 查询选修某课程的同学人数多于5人的教师姓名。 +select Tname from course,teacher,score where Score.Cno=Course.Cno and Teacher.Tno=Course.Tno group by Score.Cno having count(Score.Cno)>5; + +# ⑫ 查询出“计算机系“教师所教课程的成绩表。 +select Degree from teacher,course,score where Teacher.Tno=Course.Tno and Depart='计算机系' and Course.Cno=Score.Cno; + +# ⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 +select Tname,Prof from teacher; + +# ⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 +select * from score,student where Student.Sno=Score.Sno and Score.Cno='3-105' and Cno='3-105' and Degree>(select Degree from score where Score.Sno='103' and Score.Cno='3-245') order by Degree desc ; + +# ⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. +select * from score,student where Student.Sno=Score.Sno and Score.Cno='3-105' and Cno='3-105' and Degree>(select Degree from score where Score.Sno='103' and Score.Cno='3-245'); + +# ⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 +select sname,Degree from score,student where Score.Sno=Student.Sno and Degree<(select avg(Degree) from score); + +# ⑰ 查询所有任课教师的Tname和Depart. +select Tname,Depart from teacher,course,score where Score.Cno=Course.Cno and Teacher.Tno=Course.Tno; + +# ⑱ 查询所有未讲课的教师的Tname和Depart. +select Tname,Depart from Course inner join Score on Course.Cno=Score.Cno right join Teacher on Teacher.Tno=Course.Tno where Degree is null; + +# ⑲ 查询“男”教师及其所上的课程。 +select Tname,Tsex,Cname from teacher,course where Teacher.Tno=Course.Tno and Tsex='男'; + +# ⑳ 查询最高分同学的Sno、Cno和Degree列。 +select Sname,Score.Sno,Cno,Degree from score,student where Score.Sno=Student.Sno and Degree=(select max(Degree) from score); + +# 21 查询和“李军”同性别的所有同学的Sname. +select Sname from student where Ssex='男'and Sname!='李军'; + +# 22 查询和“李军”同性别并同班的同学Sname. +select Sname from student where Ssex='男' and Class=95033 and Sname!='李军'; + +# 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 +select Sname,Cname,Ssex,Degree from student,course,score where Student.Sno=Score.Sno and Course.Cno=Score.Cno and Ssex='男' and Cname='计算机导论'; +``` \ No newline at end of file -- Gitee