diff --git "a/02 \346\236\227\351\221\253/20230227 \345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" "b/02 \346\236\227\351\221\253/20230227 \345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" new file mode 100644 index 0000000000000000000000000000000000000000..48fa571bda2b8d01fec86d0800cf38e701582674 --- /dev/null +++ "b/02 \346\236\227\351\221\253/20230227 \345\210\206\347\273\204\345\207\275\346\225\260\345\222\214\345\205\263\350\201\224\346\237\245\350\257\242.md" @@ -0,0 +1,147 @@ +# 笔记 + +```sql +分组函数 + +类型 sum avg min max count + +特点 +sum,avg一般用于处理数据类型 +max,min,count可以处理任何类型 +sum,avg,max,min,count都忽略null值 + +可以与distinct搭配使用 + + SELECT SUM(DISTINCT salary),SUM(salary) FROM employees; + +``` + +``` +关联查询 +内连接 select e.ename, d.dname from emp e join dept d on(e.deptno = d.deptno); +外连接 +* left 左外连接 +* right 右外连接 +* full 全外连接 +* select * from 表名一 left|right|full [outer] join 表名二 on 表名一.column1 = 表名二.column2; + +``` + +# 作业 + +```sql +create database zuoye charset utf8; +use zuoye; +create table student( + sno varchar(20)primary key, + sname varchar(20)not null, + ssex varchar(20)not null, + sbirthday datetime, + class varchar(20) +); + +create table course( + cno varchar(20)primary key, + cname varchar(20) not null, + tno varchar(20)not null +); + +create table score( + sno varchar(20)not null, + cno varchar(20)not null, + degree decimal(4,1), + foreign key (sno) references student(sno), + foreign key (cno) references course(cno) +); + +create table teacher( + tno varchar(20)primary key, + tname varchar(20)not null, + tsex varchar(20)not null, + tbirthday datetime, + prof varchar(20), + depart varchar(20)not null +); +insert into student values(108,'曾华','男','1977-9-1','95033'); +insert into student values(105,'匡明','男','1975-10-2','95031'); +insert into student values(107,'王丽','女','1976-1-23','95033'); +insert into student values(101,'李军','男','1976-2-20','95033'); +insert into student values(109,'王芳','女','1975-2-10','95031'); +insert into student values(103,'陆君','男','1974-6-3','95031'); + +insert into course values('3-105','计算机导论','825'); +insert into course values('3-245','操作系统','804'); +insert into course values('6-166','数字电路','856'); +insert into course values('9-888','高等数学','831'); + +insert into score values('103','3-245','86'); +insert into score values('105','3-245','75'); +insert into score values('109','3-245','68'); +insert into score values('103','3-105','92'); +insert into score values('105','3-105','88'); +insert into score values('109','3-105','76'); +insert into score values('101','3-105','64'); +insert into score values('107','3-105','91'); +insert into score values('108','3-105','78'); +insert into score values('101','6-166','85'); +insert into score values('107','6-166','79'); +insert into score values('108','6-166','81'); + +insert into teacher values('804','李诚','男','1958-12-2','副教授','计算机系'); +insert into teacher values('856','张旭','男','1969-3-12','讲师','电子工程系'); +insert into teacher values('825','王萍','女','1972-5-5','助教','计算机系'); +insert into teacher values('831','刘冰','女','1977-8-14','助教','电子工程系') +1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ +select student.sno,sname,ssex,sbirthday,class,cname from student left join score on student.sno=score.sno left join course on score.cno=course.cno; + +-- 2,查询没有学生的教师的所有信息 + +4.查询 +① 查询Score表中的最高分的学生学号和课程号。 +select sno,cno from score where degree=(select max(degree) from score); + +② 查询所有学生的Sname、Cno和Degree列。 +select sname,score.cno,degree from student inner join score on student.sno=score.sno; + +③ 查询所有学生的Sno、Cname和Degree列。 +select score.sno,cname,degree from score inner join course on score.cno=course.cno; + +④ 查询所有学生的Sname、Cname和Degree列。 +select sname,cname,degree from student inner join score on student.sno=score.sno inner join course on score.cno=course.cno; + +⑤ 查询“95033”班学生的平均分。 +select avg(score.Degree) from score inner join student on student.Sno = score.Sno where student.Class = '95033'; + +⑥ 查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 +⑦ 查询score中选学多门课程的同学中分数为非最高分成绩的记录。 +⑧ 查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 +⑨ 查询和学号为108的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 +⑩ 查询“张旭“教师任课的学生成绩。 +⑪ 查询选修某课程的同学人数多于5人的教师姓名。 +⑫ 查询出“计算机系“教师所教课程的成绩表。 +select score.sno,score.cno,degree from score left join course on score.cno=course.cno left join teacher on course.tno=teacher.tno where depart='计算机系'; + +⑬ 查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 +select tname,prof from teacher where prof in (select distinct prof from teacher); + +⑭ 查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 +⑮ 查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree. +⑯ 查询成绩比该课程平均成绩低的同学的成绩表。 +⑰ 查询所有任课教师的Tname和Depart. +⑱ 查询所有未讲课的教师的Tname和Depart. +⑲ 查询“男”教师及其所上的课程。 +select tname,cname from teacher left join course on teacher.tno=course.tno where tsex='男'; + +⑳ 查询最高分同学的Sno、Cno和Degree列。 +21 查询和“李军”同性别的所有同学的Sname. +select sname from student where ssex=(select ssex from student where sname='李军'); +22 查询和“李军”同性别并同班的同学Sname. +select sname from student where ssex=(select ssex from student where sname='李军') and class=(select class from student where sname='李军'); +23 查询所有选修“计算机导论”课程的“男”同学的成绩表。 + + +``` + + + +