mysql

mysql

SQL

DML

DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进

行增、删、改操作。

  • 添加数据(INSERT)
  • 修改数据(UPDATE)
  • 删除数据(DELETE)
sql 复制代码
insert into employee(id, workno, name, gender, age, idcard, entrydate) value (1,'1','itcast','男',10,'123456789012345678','2000-01-01');
select  * from employee;

insert into employee value (2,'2','张无忌','男',18,'123456789012345678','2005-001-01');

insert into employee value (3,'3','韦一笑','男',18,'123456789012345678','2005-001-01'),(4,'4','赵敏','女',18,'123456789012345678','2005-001-01');

update employee set name ='itheima' where id=1;
update employee set name= '小昭',gender ='女' where id=1;
update employee set entrydate ='2008-01-01';
delete from employee where gender='女';
delete from employee ;

DQL

基本查询

sql 复制代码
drop table emp;

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(50) comment '工作地址',
entrydate date comment '入职时间'
)comment '员工表';

INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (1, '00001', '柳岩', '女', 20, '123456789012345678', '北京', '2000-01-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (2, '00002', '张无忌', '男', 18, '123456789012345670', '北京', '2005-09-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (3, '00003', '韦一笑', '男', 38, '123456789712345670', '上海', '2005-08-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (4, '00004', '赵敏', '女', 18, '123456757123845670', '北京', '2009-12-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (5, '00005', '小昭', '女', 16, '123456769012345678', '上海', '2007-07-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (6, '00006', '杨逍', '男', 28, '12345678931234567X', '北京', '2006-01-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (7, '00007', '范瑶', '男', 40, '123456789212345670', '北京', '2005-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (8, '00008', '黛绮丝', '女', 38, '123456157123645670', '天津', '2015-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (9, '00009', '范凉凉', '女', 45, '123156789012345678', '北京', '2010-04-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (10, '00010', '陈友谅', '男', 53, '123456789012345670', '上海', '2011-01-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (11, '00011', '张士诚', '男', 55, '123567897123465670', '江苏', '2015-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (12, '00012', '常遇春', '男', 32, '123446757152345670', '北京', '2004-02-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (13, '00013', '张三丰', '男', 88, '123656789012345678', '江苏', '2020-11-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (14, '00014', '灭绝', '女', 65, '123456719012345670', '西安', '2019-05-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (15, '00015', '胡青牛', '男', 70, '12345674971234567X', '西安', '2018-04-01');
INSERT INTO emp (id, workno, name, gender, age, idcard, workaddress, entrydate)
VALUES (16, '00016', '周芷若', '女', 18, null, '北京', '2012-06-01');

-- 基本查询
-- name workno age
select name,workno,age from emp;

-- 查询所有字段返回
select id, workno, name, gender, age, idcard, workaddress, entrydate from emp;

select * from emp;

-- 查询所有员工的工作地址,起别名
select workaddress as '工作地址' from emp;

select workaddress  '工作地址' from emp;

-- 查询员工的上班地址(去除重复)
select distinct workaddress '工作地址' from emp;

条件查询

sql 复制代码
-- select from where
-- 条件查询

-- 1.查询年龄等于88的员工
select * from emp where age =88;

-- 2.查询年龄小于20的员工信息
select * from  emp where age<20;

-- 3.查询年龄小于等于20的员工信息
select * from  emp where age<=20;

-- 4.查询没有身份证号的员工信息
select * from emp where idcard is null;

-- 5. 查询所有有身份证号的员工信息
select * from emp where idcard is not null;

-- 6.查询年龄不等于88的员工信息
select  * from emp where age !=88;
select * from emp where age <> 88;

-- 7.查询年龄在15-20岁之间的员工信息
select * from emp where age >=15 && age<=20;
select * from emp where age >=15 and age<=20;
select *from emp where age between 15 and 20;

-- 8.查询性别为女,且年龄小于25岁的员工信息
select * from emp where gender ='女' and age < 25;

-- 9.查询年龄等于18 或 20 或 40 的员工信息
select * from emp where age = 18 or age = 20 or age =40;
select * from emp where age in(18,20,40);

-- 10.查询姓名为两个字符的员工信息
select * from emp where name like '__';

-- 11.查询身份证号最后以为是X的员工信息
select * from emp where idcard like '%X';
select * from emp where idcard like '_________________X';

聚合函数

函数 功能
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
sql 复制代码
-- null值不参与聚合运算
-- 聚合函数
-- 1.统计企业员工数量
select count(*) from emp;
select count(id) from emp;

-- 2.统计该企业员工的平均年龄
select avg(age) from emp;

-- 3.统计该企业员工年龄的最大值
select max(age) from emp;

-- 4.统计该企业员工年龄的最小值
select min(age) from emp;

-- 5.统计西安地区的员工的年龄之和
select sum(age) from emp where workaddress='西安';

分组查询

sql 复制代码
-- 1.根据性别分组 , 统计男性员工 和 女性员工的数量
select gender, count(*) from emp group by gender ;

-- 2.根据性别分组 , 统计男性员工 和 女性员工的平均年龄

select gender, avg(age) from emp group by gender ;

-- 3.查询年龄小于45的员工 , 并根据工作地址分组 , 获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp where age < 45 group by
workaddress having address_count >= 3

排序查询

sql 复制代码
-- A. 根据年龄对公司的员工进行升序排序
select * from emp order by age asc;
select * from emp order by age;
-- B. 根据入职时间, 对员工进行降序排序
select * from emp order by entrydate desc;
-- C. 根据年龄对公司的员工进行升序排序 , 年龄相同 , 再按照入职时间进行降序排序
select * from emp order by age asc , entrydate desc;

分页查询

sql 复制代码
-- A. 查询第1页员工数据, 每页展示10条记录
 select * from emp limit 0,10;
 select * from emp limit 10;
-- B. 查询第2页员工数据, 每页展示10条记录 --------> (页码-1)*页展示记录数
 select * from emp limit 10,10;

案例练习

sql 复制代码
-- 1). 查询年龄为20,21,22,23岁的女性员工信息
select * from emp where gender='女' and age in(20,21,22,23);

-- 2). 查询性别为 男 ,并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。
select * from emp where gender='男' and ( age between 20 and 40 ) and name like'___';

-- 3). 统计员工表中, 年龄小于60岁的 , 男性员工和女性员工的人数。
select gender,count(*) from emp where age<60 group by gender;

-- 4). 查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序。
select name,age from emp where age<=35 order by age asc,entrydate desc;

-- ). 查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select * from emp where gender='男' and age between 20 and 40 order by age asc ,entrydate asc limit 5```

执行顺序


DCL

DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访

问权限。

管理用户

sql 复制代码
-- 创建用户itcast, 只能够在当前主机localhost访问, 密码123456
 create user 'itcast'@'localhost' identified by '123456';
-- 创建用户heima, 可以在任意主机访问该数据库, 密码123456;
create user 'heima'@'%' identified by '123456';
-- 修改用户heima的访问密码为1234
 alter user 'heima'@'%' identified with mysql_native_password by '1234';
--  删除 itcast@localhost 用户
drop user 'itcast'@'localhost';

权限控制


sql 复制代码
-- A. 查询 'heima'@'%' 用户的权限
show grants for 'heima'@'%';

-- B. 授予 'heima'@'%' 用户itcast数据库所有表的所有操作权限
grant all on itcast.* to 'heima'@'%';

-- C. 撤销 'heima'@'%' 用户的itcast数据库的所有权限
revoke all on itcast.* from 'heima'@'%';

函数

字符串函数

MySQL中内置了很多字符串函数,常用的几个如下:

sql 复制代码
-- conact 字符串拼接
select concat('hello',' mysql');

-- lower 全部转小写
select lower('Hello');

-- upper 全部转大写
select upper('Hello');

-- lpad 左填充
select lpad('01',5,'-');

-- rapad 右填充
select rpad('01',5,'-');

-- trim 去除空格
select trim(' Hello MySQL ');

-- substring 截取字符串
select substring('Hello Mysql',1,5);

-- 练习 由于业务需求变更,企业员工的工号,统一为5位数,目前不足5位数的全部在前面补0。
-- 比如: 1号员工的工号应该为00001
update emp set workno = lpad(workno,5,'0');

数值函数

sql 复制代码
-- 数值函数
-- ceil 向上取整
select ceil(1.1);

-- floor 向下取整
select floor(1.9);

-- mod 取模
select mod(7,4);

-- rand 获取随机数
select rand();

-- round 四舍五入
select round(2.345,2);

-- 练习 通过数据库的函数,生成一个六位数的随机验证码。
-- 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0
select lpad(round(rand()*1000000,0),6,'0');

日期函数

sql 复制代码
-- 日期函数
-- curdate 当前日期
select curdate();

-- curtime 当前时间
select curtime();

-- now 当前日期和时间
select now();

-- year month day 当前年、月、日
select year(now());

select month(now());

select day(now());

-- data_add 增加指定的时间间隔
select date_add(now(),interval 70 year);

-- datediff 获取两个日期相差的天数
select datediff('2021-12-01','2021-10-01');-- 时间1减去时间2

-- 练习:查询所有员工的入职天数,并根据入职天数倒序排序
select name,datediff(curdate(),entrydate) as 'entrydays' from emp order by entrydays;

流程函数

sql 复制代码
-- 流程控制函数
-- if
select if(true,'ok','error');

-- ifnull
select ifnull('ok','default');

select ifnull('','default');

select ifnull(null,'default');

-- case when then else end
-- 需求: 查询emp表的员工姓名的工作地址
select
    name,
    (case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end)as '工作地址'
from emp;

-- 练习
 create table score(
    id int comment 'ID',
    name varchar(20) comment '姓名',
    math int comment '数学',
    english int comment '英语',
    chinese int comment '语文'
 ) comment '学员成绩表';
 insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95
), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);

-- 案例:统计班级各个学员的成绩,展示的规则如下:
-- >=80,展示优秀
-- >=60,展示及格
-- 否则,展示不及格
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;
相关推荐
sin22019 分钟前
Hive数据仓库中的数据导出到MySQL的数据表不成功
数据仓库·hive·mysql
计算机学姐34 分钟前
基于微信小程序的网上订餐管理系统
java·vue.js·spring boot·mysql·微信小程序·小程序·intellij-idea
Zda天天爱打卡41 分钟前
【趣学SQL】第五章:性能优化与调优 5.2 数据库调优——让MySQL跑得比双十一快递还快的终极秘籍
数据库·sql·性能优化
m0_748235955 小时前
CentOS 7使用RPM安装MySQL
android·mysql·centos
leegong231115 小时前
PostgreSQL 初中级认证可以一起学吗?
数据库
秋野酱7 小时前
如何在 Spring Boot 中实现自定义属性
java·数据库·spring boot
weisian1517 小时前
Mysql--实战篇--@Transactional失效场景及避免策略(@Transactional实现原理,失效场景,内部调用问题等)
数据库·mysql
AI航海家(Ethan)7 小时前
PostgreSQL数据库的运行机制和架构体系
数据库·postgresql·架构
Kendra91910 小时前
数据库(MySQL)
数据库·mysql
时光书签11 小时前
Mongodb副本集群为什么选择3个节点不选择4个节点
数据库·mongodb·nosql