最近学习了关系型数据库方面的知识,随手整理了一些常用的SQL语句,方便大家记忆及使用。

SQL通用语法:
1.SQL语句可以单行或多行书写,以封号(;)结尾。
2.可使用空格和缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

注释:
单行注释:--(空格)注释内容
多行注释:
/*
注释内容
*/

SQL分类:
1.DDL(Data Definition Language)数据定义语言:
用来定义数据库对象:数据库、表、列等。
关键字:create、drop、alter等。
2.DML(Data Mainpulation Language)数据操作语言:
用来对数据库中表的数据进行增、删、改。
关键字:insert、delete、update等。
3.DQL(Data Query Language)数据查询语言:
用来查询数据库中表的记录(数据)。
关键字:select、where等。
4.DCL(Data Control Language)数据控制语言:
用来定义数据库的访问权限和安全级别,以及创建用户。
关键字:grant、revoke等。

DDL(操作数据库、表):

操作数据库:
1.创建(Create):
创建数据库:
create database 数据库名称;

创建数据库,先判断该数据库是否存在,不存在再创建:
create database if not exists 数据库名称;

创建数据库并指定字符集:
create database 数据库名称 character set 字符集名称;

创建数据库,先判断该数据库是否存在,不存在再创建,并指定字符集:
create database if not exists 数据库名称 character set 字符集名称;

2.查询(Retrieve):
查询所有数据库的名称:
show databases;

查询某个数据库的字符集:
show create database 数据库名称;

3.修改(Update):
修改数据库的字符集:
alter database 数据库名称 character set 字符集名称;

4.删除(Delete):
删除数据库:
drop database 数据库名称;

判断数据库是否存在,存在再删除:
drop database if exists 数据库名称;

5.使用数据库:
使用数据库:
use 数据库名称;

查询当前正在使用的数据库:
select database();

操作表:
1.创建(Create):
创建表:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);
注意:最后一行不需要加逗号(,)。

2.查询(Retrieve):
查询某个数据库中所有的表:
show tables;

查询表结构:
desc 表名;

3.修改(Update):
修改表名:
alter table 表名 rename to 新的表名;

修改表的字符集:
alter table 表名 character set 字符集名称;

添加一列:
alter table 表名 add 列名 数据类型;

修改列名称、类型:
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;

删除列:
alter table 表名 drop 列名;

复制表:
create table 表名 like 被复制的表名;

4.删除(Delete):
删除表:
drop table 表名;

删除表之前先判断该表是否存在,存在再删除:
drop table if exists 表名;

DML(增、删、改表中的数据):

1.添加数据:
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);

注意:
列名和值要一一对应;
如果表名后不定义列名,则默认给所有列添加值;
除了数字类型,其他类型需要使用引号(单双引号都可以)引用起来。

2.删除数据:
delete from 表名 [where 条件];

注意:
如果不加条件,则删除表中所有数据;
删除表建议用:truncate table 表名;(删除表,再创建一个一样的空表,效率更高)。

3.修改数据:
update 表名 set 列名1 = 值1,列名2 = 值2,...列名n = 值n [where 条件];

注意:
如果不加条件,则会将表中所有数据修改。

DQL(查询表中的记录):

1.语法:
select
  字段列表
from
  表名列表
where
  条件列表
group by
  分组字段
having
  分组之后的条件
order by
  排序
limit
  分页限定

2.基础查询:
多个字段的查询:
select 字段名1,字段名2...from 表名;

查询所有字段:
select * from 表名;

去除重复:
select distanct 字段名 from 表名;

起别名:
select 字段名 as 别名 from 表名;

3.条件查询:
select 字段列表 from 表名 where 查询条件;

常用条件:
>、<、<=、>=、=、<>(不等于)
between...and...
in
like (模糊查询)
is null
and 或 &&
or 或 ||
not 或 !

模糊查询中常用的占位符:
单个任意字符:_
多个任意字符:%

4.排序查询:
select 字段列表 from 表名 order by 子句;

排序方式:
升序:ASC(默认)
降序:DESC

注意:
如果有多个排序条件,则当根据前面的条件判断后值一样时,才会判断第二条件。

5.聚合函数(将一列数据作为一个整体,进行纵向的计算):
count:统计个数
max:计算最大值
min: 计算最小值
sum: 计算和
avg:计算平均值

语法:select 聚合函数(列名) from 表名;

注意:
聚合函数的计算,排除null值。

6.分组查询:
select 分组字段,聚合函数 from 表名 group by 分组字段;

注意:
where和having的区别:
(1)where在分组之前进行限定,如果不满足条件则不参与分组;having在分组之后进行限定,
如果不满足条件则不会被查询出来。
(2)where后面不可以跟聚合函数,having可以进行聚合函数的判断。

7.分页查询:
select 字段列表 from 表名 limit 开始的索引,每页查询的条数;

注意:
开始的索引 = (当前页码 - 1) * 每页显示的条数;
分页操作是MySQL特有的。

DCL(管理用户、授权):

管理用户:
1.添加用户:
create user '用户名'@'主机名' indentified by '密码';

2.删除用户:
drop user '用户名'@'主机名';

3.修改用户密码:
update user set password = password('新密码') where user = '用户名';

set password for '用户名'@'主机名' = password('新密码');

4.查询用户:
(1)切换到mysql数据库
use mysql;
(2)查询user表:
select * from user;

注意:
通配符%表示可以在任意主机使用用户登录数据库。

权限管理:
1.查询权限:
show grants for '用户名'@'主机名';

2.授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

3.撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';


注意:
语法语句中的标点符号均为英文下的标点符号!!!