自学内容网 自学内容网

MYSQL数据库(二)

SQL分类:

分类全称解释
DDLData Definition Language数据定义语言,用来定义数据库对象(数据库,表,字段)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录
DCLData Control Language数据控制语言,用来创建数据库用户,控制数据库的访问权限

DDL,DML以及其他的SQL用法在前一篇文章里:
https://blog.csdn.net/Barbara1314/article/details/145105295?spm=1001.2014.3001.5501

DQL

原数据

条件查询

  1. 语法:
    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;

排序查询

  1. 语法
    select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式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;

分页查询

  1. 语法:
    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

管理用户

  1. 查询用户
    use mysql; select * from user;
  2. 创建用户
    create user '用户名'@'主机名' identied by '密码';
  3. 修改密码
    alter user '用户名'@'主机名' identified with musql_native_password by '新密码';
  4. 删除用户
    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';

权限管理

  1. 查询权限
    show grants for '用户名'@'主机名';
  2. 授予权限
    grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
  3. 撤销权限
    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)!