diff --git "a/53 \345\276\220\345\205\210\351\221\253/2023.02.27 \345\207\275\346\225\260.md" "b/53 \345\276\220\345\205\210\351\221\253/2023.02.27 \345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..e09928cf531a777107eb7fc27b5f75413e89fd85 --- /dev/null +++ "b/53 \345\276\220\345\205\210\351\221\253/2023.02.27 \345\207\275\346\225\260.md" @@ -0,0 +1,225 @@ +# 笔记 + +数学函数 + +求绝对值的函数 + +abs()求绝对值 + +求参数的符号函数 + +sign(n) 返回参数的符号 + +求余函数 + +mod(n,m) 求余数函数 取模运算 返回n被m除的余数 + +上下取整函数 + +floor(n)返回不大于n的最大整数值 + +取最小整数函数 + +ceiling(n)返回不小于n的最小整数值 + +四舍五入函数 + +round(n,d)返回n的值四舍五入保留d位小数 + +求n次幂函数 + +exp(n)返回值e的n次方(自然对数的底)pow(x,y),power(x,y)返回值的次幂 + +求对数函数 + +log(n)返回n的自然对数。log10(n)返回n以10为底的对数, + +求算术平方根函数、圆周率函数 + +sqrt(n)返回非负数n的平方根,pi()返回圆周率, + +求正弦、余弦函数 + +sin(n)返回n的正弦值,cos(n)返回n的余弦值, + +求反正弦、反余弦函数 + +asin(n)返回n反正弦值,acos(n)返回n反余弦(n 是余弦值, + +求正切,余切和反正切、反余切函数 + +tan(n)返回n的正切值,cot(n)返回x的余切,atan(n)返回n的反正切值, + +求随机值函数 + +rand()或rand(n)返回范围0到1.0内的随机浮点值(可以使用数字n作为初始值)当使用整数参数调用时,RAND使用该值作为随机数生成器的种子。每次使用给定值为生成器提供种子时,RAND()都会产生一系列可重复的数字 + +弧度与角度转换函数 + +degrees(n)把n从弧度变换为角度并返回,radiansn)把n从角度变换为弧度并返回 + +保留数字的小数位数函数 + +truncate(n,d)保留数字n的d位小数并返回, + +返回最小值、最大值函数 + +least(x..)返回最小值,如果返回值被用在整数(实数或大小写敏感字串)文或所有参数都是整数(实数或大小写敏感字串)则它们作为整数(实数或大小写敏感字市比较、否则按忽略大小写的字符串被比较, + +greatest(x,y,...)返回最大值(其余同 least())。 + +分组函数: + +分组函数有合并计算 + +**常用分组函数类型** + +1. **AVG(x)** :求平均值 +2. **SUM(x)**:求总和 +3. **MAX(x)** :求最大值 +4. **MIN(x)** :求最小值 +5. **COUNT(x) **:统计记录数 + +关联函数 + +关联查询:两个或更多个表一起查询。 + +前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键。 + +关联查询的SQL有几种情况 + +1、内连接:inner join ... on + +结果:A表 ∩ B表 + +2、左连接:A left join B on + +(2)A表全部 + +(3)A表- A∩B + +3、右连接:A right join B on + +(4)B表全部 + +(5)B表-A∩B + +4、全外连接:full outer join ... on,但是mysql不支持这个关键字,mysql使用union(合并)结果的方式代替 + +(6)A表∪B表: (2) A表结果 union (4)B表的结果 + +(7)A∪B - A∩B (3)A表- A∩B结果 union (5)B表-A∩B结果 + +# 作业 + +```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 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); + +CREATE TABLE Course( +Cno varchar (20) PRIMARY key, +Cname varchar (20) not null, +Tno varchar (20), +FOREIGN key (Tno) REFERENCES teacher(Tno) +); + +CREATE TABLE Score( +Sno varchar (20), +Cno varchar (20), +Degree Decimal(4,1), +FOREIGN key (Sno) REFERENCES Student(Sno), +FOREIGN key (Cno) REFERENCES Course(Cno) +); + + +insert into teacher values(804,'李诚','男','1958-12-2','副教授','计算机系'),(856,'张旭','男','1969-3-12','讲师','电子工程系'),(825,'王萍','女','1972-5-5','助教','计算机系'),(831,'刘冰','女','1977-8-14','助教','电子工程系'); + +INSERT into course values('3-105','计算机导论','825'),('3-245','操作系统','804'),('6-166','数字电路','856'),('9-888','高等数学','831'); + +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 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); + + + + +-- -- 1,查询所有学生,都学了哪些课程,要显示学生信息和课程信息/ +select * from student inner join course ; +-- -- 2,查询没有学生的教师的所有信息 + +--  查询Score表中的最高分的学生学号和课程号。 +SELECT * from score where degree = (SELECT max(degree) from score) +-- 查询所有学生的Sname、Cno和Degree列。 +select sname,cno,degree from student INNER 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 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'); +--  查询“张旭“教师任课的学生成绩。 + +--  查询选修某课程的同学人数多于5人的教师姓名。 +select Tname from teacher where +--  查询出“计算机系“教师所教课程的成绩表。 +select Degree from score inner join course inner JOIN teacher on course.Tno = teacher.Tno and course.cno =score.Cno where Depart = '计算机系'; +--  查询“计算机系”与“电子工程系“不同职称的教师的Tname和Prof。 + +--  查询选修编号为“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 ; + +--  查询选修编号为“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'); + +--  查询成绩比该课程平均成绩低的同学的成绩表。 + +--  查询所有任课教师的Tname和Depart. +select Tname,Depart from teacher; + +--  查询所有未讲课的教师的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); + +-- 查询“男”教师及其所上的课程。 +select Tname,Depart from Teacher where tno in (select tno from course where Cno in (select distinct Cno from Score)); + +--  查询最高分同学的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); + +--  查询和“李军”同性别的所有同学的Sname. +select Sname from student where Ssex=(select Ssex from student where Sname='李军') and Sname not in ('李军'); + +--  查询和“李军”同性别并同班的同学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='李军'); + +--  查询所有选修“计算机导论”课程的“男”同学的成绩表。 +select Sno,Degree from Score where Sno in (select Sno from student where Ssex='男') and Cno in (select Cno from Course where Cname='计算机导论'); + +```