b站黑马程序员MySQL课程的学习笔记
DQL(数据查询语句)
练习用数据:
create table emp(
id int,
workno varchar(10),
name varchar(10),
gender char(1),
age tinyint unsigned,
idcard char(18),
entrydate date,
worksddress varchar(50)
) comment '员工表';
insert into emp (id, workno, name, gender, age, idcard, entrydate, worksddress) values (1,'1','刘艳','女',20,'12345678909876','2000-01-01','北京'),
(2,'2','刘小艳','女',21,'12345678809876','2006-01-01','北京'),
(3,'3','刘近','男',24,'12333678909876','2001-05-01','河南'),
(4,'4','丽丽','女',25,'44345678909876','2005-01-01','上海'),
(5,'5','黄丽','女',23,'22775678909876','2004-05-01','南昌'),
(6,'6','金小','女',27,'32348878909876','2009-05-01','北京'),
(7,'7','张艳','女',20,'42345678909876','2010-01-01','北京'),
(8,'8','小力','男',20,'52345678909876','2022-07-01','北京'),
(9,'9','宏光','男',20,'62345678909876','2013-01-01','江苏'),
(10,'10','勇士','男',20,'72345678909876','2014-08-01','北京'),
(11,'11','故里','女',20,'82345678909876','2011-01-01','北京'),
(12,'12','范嘉','女',23,'92345678909876','2017-07-01','沈阳'),
(13,'13','王丹','女',24,'23345678909876','2006-06-01','北京'),
(14,'14','诚实','男',26,'45345678909876','2000-07-01','大连'),
(15,'15','黄亮','男',28,'78345678909876','2009-07-01','北京'),
(16,'16','周芷若','女',20,null,'2009-01-01','北京');
基本查询
功能 | 语法格式 |
---|---|
查询多个字段 | select 字段1,字段2,字段3……from 表名; |
查询所有字段 | select*from 表名; |
设置别名 | select 字段1[as 别名1],字段2[as 别名2]……from 表名; |
去除重复记录 | select distinct 字段列表 from 表名; |
select name,workno,age from emp;
select*from emp;
select worksddress from emp;
select worksddress as '工作地址' from emp;
select distinct worksddress as '工作地址' from emp;
条件查询
条件查询语法:select 字段列表 from 表名 where 条件列表;
select *from emp where age=20;
select * from emp where age<26;
select*from emp where idcard is null;
select *from emp where idcard is not null;
select *from emp where age!=20;
select *from emp where age>=23 and age<=28;
select *from emp where age between 23 and 28;
select *from emp where gender='女' and age<23;
select *from emp where age=20 or age=21 or age=23;
select *from emp where age in (20,21,23);
select *from emp where name like '___';
select *from emp where idcard like '%6';
聚合函数
聚合函数:将一列数据作为一个整体,进行纵向计算
语法: select 聚合函数(字段列表)from 表名;
聚合函数 | 语义 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
select count(*) from emp;#null不参与聚合函数计算
select avg(age) from emp;
select max(age) from emp;
select sum(age) from emp where worksddress='北京';
分组查询(group by)
语法:select 字段列表 from 表名[where 条件] group by 分组字段[having 分组后过滤条件];
where和having区别:
执行时机不同:where是分组前进行过滤,不满足where条件,不参与分组,having是分组后对结果进行过滤
判断条件不同:where不能对聚合函数进行判断,而having可以
扫描二维码关注公众号,回复:
15333417 查看本文章
执行顺序:where>聚合函数>having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无意义
select gender,count(*) from emp group by gender;
select gender,avg(age) from emp group by gender;
select worksddress,count(*) from emp where (age<45) group by worksddress having count(*)>=4;
排序查询(order by)
语法:select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
排序方式: asc:升序(默认) desc:降序
select * from emp order by age asc;
select * from emp order by entrydate desc;
select * from emp order by age asc,entrydate desc;
分页查询(limit)
语法:select 字段列表 from 表名 limit 起始索引,查询记录数;
起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数
分页查询是数据库的方言,不同数据库有不同的实现,MySQL中是limit
如果查询的是第一页数据,起始索引可以省略,直接简写为limit 查询记录数
select * from emp limit 0,10;#查询第一页员工信息,每页展示10条记录
select * from emp limit 10,10;#查询第二页员工信息,每页展示10条记录
练习:
执行顺序:
from
表名列表
where
条件列表
group by
分组字段列表
having
分组条件列表
select
字段列表
order by
排序字段列表
limit
分页参数
DCL(数据控制语句)
管理用户
功能 | 语法格式 |
---|---|
查询用户 | use mysql; select * from user; |
创建用户 | create user ‘用户名’@‘主机名’ identified by ‘密码’; |
修改用户密码 | alter user ‘用户名’@‘主机名’ identified with mysql_native_password by ‘密码’; |
删除用户 | drop user ‘用户名’@‘主机名’; |
#创建用户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';
权限控制
功能 | 语法格式 |
---|---|
查询权限 | show grants for ‘用户名’@‘主机名’; |
授予权限 | grant 权限列表 on 数据库名.表名 to ‘用户名’@‘主机名’; |
撤销权限 | revoke 权限列表 on 数据库名.表名 from ‘用户名’@‘主机名’ |
权限 | 说明 |
---|---|
all,all privileges | 所有权限 |
select | 查询数据 |
insert | 插入数据 |
update | 修改数据 |
delete | 删除数据 |
alter | 修改表 |
drop | 删除数据库/表/视图 |
create | 创建数据库/表 |
show grants for 'heima'@'%';
grant all on test.* to 'heima'@'%';
#windows搜索cmd 输入MySQL -u heima -p回车再输入密码1234回车用户连接成功可以查询相关权限
revoke all on test.* from 'heima'@'%';