mysql基础知识-需求案例1

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

DDL-数据库操作

-- 查看所有数据库实例
show databases ;
-- 创建数据库
create database my_test;
-- 使用具体数据库实例
use my_test;
-- 显示数据库实例下所有表
show tables ;

-- DDL-表操作
-- 查询表结构
desc empploy;
-- 查询建表语句
show create table empploy;

-- 设计一张员工信息表,涉及数据类型
create table emp
(
    id        int comment '编号',
    workno    varchar(10comment '员工工号',
    name      varchar(50comment '员工姓名',
    sex       char(1comment '性别',
    age       tinyint unsigned comment '年龄',
    lifeno    char(18comment '身份证号',
    entrydate date comment '入职时间'
)comment '员工信息表';

-- 给emp表增加一个字段
alter table emp add nickname varchar(20comment '昵称';
alter table empploy add workaddress varchar(50comment '工作地址';
-- 修改emp表name字段为username
alter table emp change name username varchar(30comment '员工姓名';
-- 修改表名emp为employ
alter table emp rename to empploy;
-- 删除表empploy
drop table if exists empploy;

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

DML-数据操作语言


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

update empploy set sex = '男' where id=1;
-- 修改empploy表中的一行数据
update empploy set username = 'zhangwuji' where id = 1;
-- 删除empploy表中指定的数据
delete from empploy where lifeno = '';
select * from empploy;

DQL-数据查询语言


-- 查询年龄小于等于23岁的员工
select * from empploy where age <= 23;
-- 查询身份证号信息为空的员工
select * from empploy where lifeno is null ;
-- 查询性别为女且年龄在20到25岁之间的员工
select * from empploy where sex = '女' and age between 20 and 25;
-- 查询身份证信息最后一位为X的的员工信息
select * from empploy where lifeno like '%x';
-- 查询姓名为两个字的员工
select * from empploy where username like '__';

聚合函数案例练习

-- 统计所有员工数量
select count(*) from empploy;
-- 统计所有员工的平均年龄
select avg(age) from empploy;
-- 统计员工的最大年龄
select max(age) from empploy;
-- 统计员工的最小年龄
select min(age) from empploy;
-- 统计上海地区员工的年龄之和
select sum(age) from empploy where workaddress='上海';

分组查询案例练习

-- 按照性别分组,分别统计男性和女性员工的数量
select sex,count(*) from empploy group by sex;
-- 按照性别分组,分别统计男性和女性员工的平均年龄
select sex,avg(age) from empploy group by sex;

-- 查询年龄小于30的员工,并按照地址进行分组,获取员工数量大于等于2的分组
select workaddress,count(*) from empploy where age<30 group by workaddress having count(*) >= 2;

排序查询案例练习


-- 根据年龄对公司员工进行升序排序
select * from empploy order by age asc ;
-- 根据入职时间,对公司员工进行降序排序
select * from empploy order by entrydate desc ;
-- 按照年龄对公司员工进行升序排序,年龄相同,按照入职时间进行降序排序
select * from empploy order by age asc,entrydate asc ;

分页查询案例练习

-- 查询第一页员工信息,每页信息5条记录
select * from empploy limit 0,5;
select * from empploy limit 5;
-- 查询第二页员工信息,每页信息5条记录
select * from empploy limit 5,5;
-- 查询第三页员工信息,每页信息5条记录
select * from empploy limit 10,5;

DQL语句练习


-- 查询年龄为20,21,22,23岁的女性员工
   select * from empploy where sex = '女' and age between 20 and 23;
-- 查询性别为男,并且年龄为 20-30 岁(含)以内的,姓名为三个字的员工
   select * from empploy where sex = '男' and age between 20 and 30 and username like '___';
-- 统计员工表中,年龄小于60岁的,男性员工和女性员工的人数
   select sex,count(*) from empploy where age < 60 group by sex;
-- 查询年龄小于等于30岁员工姓名和年龄,并对结果按照年龄进行升序排序,如果年龄相同则按照入职时间降序排序
   select username,age from empploy where age <= 30 order by age asc,entrydate desc ;
-- 查询性别为男,并且年龄为 20-30 岁(含)以内的前5个员工,对查询的结果按照年龄升序排序,年龄相同按入职时间升序排序
   select * from empploy where sex = '男' and (age between 20 and 30order by age desc ,entrydate desc limit 5 ;

DCL语句练习


-- 创建用户itcast,只能够在当前主机localhost访问,初始密码Zysz!@123456
    create user 'itcast'@'localhost' identified by 'Zysz!@123456';
-- 创建用户test,可以在任意访问和登录数据库,密码Zysz!@123456
    create user 'test'@'%' identified by 'Zysz!@123456';
-- 修改用户test的密码为1234
    alter user 'test'@'%' identified with mysql_native_password by 'Zy!@1234';
-- 删除itcast@localhost用户
    drop user 'itcast'@'localhost';

-- 查询权限
    show grants for 'test'@'%';
-- 授予权限
    grant all on my_test.* to 'test'@'%';
-- 撤销权限
    revoke all on my_test.* from 'test'@'%';

函数练习


**-- 字符串函数**

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

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

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

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

**-- 日期函数**
-- now()
   select now();
-- YEAR,MONTH,DAY
   select YEAR(now());
   select MONTH(now());
   select DAY(now());
-- date_add
   select date_add(now(),interval 70 DAY );
-- datediff
   select datediff('2022-5-20','2022-10-23');

-- 案例:查询所有员工的入职天数,并按照入职天数进行倒序排序
   select username,datediff(curdate(),entrydate) as entrydate from empploy order by entrydate desc ;

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

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

本文由 mdnice 多平台发布

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值