引言:
继上一篇文章之后,我发现了有些地方其实我没有讲到,或许有的兄弟们可能不太知道,这里我将会把上次忘记说的数据类型先和大家说一下🤞🤞🤞
表创建
因为担心有的同学看不懂我写的代码示例,我将我所创建的表格分享给大家,不用大家看的很费劲了,大家可以复制下来,创建一下这张表,更好的看我的代码;
create table emp(
id int comment '编号',
workno varchar(10) comment '工号',
name varchar(10) comment '姓名',
gender char(1) comment '性别',
age tinyint unsigned comment '年龄',
idcard char(18) comment '身份证号',
workaddress varchar(10) comment '地址',
entrydate date comment '入职时间'
) comment '员工表';
use cmojo;
alter table emp add workaddress varchar(10) comment '地址';
insert into emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
values (1,'1','柳岩','女',20,'123456789012345678','北京','2000-01-01'),
(2,'2','张无忌','男',18,'123456789012345670','北京','2005-09-01'),
(3,'3','韦一笑','男',38,'123456789712345670','上海','2005-08-01'),
(4,'4','赵敏','女',18,'123456757123845670','北京','2009-12-01'),
(5,'5','小昭','女',16,'123456769012345678','上海','2007-07-01'),
(6,'6','杨逍','男',28,'12345678931234567X','北京','2006-01-01'),
(7,'7','范瑶','男',40,'123456789212345670','北京','2005-05-01'),
(8,'8','黛绮丝','女',38,'123456157123645670','天津','2015-05-01'),
(9,'9','范凉凉','女',45,'123156789012345678','北京','2010-04-01'),
(10,'10','陈友谅','男',53,'123456789012345670','上海','2011-01-01'),
(11,'11','张士诚','男',55,'123567897123465670','江苏','2015-05-01'),
(12,'12','常遇春','男',32,'123446757152345670','北京','2004-02-01'),
(13,'13','张三丰','男',88,'123656789012345678','江苏','2020-11-01'),
(14,'14','灭绝','女',65,'123456719012345670','西安','2019-05-01'),
(15,'15','胡青牛','男',70,'12345674971234567X','西安','2018-04-01'),
(16,'16','周芷若','女',18,null,'北京','2012-06-01');
MySQL数据类型
MySQL 中的数据类型有很多,主要分为三类:数值类型,字符串类型,日期时间类型。
数值类型
字符串类型
日期时间类型
这里就不着重给大家细说了,相信有编程基础的同学们,是可以看得懂的
MySQL-基础-函数
MySQL基础函数大致可分为四类
- 字符串函数
- 数值函数
- 日期函数
- 流程函数
字符串函数
- 字符串拼接
CONCAT(S1,S2,...Sn);
- 字符串全部转为小写
LOWER(str);
- 字符串全部转为大写
UPPER(str);
- 左填充,用pad对str左边进行填充,达到n个字符长度
LPAD(str,n,pad);
- 右填充,用pad对str右边进行填充,达到n个字符长度
RPAD(str,n,pad);
- 去掉字符串头部和尾部的空格
TRIM(str);
- 返回从字符串str从start位置起的len个长度的字符串
SUBSTRING(str,start,len);
练习:
-- eg 首先创建表emp 新建员工工号 ‘workno’,并插入数据(随便即可),之后为统一员工工号格式,统一为五位数,不足五位数的全部在前面补0;比如:1号员工工号改为00001;
update emp set workno = lpad(workno,5,'0');
数值函数
- 向上取整;
CEIL(x);
- 向下取整;
FLOOR(x);
- 返回x/y的模;
MOD(x,y);
- 返回0~1内的随机数;
RAND();
- 求参数x的四舍五入的值,保留y位小数
ROUND(x,y);
练习:
-- eg 通过数据库随机数,生成一个六位数的随机码
#两种方法
select floor(rand()*1e6);
select round(rand()*1e6,0);
# 避免出现0.01234的bug
select lpad(round(rand()*1e6,0),6,'0');
日期函数
- 返回当前日期;
CURDATE();
- 返回当前时间;
CURTIME();
- 返回当前日期和时间;
NOW();
- 获得指定date的年份;
YEAR(date);
- 获得指定date的月份;
MONTH(date);
- 获得指定date的日期;
DAY(date);
- 返回一个日期/时间值加上一个时间间隔expr后的时间值;
DATE_ADD(date,INTERVAL expr type);
- 返回起始时间date1和结束时间date2之间的天数;
DATEDIFF(date1,date2);
练习 :
-- eg 查询所有员工的入职天数,并根据入职天数倒序排序;
select name, datediff(curdate(),entrydate) as 'entrydays' from emp order by entrydays desc;
流程函数
- 如果value为ture,则返回t,否则返回f;
IF(value,t,f);
- 如果value1不为空,返回value1,否则返回value2;
IFNULL(value1,valued2);
- 如果val1为true,返回res1,... 否则返回default默认值;
CASE WHEN [val1] THEN [res1] ...ELSE [default] END;
这里给大家一个例子来参考如何使用这个函数:
-- case when then else end
-- 需求:查询emp表的员工姓名和工作地址(北京/上海 ----> 一线城市,其他 ----> 二线城市)
select
name,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址'
from emp;
练习:
-- eg 统计班级各个学员的成绩,展示的规则如下:
# >=85,展示优秀
# >=60,展示及格
# 否则,展示不及格
create table score(
id int comment 'ID',
name varchar(20) comment '姓名',
math int comment '数学',
english int comment '英语',
chinese int comment '语文'
)comment '学员成绩表';
insert into score values(1,'Tom',67,88,95),(2,'Rose',23,66,90),(3,'Jack',56,98,76);
select
id,
name,
(case when math >= 85 then '优秀' when math >= 60 then '不及格' else '不及格' end) '数学',
(case when english >= 85 then '优秀' when english >= 60 then '不及格' else '不及格' end) '英语',
(case when chinese >= 85 then '优秀' when chinese >= 60 then '不及格' else '不及格' end) '语文'
from score;
尾声
这节给大家讲的MySQL基础函数,同样也希望大家可以多敲多练,不要看一眼就过去了,同时,也给大家提供了学习后的练手题目与答案,希望大家不要直接看我写的代码,可以先自己尝试动手写一下;
感谢大家的支持!!!❤️❤️❤️