【MK】Python全栈 阶段二:习题汇总 五:MySQL数据库的基本操作:基本函数

版权声明:本文为博主原创文章,未经博主允许不得转载。



一、单选题

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_stutb_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
);

四、编程题


版权声明:本文为博主原创文章,未经博主允许不得转载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InitialHeart2021

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值