From d8638ef75a6294c658e3c5d93a4d536d6b8397eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=B0=91=E6=B5=B7?= <3087930763@qq.com> Date: Fri, 3 Mar 2023 21:27:39 +0800 Subject: [PATCH] =?UTF-8?q?20230227=20MySQL=E7=9A=84=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...QL\347\232\204\345\205\263\350\201\224.md" | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 "21 \345\210\230\345\260\221\346\265\267/20230227 MySQL\347\232\204\345\205\263\350\201\224.md" diff --git "a/21 \345\210\230\345\260\221\346\265\267/20230227 MySQL\347\232\204\345\205\263\350\201\224.md" "b/21 \345\210\230\345\260\221\346\265\267/20230227 MySQL\347\232\204\345\205\263\350\201\224.md" new file mode 100644 index 0000000..73a52ba --- /dev/null +++ "b/21 \345\210\230\345\260\221\346\265\267/20230227 MySQL\347\232\204\345\205\263\350\201\224.md" @@ -0,0 +1,110 @@ +```mysql +USE guanlian; +-- -- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ +SELECT * FROM student INNER JOIN score ON student.Sno = score.Sno; +-- -- 2,查询没有学生的教师的所有信息 +SELECT * FROM teacher +LEFT JOIN course ON teacher.Tno = course.Tno +LEFT JOIN score ON course.Cno = score.Cno +WHERE Sno is NULL; +-- ① 查询Score表中的最高分的学生学号和课程号。 +SELECT MAX(Degree) FROM score; +SELECT Degree,Sno,Cno FROM score WHERE Degree = (SELECT MAX(Degree) FROM score); +-- ② 查询所有学生的Sname、Cno和Degree列。 +SELECT student.`name`,score.Cno,score.Degree FROM student INNER JOIN score ON student.Sno = score.Sno; +-- ③ 查询所有学生的Sno、Cname和Degree列。 +SELECT score.Sno,course.Cname,score.Degree FROM score INNER JOIN course on score.Cno = course.Cno; +-- ④ 查询所有学生的Sname、Cname和Degree列。 +SELECT student.`name`,course.Cname,score.Degree FROM student +LEFT JOIN score on student.Sno = score.Sno +LEFT JOIN course on score.Cno = course.Cno; +-- ⑤ 查询“95033”班学生的平均分。 +SELECT Sno FROM student WHERE Class = 95033; +SELECT SUM(Degree) FROM score WHERE Sno IN(101,107,108); +SELECT AVG(Degree) FROM score WHERE Sno IN(SELECT Sno FROM student WHERE Class = 95033); +-- SELECT * FROM student INNER JOIN score ON student.Sno = score.Sno 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 = '计算机导论' +``` + +```MySQL +max (字段)查询最大值 +min (字段)查询最低值 +avg (字段)查询平均值 +any ():括号内任意一个 +all ():括号内的全部 +select 字段列表 from 数据表1 inner join 数据表名称2 on 数据表名称1.相同数据类型的字段 = 数据表2.相同数据类型的字段 ——————内连接 +select 字段列表 from 数据表1 left join 数据表名称2 on 数据表名称1.相同数据类型的字段 = 数据表2.相同数据类型的字段 ——————左连接 +select 字段列表 from 数据表1 right join 数据表名称2 on 数据表名称1.相同数据类型的字段 = 数据表2.相同数据类型的字段 ——————右连接 +``` + -- Gitee