本关任务:对表达式取整
四舍五入的函数 ROUND(X,D) 返回X,其值保留到小数点后D位,而第D位的保留方式为四舍五入。 若D的值为0,则对小数部分四舍五入。 若将D设为负值,保留X值小数点左边的D位
TRUNCATE(X,D) 返回被舍去至小数点后D位的数字X。 若D的值为0,则不带有小数部分。 将D设为负数,则截X小数点左起第D位开始后面所有低位的值
工作人员gzry数据表如图所示
第一题 显示雇员姓名gyxm和扣费kf(工资gz的0.5%),要求四舍五入到个位。 第二题 显示雇员姓名gyxm和扣费kf(工资的0.5%),要求舍去小数部分(不是四舍五入)
开始你的任务吧,祝你成功!
use sale;
#代码开始
#第一题答案
select gyxm,round(gz*0.05,0) as kf from gzry;
#第二题答案
select gyxm,truncate(gz*0.05,0) as kf from gzry;
#代码结束
本关任务:工作人员gzry数据表如图所示,使用字符串函数完成下列查询
为了完成本关任务,你需要掌握: concat rpad char_length left
concat
concat(<字符串1>,<字符串2>,<字符串3>) 将各个字符串连接起来
rpad
rpad(<字符串>,<长度>,<填充字符>) 返回字符串,右面用填充字符填补,直到指定长度的字符串
left
LEFT(<字符串>,<长度>) 返回字符串的最左边的指定长度的字符
char_length
char_length(<字符串>) 返回字符串的长度,即字符个数
第一题 查询员工信息(命名为ygxx),使用字符串函数连接部门(不足4位宽度的部分右边填充全角空格)、姓名(不足4位宽度的部分右边填充全角空格)、电话,按部门升序排列。
第二题 查询gzry数据表中姓王且名字为双字的员工的姓名和电话 (即王某某)
开始你的任务吧,祝你成功!
use sale
#代码开始
#答案一
select concat(rpad(bm,4," "),rpad(gyxm,4," "),dh) as ygxx from gzry order by bm;
#答案二
select gyxm,dh from gzry where left(gyxm,1)="王" and char_length(gyxm)=3;
#代码结束
本关任务:灵活应用字符串函数显示顾客gk数据表的数据
为了完成本关任务,你需要掌握: insert space mid right replace
insert
insert(<字符串>,<位置>,<长度>,<插入的字符串>) 返回一个字符串,将字符串中指定位置的指定长度的字符删除,插入指定的字符串。
space
space(<整数>) 返回指定整数的空格
mid
mid(<字符串>,<指定位置>,<指定长度>) 返回字符串从指定位置开始的指定长度的字符串
right
right(<字符串>,<指定长度>) 返回字符串右边的指定长度的字符串
replace
REPLACE(<字符串>,<源字符串>,<目标字符串>) 返回一个字符串,将字符串中所有的源字符串用目标字符串代替。
顾客数据表gk如图所示
第一问 显示每位顾客的姓名,两个字的中间插入两个空格,三个字的直接显示,列名为xm 第二问 显示每位顾客的姓名和电话(dh),电话按照999-9999-9999的格式显示 第三问 将顾客数据表中单位(dept)中的新一佳用佳惠替换
开始你的任务吧,祝你成功!
use sale;
#代码开始
#答案1
SELECT INSERT(name, 2, 0, SPACE(2 * (3 - CHAR_LENGTH(name)))) AS xm FROM gk;
#答案2
select name,concat(left(tel,3),"-",mid(tel,4,4),"-",right(tel,4)) as dh from gk;
#答案3
update gk set dept=replace(dept,"新一佳","佳惠");
select name,dept from gk;
#代码结束
本关任务:灵活应用日期函数进行查询
为了完成本关任务,你需要掌握: year month datediff
year
year(日期) 返回日期的年号
month
month(日期) 返回日期的月号
datediff
datediff(日期1,日期2) 返回两个日期相差的天数
xsd数据表部分数据如图所示
第一问 查询2015年各月份(列名yf)的实际付款的和(列名sjje) 提示:按照xsrq的月份对sjfk汇总 第二问 library数据库的borrow数据表如图所示 book数据表的条形码、书名、售价字段如图所示 根据图书馆规定,借阅期限是30天,超过30天需要按书籍售价的1%每天收取罚款. 查询dzzh和罚款(fk列) (提示:该查询涉及到两个数据表borrow和book)
开始你的任务吧,祝你成功!
use sale;
#代码开始
#答案1
select month(xsrq) as yf,sum(sjfk) as sjje from xsd where year(xsrq)=2015 group by month(xsrq);
#第二问
use library;
#答案2
select dzzh,(datediff(hsrq,jyrq)-30)*sj*0.01 as fk from borrow,book where book.txm=borrow.txm and datediff(hsrq,jyrq)>30;
#代码结束
本关任务:工作人员gzry数据表如图所示,使用条件函数完成下列查询
为了完成本关任务,你需要掌握: if case when then
if
if(关系表达式,值1,值2) 当条件表达式为真,返回值1,否则返回值2
case
case <表达式> when <条件1> then <值1> when <条件2> then <值2> …… else <值n+1> end 若表达式的值为条件1则返回值1,否则若表达式的值为条件2则返回值1……若都不相同则返回值n+1
第一题 显示员工的姓名和费用(fy列),其中工资(gz)在2000以下的交50元,否则交100元。
第二题 显示员工的姓名和津贴(jt),其中部门(bm)是销售部津贴1000,办公室津贴800,采购部津贴500,仓库津贴300。
开始你的任务吧,祝你成功!
use sale;
#代码开始
#答案1
select gyxm,if(gz<2000,50,100) as fy from gzry;
#答案2
select gyxm,case bm when "销售部" then 1000 when "办公室" then 800 when "采购部" then 500 else 300 end as jt from gzry;
#代码结束