”种一棵树最好是十年前,其次是现在“,结合个人十多年IT基础架构领域摸爬滚打的经验来看,数据库领域潜力无限,大有可为。运维领域知识面需要广,更需要专,数据库是我选择做专做深的方向。

DDL-数据库操作

--查看所有数据库实例
showdatabases;
--创建数据库
createdatabasemy_test;
--使用具体数据库实例
usemy_test;
--显示数据库实例下所有表
showtables;

--DDL-表操作
--查询表结构
descempploy;
--查询建表语句
showcreatetableempploy;

--设计一张员工信息表,涉及数据类型
createtableemp
(
idintcomment'编号',
worknovarchar(10)comment'员工工号',
namevarchar(50)comment'员工姓名',
sexchar(1)comment'性别',
agetinyintunsignedcomment'年龄',
lifenochar(18)comment'身份证号',
entrydatedatecomment'入职时间'
)comment'员工信息表';

--给emp表增加一个字段
altertableempaddnicknamevarchar(20)comment'昵称';
altertableempployaddworkaddressvarchar(50)comment'工作地址';
--修改emp表name字段为username
altertableempchangenameusernamevarchar(30)comment'员工姓名';
--修改表名emp为employ
altertableemprenametoempploy;
--删除表empploy
droptableifexistsempploy;

--删除指定表,并重新创建(该表中数据也被删除)
truncatetableempploy;

DML-数据操作语言


--为了能够插入中文字符,需要设置整个表的字符集为utf8mb4
altertableempployconverttocharactersetutf8mb4;
--向empploy表中插入多行数据
insertintoempploy(id,workno,username,sex,age,lifeno,entrydate,nickname)values(1,'0001','jackgu','1',20,'330387654312831283','2022-08-10','jack');
insertintoempployvalues(1,'0001','zhangsan','男',21,'330387654312831281','2022-08-10','jack','地址北京');
insertintoempployvalues(2,'0002','lisi','女',22,'330387654312831283','2022-08-10','jack','上海');
insertintoempployvalues(3,'0003','wangwu','男',23,'330387654312831283','2022-08-10','jack','天津');
insertintoempployvalues(4,'0004','zhaoliu','男',24,'330387654312831283','2022-08-10','jack','杭州');
insertintoempployvalues(5,'0005','laoqi','女',25,'330387654312831283','2022-08-10','jack','广州');
insertintoempployvalues(6,'0006','erha','男',26,'330387654312831283','2022-08-10','jack','上海');
insertintoempployvalues(7,'0007','guaiguai','女',27,'330387654312831283','2022-08-10','jack','北京');
insertintoempployvalues(8,'0008','wangwang','男',28,'330387654312831283','2022-08-10','jack','杭州');
insertintoempployvalues(9,'0009','xuanxuan','女',29,'330387654312831283','2022-08-10','jack','天津');
insertintoempployvalues(10,'0010','yueyue','男',30,'330387654312831283','2022-08-10','jack','广州');
insertintoempployvalues(11,'0011','风清扬','女',25,NULL,'2022-08-10','江湖大佬','天津');
insertintoempployvalues(12,'0012','郭靖','男',35,'33038219871123456x','2022-07-10','傻郭靖','西安');

updateempploysetsex='男'whereid=1;
--修改empploy表中的一行数据
updateempploysetusername='zhangwuji'whereid=1;
--删除empploy表中指定的数据
deletefromempploywherelifeno='';
select*fromempploy;

DQL-数据查询语言


--查询年龄小于等于23岁的员工
select*fromempploywhereage<=23;
--查询身份证号信息为空的员工
select*fromempploywherelifenoisnull;
--查询性别为女且年龄在20到25岁之间的员工
select*fromempploywheresex='女'andagebetween20and25;
--查询身份证信息最后一位为X的的员工信息
select*fromempploywherelifenolike'%x';
--查询姓名为两个字的员工
select*fromempploywhereusernamelike'__';

聚合函数案例练习

--统计所有员工数量
selectcount(*)fromempploy;
--统计所有员工的平均年龄
selectavg(age)fromempploy;
--统计员工的最大年龄
selectmax(age)fromempploy;
--统计员工的最小年龄
selectmin(age)fromempploy;
--统计上海地区员工的年龄之和
selectsum(age)fromempploywhereworkaddress='上海';

分组查询案例练习

--按照性别分组,分别统计男性和女性员工的数量
selectsex,count(*)fromempploygroupbysex;
--按照性别分组,分别统计男性和女性员工的平均年龄
selectsex,avg(age)fromempploygroupbysex;

