SQL浅谈
一、SQL简介
1.What’s this?
SQL(Structured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server 等。
2.Classification
- DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:库、表、列等;
- DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);
- DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
- DQL(Data Query Language):数据查询语言,用来查询记录(数据);
3.Warning!!!
- SQL 语句可以单行或多行书写,以分号结尾;
- 可以用空格和缩进来来增强语句的可读性;
- 关键字不区别大小写,建议使用大写;
二、DDL
1.数据库操作
- 查询:
查询所有数据库:show databases;
查询当前数据库:select database();
- 创建:
create database if not exists xxx;
Attention:if not exists可以省略,其用于当所创建的数据库已存在时可减少报错。 - 删除:
drop database if exists xxx;
Attention:if exists作用同上。 - 使用:
use xxx;
2.表操作
- 查询:
查询当下数据库的所有表:show tables;
查询指定表结构:desc xxx;
查询指定表的建表语句:show create table xxx;
- 创建:
`create table xxx(
字段1 字段1类型 [Comment 字段1注释],
……
字段n 字段n类型 [Comment 字段n注释]
) [Comment 表注释];
Attention:[……]为可选参数,且最后一个字段不跟逗号. - 修改:
添加字段:alter table xxx add 字段名 字段类型(长度)[comment 注释] [约束];
修改数据类型:alter table xxx modify 字段名 新字段类型(长度);
修改字段名和字段类型:alter table xxx change 旧字段名 新字段名 新字段类型(长度)[comment 注释];
删除字段:alter table xxx drop 字段名;
修改表名:alter table xxx rename to 新表名;
删除指定表:drop table if exists xxx;
删除指定表并重新创建该表:truncate table xxx;
Attention:最后一条表明删除该表的数据而不改变该表的结构.
三、DML
1.添加数据
- 给指定字段添加数据:
insert into xxx (字段1,……,字段n) values (值1,……,值n);
- 给全部字段添加数据:
insert into xxx values (值1,……值n);
- 指定字段批量添加数据:
insert into xxx (字段1,……字段n) values (值1,……,值n),……,(值1,……,值n);
- 全部字段批量添加数据:
insert into xxx values (值1,……,值n),……,(值1,……,值n);
Attention:
①插入字段的名称与其数据的顺序需要对应;
②字符串和日期型数据需要写在引号中;
2.修改数据
update xxx set 字段名1=值1,……,字段名n=值n [where 条件];
Attention:条件语句为可选项,如不加条件语句则会更新表中所有数据的相应字段;
3.删除数据
delete from xxx [where 条件];
Attention:
①这里的条件语句也为可选项,若不选则会删除整张表的所有数据;
②不能单纯删改某个数据的某个字段(可以使用update实现);
四、DQL
1.基本查询
select 字段1,……,字段n from xxx;
Attention:
①`select from xxx;可查询表中***所有字段***的数据;* *②
select 字段1 [as] ‘别名1’,……,字段n [as] ‘别名n’ from xxx;可以为查询的字段设置别名,阅读起来更加直观;* *③
select distinct 字段1,……,字段n from xxx;`可以去除重复记录;*
2.条件查询
select 字段列表 from xxx where 条件列表;
3.聚合函数
select 聚合函数(字段列表)from xxx;
Attention:
①常见聚合函数共有五类:count(求数量),max(求最大值),min(求最小值),avg(求平均值),sum(求和);
②Null值不参与聚合函数的计算
4.分组查询
select 字段列表 from xxx [where 条件] group by 分组字段名 [having 条件];
Attention:
①where是分组之前进行过滤,having是分组之后进行过滤
②where不能对聚合函数进行判断,而having可以
③分组后,查询的字段为聚合函数或分组字段,查询其他字段没有意义
5.排序查询
select 字段列表 from xxx order by 字段1 排序方式1,……,字段n 排序方式n;
Attention:
①排序方式有两种:ASC->升序(默认值),DESC->降序;
②排序方式的优先级从1到n
6.分页查询
select 字段列表 from xxx limit 起始索引,查询记录数;
Attention:
①起始索引从0开始,其表达式为:(查询页码-1)✖每页记录数;
②若查询的是第一页数据,起始索引可以省略;
7.执行顺序
from -> where -> group by [having]-> select -> order by -> limit
Attention:编写顺序为:
select -> from -> where -> group by[having] -> order by -> limit
五、DCL
1.用户管理
- 查询用户:
select * from user;
- 创建用户:
create user '用户名'@'主机名' identified by 'password';
Attention:主机地址为localhost时,用户权限很低,许多数据库访问不了;为%时,表明可以访问所有数据库.
- 修改用户密码:
alter user '用户名'@'主机名' identified with mysql_native_password by 'new_password';
- 删除用户:
drop user '用户名'@'主机名';
2.权限管理
- 查询权限:
show grants for '用户名'@'主机名';
- 授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
- 撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';