(3) 使用逻辑运算符“AND”查看以下语句的结果。
SELECT (7>6) AND ('A'='B');
对上面语句的执行结果进行分析。
6. 系统函数的使用
(1) 获得一组数值的最大值和最小值。
SELECT GREATEST(5,76,25,96) ,LEAST(5,76,25,9);
(2) 将数1.32656四舍五入取整,将1.32656保留小数点后2位小数。
(3) 求财务部雇员总人数。
USE YGGL;
SELECT COUNT(EmployeeID) AS 财务部人数 FROM Employees WHERE DepartmentID= (SELECT DepartmentID FROM Departments
WHERE DepartmentName='财务部');
(4) 求财务部当年收入最高的员工姓名。
(5) 使用CONCAT函数连接两个字符串。
SELECT CONCAT('I love', 'MySQL');
(6) 使用ASCII函数返回字符表达式最左端字符的ASCII值。
SELECT ASCII('MySQL');
(7) 返回Employees表中员工号最左端四个字符。
(8) 获得当前的日期和时间。
SELECT NOW();
(9) 查询YGGL数据库中员工号为000001的员工出生的年份。
SELECT YEAR(Birthday) FROM Employees WHERE EmployeeID='000001';
(10) 使用DAYNAME函数返回当前时间的星期名。
(11) 计算Employees表中每个员工的年龄。
25
思考题:
实验中遇到的问题及解决方法。
26
实验8 过程式数据库对象的使用
实验类型: 验证型 实验课时: 4 指导教师: 时 间:20 年 月 日 课 次:第 节 教学周次:第 周 实验分室: 实验台号: 实 验 员:
实验目的:
1. 掌握存储过程的创建和调用方法 2. 掌握MySQL的流程控制语句 3. 掌握MySQL游标的使用 4.掌握存储函数的创建和调用方法 5.掌握触发器的创建和使用 6.掌握事件的创建和使用
实验要求:
掌握存储过程、存储函数、触发器和事件的相关知识
实验内容:
1. 存储过程 2. 存储函数 3. 触发器 4. 事件
实验步骤:
说明:按实验步骤对数据库YGGL中的三个表进行操作,三个表结构如下(具体参看实验2): Departments (DepartmentID,DepartmentName,Note) Employees
(EmployeeID,Name,Sex,Birthday,Education,WorkYear,Address,PhoneNumber,DepartmentID)
Salary(SalaryID,InCome,OutCome,Time, EmployeeID) 要求:将实验步骤中紫色底纹部分填上正确答案。
1.
存储过程
(1)创建存储过程,使用Employees表中的员工人数来初始化一个局部变量,并调用这个存储过程。
27
USE YGGL DELIMITER $$
CREATE PROCEDURE TEST(OUT NUMBER1 INT ) BEGIN
DECLARE NUMBER2 INT;
SET NUMBER2=(SELECT COUNT(*) FROM Employees); SET NUMBER1=NUMBER2; END$$ DELIMITER ;
调用该存储过程
CALL TEST(@NUMBER);
查看@NUMBER的值。
SELECT @NUMBER ;
将调用存储过程及查看@NUMBER的值的命令及结果进行屏幕截图。
(2) 创建存储过程,比较两个员工指定年月的实际收入,若前者比后者高就输出0,否则输出1。
DELIMITER $$
CREATE PROCEDURE COMP(IN ID1 CHAR(6),IN ID2 CHAR(6),IN SJ CHAR(7)OUT BJ INT ) BEGIN
DECLARE SR1,SR2 FLOAT;
SELECT InCome-OutCome INTO SR1 FROM Salary
WHERE EmployeeID=ID1 AND TIME=SJ; SELECT InCome-OutCome INTO SR2 FROM Salary WHERE EmployeeID=ID2 AND TIME=SJ; IF SR1>SR2 THEN SET BJ=0; ELSE SET BJ=1; END IF; END$$ DELIMITER ;
调用该存储过程
28
CALL COMP('000001','108991','2012-12',@BJ1);
查看@BJ1的值。
SELECT @BJ1 ;
将调用存储过程及查看@BJ1的值的命令及结果进行屏幕截图。
(2) 创建存储过程,使用游标确定一个员工当月的实际收入是否排在前三名。结果为TRUE表示是,结果为FALSE表示否。
DELIMITER $$
CREATE PROCEDURE TOP3(IN EM_ID CHAR(6),OUT OK BOOLEAN ) BEGIN
DECLARE X_EM_ID CHAR(6); DECLARE ACT_IN,SEQ INT; DECLARE FOUND BOOLEAN;
DECLARE SALARY_DIS CURSOR FOR SELECT EmployeeID, InCome-OutCome
FROM Salary WHERE TIME=LEFT(NOW(),7) ORDER BY 2 DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET FOUND=FALSE;
SET SEQ=0; SET FOUND=TRUE; SET OK=FALSE; OPEN SALARY_DIS;
FETCH SALARY_DIS INTO X_EM_ID,ACT_IN; WHILE FOUND AND SEQ<3 AND OK=FALSE DO SET SEQ=SEQ+1;
IF X_EM_ID=EM_ID THEN SET OK=TRUE; END IF;
FETCH SALARY_DIS INTO X_EM_ID,ACT_IN; END WHILE;
CLOSE SALARY_DIS;
29