数据库技术项目式教程(MySQL)课件 项目8 函数和存储过程.pptx
使用函数;任务提出;任务分析;(1)数学函数;(2)字符串函数;(2)字符串函数;(3)日期和时间函数;(3)日期和时间函数;(4)控制流程函数;【例1】在School数据库中查询出所有学生学号、学生姓名、课程编号、课程名称、期末成绩,要求期末成绩显示为五级制。
SELECTStudent.Sno,Sname,Course.Cno,Cname,
(CASEWHENEndscore=90THEN优秀
WHENEndscore=80THEN良好
WHENEndscore=70THEN中等
WHENEndscore=60THEN及格
WHENEndscore60THEN‘不及格
END)AS成绩
FROMStudentJOINScoreONStudent.Sno=Score.Sno
JOINCourseONCourse.Cno=Score.Cno;;【例2】CASE的独到用处——行转列功能。
统计每个班级男生人数和女生人数。
;【例2】统计每个班级男生人数和女生人数。
SELECTClassNo,SUM(CASEsexWHEN男THEN1ELSE0END)AS男生人数,SUM(CASEsexWHEN女THEN1ELSE0END)AS女生人数
FROMStudent
GROUPBYClassNo;
;(5)其他常用函数;2.用户自定义函数;(1)创建函数;DELIMITER语句;【例3】在School数据库中创建函数calculate_age,根据输入的出生日期计算年龄。
DELIMITER//
CREATEFUNCTIONcalculate_age(birthdate)RETURNSINT
BEGIN
RETURNTIMESTAMPDIFF(YEAR,birth,CURDATE());
END;
//
DELIMITER;
#使用该函数查询出所有学生的学号、姓名和年龄。
SELECTSno,Sname,calculate_age(birth)asage
FROMStudent;;(2)管理函数;【练习1】创建函数rand_num,根据输入的整数n,返回一个1至n之间的随机整数。;任务总结;使用变量和流程控制语句;任务提出;任务分析;1.局部变量;局部变量;【例1】创建函数adds,返回两个数的和,使用局部变量。
DELIMITER//
CREATEFUNCTIONadds(aINT,bINT)RETURNSINT
BEGIN
DECLAREcINTDEFAULT0;#定义c为局部变量
setc=a+b;
RETURNc;
END;
//
DELIMITER;
#使用函数
SELECTAdds(2,3);
;2.选择语句;【例2】创建函数is_even,判断某个数是否为偶数,如果是返回1,否则返回0。
DELIMITER//
createFUNCTIONis_even(numint)RETURNSINT
begin
IFnum%2=0THEN
RETURN1;
ELSE
RETURN0;
ENDIF;
end;
//
DELIMITER;?;选择语句;【例3】在School数据库创建函数convert_grade,返回输入百分制成绩对应的五级制字符。
CREATEFUNCTIONconvert_grade(gradeDECIMAL(4,1))RETURNSVARCHAR(50)
BEGIN
DECLAREresultVARCHAR(50);
CASE
WHENgrade=90THENSETresult=优秀;
WHENgrade=80THENSETresult=良好;
WHENgrade=70THENSETresult=中等;
WHENgrade=60THENSETresult=及格;
WHENgrade60THENSETresult=不及格;
ELSESETresult=NULL;
ENDCASE;
RETURNresult;
END;