--查询年龄小于30的员工,并按照地址进行分组,获取员工数量大于等于2的分组
selectworkaddress,count(*)fromempploywhereage<30groupbyworkaddresshavingcount(*)>=2;

排序查询案例练习


--根据年龄对公司员工进行升序排序
select*fromempployorderbyageasc;
--根据入职时间,对公司员工进行降序排序
select*fromempployorderbyentrydatedesc;
--按照年龄对公司员工进行升序排序,年龄相同,按照入职时间进行降序排序
select*fromempployorderbyageasc,entrydateasc;

分页查询案例练习

--查询第一页员工信息,每页信息5条记录
select*fromempploylimit0,5;
select*fromempploylimit5;
--查询第二页员工信息,每页信息5条记录
select*fromempploylimit5,5;
--查询第三页员工信息,每页信息5条记录
select*fromempploylimit10,5;

DQL语句练习


--查询年龄为20,21,22,23岁的女性员工
select*fromempploywheresex='女'andagebetween20and23;
--查询性别为男,并且年龄为20-30岁(含)以内的,姓名为三个字的员工
select*fromempploywheresex='男'andagebetween20and30andusernamelike'___';
--统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
selectsex,count(*)fromempploywhereage<60groupbysex;
--查询年龄小于等于30岁员工姓名和年龄,并对结果按照年龄进行升序排序,如果年龄相同则按照入职时间降序排序
selectusername,agefromempploywhereage<=30orderbyageasc,entrydatedesc;
--查询性别为男,并且年龄为20-30岁(含)以内的前5个员工,对查询的结果按照年龄升序排序,年龄相同按入职时间升序排序
select*fromempploywheresex='男'and(agebetween20and30)orderbyagedesc,entrydatedesclimit5;

DCL语句练习


--创建用户itcast,只能够在当前主机localhost访问,初始密码Zysz!@123456
createuser'itcast'@'localhost'identifiedby'Zysz!@123456';
--创建用户test,可以在任意访问和登录数据库,密码Zysz!@123456
createuser'test'@'%'identifiedby'Zysz!@123456';
--修改用户test的密码为1234
alteruser'test'@'%'identifiedwithmysql_native_passwordby'Zy!@1234';
--删除itcast@localhost用户
dropuser'itcast'@'localhost';

--查询权限
showgrantsfor'test'@'%';
--授予权限
grantallonmy_test.*to'test'@'%';
--撤销权限
revokeallonmy_test.*from'test'@'%';

函数练习


**--字符串函数**

--concat拼接字符串
selectconcat('hello','mysql!');
--lower将字符串全部转为小写
selectlower('HELLO');
--upper将字符串全部转为大写
selectupper('HelloMysql!');
--lpad用字符串pad对字符串左边进行填充
selectlpad('01',5,'-');
--rpad用字符串pad对字符串右边进行填充
selectrpad('01','5','-');
--trim去掉字符串头尾的空格
selecttrim('hellomysql');
--substring(str,start,len)返回从start起len长度的字符串
selectsubstring('hellomysql!',1,7);

usemy_test;
--由于业务需求变更,企业员工的工号统一要求为5位数,不足的在前面用0填充
updateempploysetworkno=lpad(workno,5,'0');

**--数值函数**
--ceil向上取整
selectceil(1.9);
--floor向下取整
selectfloor(1.5);
--mod返回x/y的模
selectmod(4,4);
--rand返回0-1内的随机数
selectrand();
--round求参数x的四舍五入的值,保留y位小数
selectround(2.3445,2);

--通过数据库的函数,生成一个6位数的随机验证码
selectlpad(round(rand()*1000000,0),6,'0');

**--日期函数**
--now()
selectnow();
--YEAR,MONTH,DAY
selectYEAR(now());
selectMONTH(now());
selectDAY(now());
--date_add
selectdate_add(now(),interval70DAY);
--datediff
selectdatediff('2022-5-20','2022-10-23');

--案例:查询所有员工的入职天数,并按照入职天数进行倒序排序
selectusername,datediff(curdate(),entrydate)asentrydatefromempployorderbyentrydatedesc;

**--流程控制函数**
--if
selectif(true,'ok','error');
--ifnull
selectifnull('ok','Default');
selectifnull('','Default');
selectifnull(null,'Default');
--casewhenthenelseend
--需求:查询empploy员工姓名和工作地址(北京/上海---->一线城市,其他----->二线城市)
select
username,
(caseworkaddresswhen'北京'then'一线城市'when'上海'then'一线城市'else'二线城市'end)as'工作地址'
fromempploy;

作者:谷会于(转载请获本人授权,并注明作者与出处)

本文由 mdnice 多平台发布