SQL分类
- DDL:数据定义语言,用来定义数据库对象(数据库、表、字段)
- DML:数据操作语言,用来对数据表中的数据增删改的
- DQL:数据查询语言,用来查询表中记录
- DCL:数据控制语言,用来创建数据库用户、控制数据库访问权限
1. DDL
DDL——数据定义语言
数据库:
- 创建数据库
create database [if not exists] 数据库名 [default cherset 字符集] [collate 排序规则];
字符集说明:mysql中不建议使用utf8字符集,utf8字符集默认占3个字节,而有些特殊字符占四个字节,故建议使用呢utf8mb4字符集
drop database [if existss] 数据库名; #删除数据
select database(); #查询当前数据库
数据表:
- 表相关
desc 表名; #查看表结构
show create table 表名; #查询指定表的建表语句
- 创建
create table 表名(
字段 字段类型 [commit 字段注释]
)[commit 表注释];
一般建表会在后面加ENGINE=InnoDB default charset=utf8mb4;
- 数据表的修改/删除操作
alter table 表名 add 字段名 类型(长度) [commit 注释] [约束]; #增加字段
alter table 表名 modify 字段名 新数据类型(长度); # 修改数据类型
alter table 表名 change 旧字段名 新字段名 类型(长度)[commit 注释] [约束]; #修改字段名和类型
alter table 表名 drop 字段名; #删除字段
alter table 表名 rename to 新表名; #修改表名
drop table [if not exists] 表名; # 删除表
truncate table 表名; # 删除指定表,并重新创建该表
2. DML
DML——数据操作语言
- 增
insert into 表名(字段名1,字段名2...) values(值1,值2...); # 1.给指定字段添加数据
insert into 表名 values(值1,值2...); # 2.给全部字段添加数据
insert into 表名 values(值1,值2...),(值1,值2...)...; # 3.批量添加数据
- 改
update 表名 set 字段名1=值1,字段名2=值2...[where 条件];
- 删
delete from 表名 [where 条件];
3. DQL
DQL——数据查询语言
语句描述:
select 字段列表 from 表名列表
where 条件列表
group by 分组字段列表
having 分组后条件列表
order by 排序字段列表(asc 默认升序, desc 降序)
limit 分页参数(起始索引, 查询记录数)
执行顺序:
from --> where --> group by --> having–> select --> order by --> limit、
- 条件查询
比较运算符 | 功能 |
---|---|
<>或!= | 不等于 |
between…and… | 在某个范围之间[min,max] |
in(…) | 在in之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(_匹配任意单个字符,%匹配任意个字符) |
is null | 是NULL |
and or/&& || | 与、或 |
NOT 或 ! | 非,不是 |
- 聚合函数/分组查询
函数 | 功能 |
---|---|
count | 统计数量 |
max,min | 最大、最小值 |
avg | 平均数 |
sum | 求和 |
select 聚合函数(字段列表) from 表名;
- 分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
where和having的区别?
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;having分组之后对结果进行过滤;
- where不能对聚合函数进行判断,having可以;
举例:查询年龄小于40的员工,并根据工作地址分组,获取员工数量大于等于10的工作地址和数量?
select address, count(*) from emp where age<40
group by address having count(*) >= 10;
- 排序查询
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
4. DCL
DCL——数据控制语言
- 用户&权限管理
# 查询用户
use mysql;
select * from user;
# 创建用户
create user '用户名'@'主机名' identified by '密码';
# 修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
# 删除用户
drop user '用户名'@'主机名';
# 查询权限
show grants for '用户名'@'主机名';
# 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
# 撤消权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
多个权限使用,分割,*可以表示所有数据库和所有表