学校头歌,找不到答案于是自己做,造福一下本校暂时还没有做完的同学,答案仅供参考。
第1关:字符串函数
USE company;
#请在此处添加实现代码
########## 以首字母大写,其他字母小写的方式显示所有员工姓名(别名:name) ##########
SELECT CONCAT(upper(SUBSTR(ename,1,1)),LOWER(SUBSTR(ename,2,LENGTH(ename))))
as name from employee;
########## 将员工的工作用大写字母显示 ##########
SELECT upper(job)
from employee;
########## 显示姓名超过5个字符的员工姓名ename ##########
SELECT ename
from employee
where LENGTH(ename)>5;
########## 用'!'来填充员工工作job的结尾处,别名job,按10个字符长度输出, ##########
SELECT RPAD(job,10,'!')
as job from employee
第2关:数学函数
USE mydb;
#请在此处添加实现代码
########## 输出半径为3的圆的面积(别名:面积),保留6位小数 ##########
select round(pi()*pow(3,2),6)面积;
########## 求左侧表达式的值,四舍五入保留2位小数(别名:结果) ##########
select round(sqrt(abs(pow(3,3)-pow(4,4))/pow(2,2)),2)结果;
########## 随机生成一个以130或131或132或133开头的手机号phone ##########
########## 提示:号码分成3个区段,生成3个随机数后赋给3个变量,再拼接成手机号 ##########
set @head=floor(130+rand()*4);
set @middle=floor(1000+rand()*9000);
set @endl=floor(1000+rand()*9000);
##########显示输出随机生成的电话号码,为避免测试不匹配,请大家自行在相关软件上操作 ##########
##########select concat(@head,@middle,@endl) phone;
第3关:日期时间函数
USE company;
#请在此处添加实现代码
#### 查询2010年2月或3月入职的员工姓名和入职时间
select ename,hiredate from employee
where strcmp(year(hiredate),2010)=0 and (strcmp(month(hiredate),2)=0 or strcmp(month(hiredate),3)=0);
#### 显示员工在此公司工作了几个月(别名:工作时长,要求结果是向上取整数)
select ename,ceil(datediff('2020-12-31',hiredate)/30) 工作时长 from employee;
#### 查询所有员工的姓名、加入公司的年份和月份(别名:入职年份、入职月份),并且按照年份排序
select ename,year(hiredate) 入职年份 , month(hiredate) 入职月份
from employee
order by year(hiredate),month(hiredate);
#### 给研发部任职日期超过10年的员工加薪10%
update employee set sal=sal+sal*0.1 where year(now())-year(hiredate)>10 and dno=(select dno from department where dname='research');
select eno,ename,age,sex,job,dno,sal,comm,phone,hiredate from employee
第4关:条件控制函数
USE company;
#请在此处添加实现代码
########## 部门名称中带'S'字符的部门名称、该部门所有员工的总收入(工资+津贴,别名total)及部门人数(别名num) ##########
select dname,sum(ifnull(sal,0)+ifnull(comm,0)) total ,count(eno) num
from employee join department using(dno)
where dname like '%s%'
group by dno;
########## 以指定格式显示员工的姓名ename和佣金comm(例如:Tom's comm is 1000),如果佣金为NULL显示为null,如Jack's comm is null ##########
select concat(ename,'''s comm is ',ifnull(comm,'null')) as 佣金结果 from employee;
第5关:类型转换函数
USE sales;
#请在此处添加实现代码
########## 显示每种商品的销售价格区间(进价的10%-30%),显示格式见左侧 ##########
########## 要求将所求价格由数值转换为字符,并保留2位小数后进行字符串的连接操作 ##########
select gdname,
concat( 'The price range is (',
cast(round(purcprice*1.1,2) AS CHAR),
' ~ ',
cast(round(purcprice*1.3,2) AS CHAR),
')') pricerange
from goods;
第6关:其它常用函数
USE company;
#请在此处添加实现代码
########## 获取MySQL版本号和数据库名 ##########
SELECT VERSION(), DATABASE();
########## 取得每个部门最高薪水的人员姓名,提示:先求每个部门的最高薪水,再将此结果表作为临时表和employee表连接 ##########
select a.dno,a.ename,a.sal from employee a join
(select dno,max(sal) maxsal from employee group by dno) t
on t.dno = a.dno
where a.sal = t.maxsal
order by a.dno;
第7关:用户自定义函数
#请在此处添加实现代码
########## 定义一个函数maxofthree(),输出三个数中的最大值 ##########
DELIMITER @@
CREATE FUNCTION maxofthree(a int,b int,c int)
RETURNS int
BEGIN
declare t int DEFAULT 0;
if a>b then
set t=a;
else
set t=b;
end if;
if c>t then
set t=c;
end if;
return t;
end
@@