目录
前言:
在湖师大学习结束了,现在就来补上SQL语言的剩下三个DML、DCL、DQL。话不多说,即刻发车~
传送门:SQL语言的介绍及DDL
一、DML数据操作语言
DML: Data Manipulation Language(数据操作语言)
作用:用来对数据库中表的数据记录进 行增、删、改操作
1.增 --- 添加数据
a.通用
写法:
insert into 表名 (字段名1, 字段名2, ...) values (值1, 值2, ...);
相当于在字段名1处添加对应的值1
例如:
这是没有添加数据的样子:
# 给对应字段添加数据
insert into student (name, age, gender) values ('luoyi', 18, '男');
PS:用 select * from student; 来查询字段值
如果字段太多,而且是想全部字段都加上数据,那么就可以用另一个方法
insert into 表名 values (值1,值2……);
-- 直接全部添加
insert into student values ('JingLei', 18, '男');
b.批量添加
1️⃣insert into 表名 (字段名1, 字段名2……), (字段名1, 字段名2……) values (值1, 值2…), (值1, 值2…) ;
2️⃣insert into 表名 values (值1, 值2…), (值1, 值2…),(值1, 值2…);
-- 批量添加
insert into student values('LuoCong', 15, '男'), ('WangSiYa', '16', '女');
注意:
1.插入元素时,要注意与字段 一 一 对应
2.如果要插入字符串或日期,要注意是在引号内
3.插入的数据,要在字段的规定范围内
2.改 --- 修改数据
语法:
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [ where 条件 ] ;
后面where的意思是,筛选满足where后面的条件,符合的修改,不符合的保持不变
例如:
-- 将性别为女的同学的年龄
-- 修改成10岁
update student set age = 10 where gender = '女';
原来的:
运行后:
注:条件可以有也可以没有,如果没有的话,则是更新(修改)整张表的数据
3.删 --- 删除数据
语法:
delete from 表名 [ where 条件 ] ;
a.删除性别为男的同学
delete from student where gender = '男';
b.删除所有学生
不使用where则是默认删除所有学生
delete from student ;
注:
1.delete 只能删除一行,如果要删除单独某个值,则需要使用update将某个值更新为null
2.delete如果没有where则会删除整张表的数据
二、 DQL数据查询语言
DQL英文全称是Data Query Language(数据查询语言),数据查询语言
用来查询数据库中表的记录
在一个正常业务系统中,查询操作的频次是要远高于增删改的,当我们去访问企业官网、电商网站, 在这些网站中我们所看到的数据,实际都是需要从数据库中查询并展示的。而且在查询的过程中,可能还会涉及到条件、排序、分页等操作
这里就相当于是一个查询操作
查询的关键字:select
一共分为六种查询
1.基本查询(不带任何条件)
2.条件查询(where)
3.聚合函数(count、max、min、avg、sum)
4.分组查询(group by)
5.排序查询(order by)
6.分页查询(limit)
1.基础查询
a.查寻多个字段
select 字段1,字段2,字段3…… from 表名 ;
查询所有字段
select * from 表名 ;
注: * 号代表查询所有字段,在实际开发中尽量少用(不直观、影响效率)
b.设置别名 (as)
select 字段1 [ as 别名1 ] , 字段2 [ as 别名2 ] ... from 表名;
也可不加AS
select 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... from 表名;
c.去除重复数据(distinct)
select distinct 字段列表 from 表名;
2.条件查询
语法:
select 字段列表 from 表名 where 条件 ;
条件:
常用比较运算符
比较运算符 | 功能 |
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
between ... and ... | 在某个范围内(包含最大、最小值) |
in( …… ) | 满足in里面的其中一个值即可 |
link 占位符 | 模糊匹配(_匹配单个字符, %匹配任意个字符) |
is null | 是null |
常用的逻辑运算
逻辑运算符 | 功能 |
and 和 && | 逻辑与(两个条件都要满足)并且 |
or 和 || | 逻辑或(满足一个条件即可)或者 |
not 和 ! | 逻辑非(不是) |
根据情况,在where后面加上对应的条件即可
3.聚合函数
聚合函数:指只对某一列数据进行计算
比如在学生成绩表中,仅针对 “数学成绩” 这一列,计算其平均分、总分
函数 | 功能 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
语法:
select 聚合函数(字段列表) from 表名;
注:NULL不参与聚合运算
例如要求平均表中的年龄
select avg(age) from employee;
4.分组查询
语法:
select 字段列表 from 表名 [ where 条件 ] group by 分组字段名 [ having 分组 后过滤条件 ];
(1) 执行时机不同:
where是分组之前进行过滤,不满足where条件,不参与分组;
而having是分组之后对结果进行过滤(2)判断条件不同:
where不能对聚合函数进行判断,而having可以
字段列表中也可以加上聚合函数来进一步查询,用 、号 隔开
图中的意思就是:
在employee表中按gender进行分组,并算出分别的人数有几个
在select中要加上gender,这样才会显示gender这一列,看看没有加gender的
5.排序查询
排序查询在日常生活中还是挺常见的
语法:
select 字段列表 from 表名 order by 字段1 排序方式1 , 字段2 排序方式2 ;
排序方式:
(1)ASC : 升序(默认值) (Ascending)
(2)DESC: 降序 (Descending)
注意
当有多个字段时,先按第一个字段排,第一个字段值一样时,再按第二个字段排
也就是排完第一个字段,再按第二个字段排
6.分页查询
如图,就是分页查询的应用
语法
select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
注意:
(1) 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数
(2)分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT
(3)如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10
例如:
查询第1页员工数据, 每页展示10条记录
select * from employee limit 0,10;
也可将0省略
select * from employee limit 10;
查询第2页员工数据, 每页展示10条记录 --------> (页码-1) * 页展示记录数
( 2 - 1 ) * 10 = 10
select * from employee limit 10,10 ;
三、DCL数据控制语言
DCL英文全称是Data Control Language(数据控制语言)
用来管理数据库用户、控制数据库的访问权限。
1.管理用户
(1)查询用户
语法:
select * from mysql.user ;
其中 Host代表当前用户访问的主机,
如果为localhost, 仅代表只能够在当前本机访问,是不可以远程访问的。
User代表的是访问该数据库的用户名。
在MySQL中需要通过Host和User来唯一标识一个用户。
(2)创建用户
create user '用户名'@'主机名' identified by '密码';
(3)修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码' ;
(4)删除用户
drop user '用户名'@'主机名' ;
注意:
a. 在MySQL中需要通过 用户名@主机名 的方式,来唯一标识一个用户
b. 主机名可以使用 % 通配
c. 这类SQL开发人员操作的比较少,主要是DBA( Database Administrator 数据库 管理员)使用
2.控制权限
常用的权限
权限 | 说明 |
all , all privileges | 所有权限 |
select | 查询数据 |
insert | 插入数据 |
update | 修改(更新)数据 |
delete | 删除数据 |
alter | 修改表 |
drop | 删除数据库 / 表 / 视图 |
create | 创建表 / 数据库 |
查询用户的权限
show grants for '用户名'@'主机名' ;
授予所有权限
creat 权限列表 on 数据库名.表名 to '用户名'@'主机名';
撤销所有权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';