MYSQL数据库(二)
SQL分类:
分类 | 全称 | 解释 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户,控制数据库的访问权限 |
DDL,DML以及其他的SQL用法在前一篇文章里:
https://blog.csdn.net/Barbara1314/article/details/145105295?spm=1001.2014.3001.5501
DQL
条件查询
- 语法:
select 字段列表 from 表名 where 条件列表;
2.条件:
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN … AND … | 在某个范围之内(含最小、最大值) |
IN (…) | 在指定列表中的值,多选 |
LIKE | 模糊匹配(_ 匹配单个字符,% 匹配任意字符) |
IS NULL | 是 NULL |
逻辑运算符 | 功能 |
---|---|
AND 或 && | 且(多个条件同时成立) |
OR 或 || | 或(多个条件任意一个成立) |
NOT 或 ! | 非,取反 |
-- 条件查询
-- 1.查询年龄等于33的员工
select * from emp where age = 33;
-- 2.查询年龄小于30员工信息
select * from emp where age < 30;
-- 3.查询年龄小于等于25的员工
select * from emp where age <= 25;
-- 4.查询没有身份证的员工
select * from emp where idcard is null;
-- 5.查询有身份证的员工信息
select * from emp where idcard is not null;
-- 6.查询年龄不等于35的员工信息
select * from emp where age != 35;
select * from emp where age <> 35;
-- 7.查询年龄在20岁(包含)到25岁(包含)之间的员工信息
select * from emp where age between 20 and 25;
select * from emp where age>=20 && age <= 25;
select * from emp where age>=20 and age <= 25;
-- 8.查询性别为女且年龄小于30的员工
select * from emp where gender ='女' and age < 30;
-- 9.查询年龄等于30或33或35的员工信息
select * from emp where age in (30,35,33);
select * from emp where age = 30 or age = 35 or age = 33;
-- 10.查询姓名为两个字的员工
select * from emp where name like '__';
-- 11.查询身份证号最后为4的员工信息
select * from emp where idcard like '%4';
分组查询
聚合函数
介绍:将一列数据作为一个整体,进行纵向计算
聚合函数:
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
语法:
select 聚合函数(字段列表)from 表名;
-- 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 workaddress as '工作地址',sum(age) from emp where workaddress = '北京';
分组查询
1.语法
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
2.where 和 having的区别:
执行时机不同 :where是分组之前进行过滤,不参与分组;而having是分组之后对结果进行过滤
判断条件不同:where不能对集合函数进行判断,而having可以
注意:
执行顺序:where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段意义
-- 分组查询
-- 1.根据性别分组,统计男性员工和女性员工的数量
select gender,count(gender) from emp GROUP BY gender;
-- 2.根据性别分组,统计男性员工和女性员工的平均年龄
select gender,avg(age) from emp group by gender;
-- 3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于5的工作地址
select workaddress as '工作地址' ,count(workaddress) as address_count from emp where age < 45 group by workaddress having address_count >= 5;
排序查询
- 语法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
- 排序方式
- ASC :升序(默认)
- DESC :降序
注意:如果多字段进行排序时,当第一个字段相同时,才会进行第二个字段的排序。
-- 排序查询
-- 1.根据年龄对公司的员工进行升序排序
select * from emp order by age asc;
-- 2.根据入职时间,对员工进行降序排序
select * from emp order by entrydate desc;
-- 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照workno 进行降序排序
select * from emp order by age asc , workno desc;
-- 4.对性别排序时,男>女
select * from emp order by gender asc;
分页查询
- 语法:
select 字段列表 from 表名 limit 起始索引,查询记录数
注意:
- 起始索引从0开始,起始索引 = (查询页码-1)*每页显示记录数
- 分页查询时数据库的方言,不同数据库有不同的实现,MySQL 中是limit
- 如果查询第一页数据,起始索引可以省略,直接简写为limit 10
-- 分页查询
-- 1.查询第1页员工数据,每页展示10条
select * from emp limit 10;
select * from emp limit 0,10;
-- 2.查询第二页员工数据,每页展示10条
select * from emp limit 10,10;
综合案例和执行顺序
-- 1.查询年龄为22,24,35,37岁的员工信息。
select * from emp where age in (22,24,35,37);
select * from emp where age=22 or age = 24 or age = 35 or age = 37;
-- 2.查询性别为 男,并且年龄在 20-40 岁(含)以内的姓名为三个
select * from emp where gender = '男' and (age between 20 and 40) and name like '___'
-- 3.统计员工表中,年龄小于35岁的,男性员工和女性员工的人数
select gender,count(age) from emp where age < 35 group by gender;
-- 4.查询所有年龄小于等于27岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按工号降序排序。
select name,age from emp where age <= 27 order by age asc,workno desc;
-- 5.查询性别为男,且年龄在20-40 岁(含)以内的前5个员工信息对查询的结果按年龄升序排序,年龄相同按工号升序排序
select * from emp where gender = "男" and age between 20 and 40 order by age asc,workno desc limit 5;
编写顺序:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表order by 排序字段列表 limit 分页参数
执行顺序:
from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 select 字段列表 order by 排序字段列表 limit 分页参数
DCL
管理用户
- 查询用户
use mysql; select * from user;
- 创建用户
create user '用户名'@'主机名' identied by '密码';
- 修改密码
alter user '用户名'@'主机名' identified with musql_native_password by '新密码';
- 删除用户
drop user '用户名'@'主机名';
注意:
主机名可以使用%通配,即可以访问任意数据库
这类SQL开发人员操作较少,主要是DBA(Datebase Admimistrator 数据库管理员)使用
-- 创建新用户
-- 创建用户itcast ,只能够在当前主机localhost 访问,密码123456;
create user 'itcast'@'localhost' identified by '123456';
-- 创建用户 xiaohua ,可以在任意主机访问该数据库,密码123456;
create user 'xiaohua'@'%' identified by '123456';
-- 修改用户密码为 1234
SET PASSWORD FOR 'xiaohua'@'%' = PASSWORD('1234');
-- alter user 'xiaohua'@'%' identified with mysql_native_password by '1234';在5.5以上的版本可以使用以上的修改方式
-- 删除itcast@localhost用户
drop user 'itcast'@'localhost';
权限管理
- 查询权限
show grants for '用户名'@'主机名';
- 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
- 撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
注意:
多个权限之间,使用逗号分隔
授权时,数据库名和表名可以使用*进行统配,代表所有
-- 用户权限
-- 删除itcast@localhost用户;
drop user 'itcast'@'localhost';
-- 查询权限
show grants for 'xiaohua'@'%';
-- 授予权限(将hua数据库中的所有表的权限赋予给xiaohua)
grant all on hua.* to 'xiaohua'@'%' with grant option;
-- 撤销权限(撤销hua数据库中所有表的所有权限)
revoke all on *.* from 'xiaohua'@'%';
原文地址:https://blog.csdn.net/Barbara1314/article/details/145148826
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!