最近学习了关系型数据库方面的知识,随手整理了一些常用的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 '用户名'@'主机名';
注意:
语法语句中的标点符号均为英文下的标点符号!!!