From f298930d3f4d54784370cc96cebecf8a2db6ffb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=AD=A6=E6=96=B0?= <2781716479@qq.com> Date: Tue, 28 Feb 2023 22:40:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=B2=E5=AD=A6=E6=96=B0=E7=9A=84=E7=AC=94?= =?UTF-8?q?=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...45\350\257\242\347\254\224\350\256\260.md" | 267 ++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 "47 \345\217\262\345\255\246\346\226\260/20230227 \345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" diff --git "a/47 \345\217\262\345\255\246\346\226\260/20230227 \345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" "b/47 \345\217\262\345\255\246\346\226\260/20230227 \345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" new file mode 100644 index 0000000..2188a7b --- /dev/null +++ "b/47 \345\217\262\345\255\246\346\226\260/20230227 \345\205\263\350\201\224\346\237\245\350\257\242\347\254\224\350\256\260.md" @@ -0,0 +1,267 @@ +# 笔记 + +```mysql +# 分组函数 +求平均值: avg +求和: sum +求最大值: max +求最小值: min +统计: count + +# 关联查询 +两个或两个以上的表一起查询 +查询的表之间是需要有联系的,之间一定是有关联字段 +1、内连接:inner join ... on +并集 表a ∩ 表b +2、左连接:A left join B on +表a为全部 +A表- A ∩ B +3、右连接:A right join B on +表b为全部 +表b - A ∩ B +4、全外连接:full outer join ... on, +mysql不支持这个关键字,mysql使用union(合并)代替 + +``` + + + +# 作业 + +```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) | 可 | 学生所在班级 | + +-- 表(二)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) | 否 | 教工所在部门 | + +-- 表(一)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 | 助教 | 电子工程系 | +create database class charset utf8; + +use class; +drop database class; +drop table Student;drop table Course;drop table Score;drop table Teacher; +create table Student( + Sno varchar(20) primary key, + Sname varchar(20) not null, + Ssex varchar(20) not null, + Sbirthday datetime null, + Class varchar(20) null +); + +create table Course( + Cno varchar(20) primary key, + Cname varchar(20) not null, + Tno varchar(20) not null, + foreign key (Tno) references Teacher(Tno) +); + +create table Score( + Sno varchar (20) not null, + Cno varchar (20) not null, + Degree Decimal(4,1) null, + foreign key (Sno) references Student(Sno), + foreign key (Cno) references Course(Cno) +); + +create table Teacher( + Tno varchar (20) not null primary key, + Tname varchar (20) not null, + Tsex varchar (20) not null, + Tbirthday datetime null, + Prof varchar (20) null, + Depart varchar (20) not null +); + +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 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'); + +INSERT INTO Teacher VALUES + ('804','李诚','男','1958-12-2','副教授','计算机系'), + ('856','张旭','男','1969-3-12','讲师','电子工程系'), + ('825','王萍','女','1972-5-5','助教','计算机系'), + ('831','刘冰','女','1977-8-14','助教','电子工程系'); + +-- 3. 数据库中的数据: +-- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息 +select Student.Sno,Sname,Ssex,Sbirthday,Class,Score.Cno,Cname,Degree,Tno from Student inner join Score inner join Course on Student.Sno = Score.Sno and Score.Cno = Course.Cno; + +-- 2,查询没有学生的教师的所有信息 + +-- 4. 查询 +-- ① 查询Score表中的最高分的学生学号和课程号。 +select Sno,Cno,max(Degree) from Score; + +-- ② 查询所有学生的Sname、Cno和Degree列。 +select Sname,Cno,Degree from Student left join Score on Student.Sno = Score.Sno; + +-- ③ 查询所有学生的Sno、Cname和Degree列。 +select Student.Sno,Cname,Degree from Student inner join Score inner join Course on Student.Sno = Score.Sno and Score.Cno = Course.Cno; + +-- ④ 查询所有学生的Sname、Cname和Degree列。 +select Student.Sname,Cname,Degree from Student inner join Score inner join Course on Student.Sno = Score.Sno and Score.Cno = Course.Cno; + +-- ⑤ 查询“95033”班学生的平均分。 +select avg(Degree) from Student inner join Score on Student.Sno = Score.Sno where Class = '95033'; + +-- ⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 +select * from Student inner join Score on Student.Sno = Score.Sno where Cno = '3-105' and Degree > (select Degree from score where Cno = '3-105' and Sno = '109'); + +-- ⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 +select * from score where Degree not in (select max(Degree) from score GROUP BY Sno having count(*)>1); + +-- ⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 +select * from Student right join Score on Score.Sno = Student.Sno where Degree> (select Degree from score where Cno = '3-105' and Sno = '109'); + + +-- ⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 +select Sno,Sname,Sbirthday from Student where year(Sbirthday) = (select year(Sbirthday) from student where sno = '108'); + +-- ⑩ 查询“张旭“教师任课的学生成绩。 +select Degree from score inner join course inner JOIN teacher on course.Tno = teacher.Tno and course.cno =score.Cno where teacher.Tno = '856'; + +-- 11 查询选修某课程的同学人数多于5人的教师姓名。 +select Tname from teacher where + +-- 12 查询出“计算机系“教师所教课程的成绩表。 +select Degree from score inner join course inner JOIN teacher on course.Tno = teacher.Tno and course.cno =score.Cno where Depart = '计算机系'; + +-- 13 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 +select Tname,Prof from teacher where Prof not in (select prof from teacher where Depart != Depart); + +-- 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); + +-- 17 查询所有任课教师的Tname和Depart. +select Tname,Depart from teacher; + +-- 18 查询所有未讲课的教师的Tname和Depart.) +select Tname,Depart from teacher where Tname not in (select Tname from teacher inner join course inner JOIN score on course.Tno = teacher.Tno and course.cno =score.Cno); + +-- 19 查询“男”教师及其所上的课程。 +select Tname,Depart from Teacher where tno in (select tno from course where Cno in (select distinct Cno from Score)); + +-- 20 查询最高分同学的Sno、Cno和Degree列。 +select Tname,Depart from Teacher where Tname not in (select distinct Tname from Teacher,Course,Score where Teacher.Tno=Course.Tno and Course.Cno=Score.Cno); + +-- 21 查询和“李军”同性别的所有同学的Sname. +select Sname from student where Ssex=(select Ssex from student where Sname='李军') and Sname not in ('李军'); + +-- 22 查询和“李军”同性别并同班的同学Sname. +select Sname from student where Ssex=(select Ssex from student where Sname='李军') and Sname not in ('李军') and Class=(select Class from student where Sname='李军'); + +-- 23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 +select Sno,Degree from Score where Sno in (select Sno from student where Ssex='男') and Cno in (select Cno from Course where Cname='计算机导论'); +``` + -- Gitee