版权声明:本文为博主原创文章,未经博主允许不得转载。
文章目录
一、单选题
1.1 数字函数
1.下列选项不是MySQL常用的函数的是( B )
- A .数字函数
- B .自定义函数 【条件函数】
- C .日期函数
- D .字符函数
2.下列是关于数字函数的应用,代码运行结果为5的是( C )
A. select ROUND(4.42); # 四舍五入
B. select FLOOR(4.62); # 强制舍位
C. select CEIL(4.42); # 强制进位
D. select POWER(2,2); # 幂函数
1.2 日期函数
3.关于日期函数,下列描述错误的是( D)
- A .now()函数获得系统的日期和时间
- B .curdate()函数获得当前的系统日期
- C .curtime()函数获得当前的系统时间
- D .datediff(日期,日期)用来计算两个日期相差的年数 【天数】
4.查询2019年的双十一是星期几(查询结果为英文星期数),下列选项正确的是( A )
- A .select date_format(‘2019/11/11’,’%W’)
- B .select date_format(‘2019/11/11’,’%w’)
- C .select date_format(‘2019-11-11’,’%U’)
- D .select date_format(‘2019-11-11’,’%u’)
1.3 字符函数
5.关于字符函数,下列说法错误的是()
- A . INSTR( )函数用于查询字符出现的次数 【字符出现的位置】
- B .INSERT( )函数用于插入/替换字符
- C .CONCAT( )函数用于连接字符串
- D .REPLACE()函数用于替换字符
6.将身份证号为 ‘478985199511114567’ 的出生年月用*号代替,下列实现该程序的是( )
# 方法一
select rpad(substring('478985199511114567',1,6),length('478985199511114567'),'*');
# 方法二
SELECT SUBSTRING('478985199511114567',1,6);
SELECT SUBSTRING('478985199511114567',15,4);
SELECT CONCAT(SUBSTRING('478985199511114567',1,6),'********',SUBSTRING('478985199511114567',15,4));
1.4 条件函数
7.已有表 tb_stu 的部分数据,如下图所示,暂时把所有系号为null的分到系号为31的系别,打印姓名,入学日期,系号,下列选项实现该功能的是( D )
A. select name, enrollment_date,ifnull(deptno,31) ,deptno from tb_stu;
B. select name, enrollment_date,if(deptno,31)as deptno from tb_stu;
C. select name, enrollment_date ifnull(deptno,31)as deptno from tb_stu;
D. select name, enrollment_date, ifnull(deptno,31) as deptno from tb_stu;
8.已有表 tb_stu 和 tb_dept 的部分数据,如下图所示,毕业了,学校照毕业照,信息工程系用水晶相框,其他系木质相框,打印学生的姓名,系别名及相框类型,下列选项实现该功能的是( A )
A. select stu.name,dept.dname,if(dept.dname="信息工程系",'水晶相框','木质相框')
from tb_stu stu join tb_dept dept on dept.deptno=stu.deptno;
B. select stu.name,dept.dname,ifnull(dept.dname="信息工程系",'水晶相框','木质相框')
from tb_stu stu join tb_dept dept on dept.deptno=stu.deptno
C. select stu.name,dept.dname,if(dept.dname="信息工程系",'木质相框','水晶相框',)
from tb_stu stu join tb_dept dept on dept.deptno=stu.deptno;
D. select stu.name,dept.dname from tb_stu stu join tb_dept dept on dept.deptno=stu.deptno
where if(dept.dname="信息工程系",'水晶相框', '木质相框');
# 方法一
SELECT
s.name, d.dname,
IF(d.dname='信息工程系', '水晶相框','木质相框')
FROM t_student s JOIN tb_dept d ON s.deptno=d.deptno;
# 方法二
SELECT
s.name, d.dname,
CASE
WHEN d.dname='信息工程系' THEN '水晶相框'
ELSE '木质相框'
END
FROM t_student s JOIN tb_dept d ON s.deptno=d.deptno;
二、多选题
三、练习题
3.1 数字函数
SELECT ABS(-100);
SELECT ROUND(4.6288*100)/100;
SELECT FLOOR(9.9);
SELECT CEIL(3.2);
SELECT POWER(2,3);
SELECT LOG(7,3);
SELECT LN(10);
SELECT SQRT(9);
SELECT PI();
SELECT SIN(RADIANS(30));
SELECT COS(RADIANS(45));
SELECT TAN(RADIANS(30));
SELECT COT(RADIANS(45));
# 弧度转角度
SELECT DEGREES(1);
3.2日期函数
3.2.1 获取系统时间函数
SELECT NOW();
SELECT CURDATE();
SELECT CURTIME();
SELECT ename, DATE_FORMAT(hiredate, '%Y') AS 'Year' FROM t_emp;
3.2.2 日期格式化函数
练习1:利用日期函数,查询明年你的生日是星期几?
SELECT DATE_FORMAT('2022-9-19','%W');
练习2:利用日期函数,查询1981年上半年入职的员工有多少人?
SELECT count(*) FROM t_emp
WHERE DATE_FORMAT(hiredate,'%Y')=1981 AND DATE_FORMAT(hiredate,'%m')<=6;
3.2.3 日期计算函数
# 注意事项:日期不能直接加减
SELECT hiredate+1 FROM t_emp;
# 日期偏移计算
SELECT DATE_ADD(NOW(),INTERVAL 15 DAY);
SELECT DATE_ADD(NOW(),INTERVAL -300 MINUTE);
练习1:前6个月零3天【嵌套使用】
SELECT DATE_ADD(NOW(),INTERVAL -6 MONTH);
SELECT DATE_ADD(NOW(),INTERVAL -3 DAY);
SELECT DATE_ADD(DATE_ADD(NOW(),INTERVAL -6 MONTH),INTERVAL -3 DAY);
SELECT DATE_FORMAT(
DATE_ADD(DATE_ADD(NOW(),INTERVAL -6 MONTH),INTERVAL -3 DAY),
'%Y/%m/%d'
)
3.3 字符函数
SELECT
LOWER(ename), UPPER(ename),LENGTH(ename),CONCAT(sal, '$'), INSTR(ename, 'A')
FROM t_emp;
SELECT INSERT('你好',1,0,'先生');
SELECT INSERT('你好',1,1,'先生');
SELECT REPLACE('你好先生','先生','女士');
SELECT SUBSTR('你好世界',3,4);
SELECT SUBSTRING('你好世界', 3,2);
SELECT LPAD('Hello', 10, '*');
SELECT RPAD('Hello', 10, '*');
SELECT TRIM(' 你好先生 ');
练习
# 一、电话号码隐藏
SELECT LPAD(SUBSTRING('13388662368',8,4), 11, '*');
# 二
SELECT RPAD(SUBSTRING('13388662368',1,3),11,'*');
# 三
SELECT RPAD(LPAD(SUBSTRING('13388662368',4,4), 7,'*'), 11, '*');
# 四
SELECT SUBSTRING('13388662368',1,3);
SELECT SUBSTRING('13388662368',8,4);
SELECT CONCAT(SUBSTRING('13388662368',1,3),'****',SUBSTRING('13388662368',8,4));
# 姓名隐藏
SELECT RPAD(SUBSTRING('李晓娜',1,1), LENGTH('李晓娜')/3,'*');
3.4 条件函数
一、条件函数
练习1:中秋节公司发放礼品,SALES部门发放礼品A,其余部门发放礼品B,打印每名员工获得的礼品
SELECT
e.empno, e.ename, d.dname,
IF(d.dname='SALES', '礼品A', '礼品B')
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno;
二、条件语句
练习2:公司年庆决定组织员工集体旅游,每个部门旅游目的地是不同的。SALES部门去P1地点,ACCOUNTING部门去P2地点,RESEARCH部门去P3地点,查询每名员工的旅行地点。
SELECT
e.empno, e.ename, d.dname,
CASE
WHEN d.dname='SALES' THEN 'P1'
WHEN d.dname='ACCOUNTING' THEN 'P2'
WHEN d.dname='RESEARCH' THEN 'P3'
ELSE 'P4'
END AS place
FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno;
二、条件语句
练习3:要求如下
/*
SALES 部门中工龄超过20年,基本工资增长10%;
SALES 部门中工龄不满20年,基本工资增长5%;
ACCOUNTING 部门,增长300元
RESEARCH 部门里低于部门平均底薪,增长200元
没有部门的员工,增长100元
*/
UPDATE t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno
LEFT JOIN (SELECT deptno, AVG(sal) AS avg FROM t_emp GROUP BY deptno) t
ON e.deptno=t.deptno
SET e.sal=(
CASE
WHEN d.dname='SALES' AND DATEDIFF(NOW(), e.hiredate)/365>=20 THEN e.sal + e.sal*0.1
WHEN d.dname='SALES' AND DATEDIFF(NOW(), e.hiredate)/365<20 THEN e.sal + e.sal*0.05
WHEN d.dname='ACCOUNTING' THEN e.sal + 300
WHEN d.dname='RESEARCH' AND e.sal<t.avg THEN e.sal + 200
WHEN d.dname IS NULL THEN e.sal+100
ELSE e.sal
END
);
四、编程题
版权声明:本文为博主原创文章,未经博主允许不得转载。