SQL:DQL,DCL

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可以

执行顺序: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'@'%';

猜你喜欢

转载自blog.csdn.net/weixin_46136019/article/details/127775146