SQL分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用于定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用于对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用于查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用于创建数据库用户、控制数据库的访问权限 |
- DDL-数据库操作
/*查询*/
SHOW DATABASES; #查询所有数据库
SELECT DATABASE(); #查询当前数据库,可查询当前正在使用的数据库
/*创建*/
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则]; #创建一个数据库,中括号内为可选内容(第一处为判断该表是否存在,第二处为设定默认字符集,第三处见文章末尾)
/*删除*/
DROP DATABASE [IF EXISTS] 数据库名; #删除指定数据库
/*使用*/
USE 数据库名; #使用指定数据库
- DDL-表操作
/*查询*/
SHOW TABLES; #查询当前数据库所有表
DESC 表名; #查询表结构
SHOW CREATE TABLE 表名; #查询指定表的建表语句
/*创建*/
CREATE TABLE 表名( #创建一个数据表,结构由括号中的语句确定
字段1 类型[COMMENT 注释],
字段2 类型[COMMENT 注释],
...
字段n 类型[COMMENT 注释]
)[COMMENT 表注释];
/*修改*/
ALTER TABLE 表名 ADD 字段名 类型(长度)[COMMENT 注释] [约束]; #添加字段
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); #修改字段的数据类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; #修改字段名和字段类型
ALTER TABLE 表名 DROP 字段名; #删除指定字段
ALTER TABLE 表名 RENAME TO 新表名; #修改数据表名
/*删除*/
DROP TABLE [IF EXISTS] 表名; #删除数据表
TRUNCATE TABLE 表名; #删除指定数据表,并重新创建该数据表
- DML
/*添加数据
注意:
插入数据时,值需要与字段一一对应
字符串和日期型数据应该包含在引号中
插入的数据大小需要在字段规定的范围内
*/
INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...); #给指定字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...); #给全部字段添加数据
INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...); #批量给指定字段添加数据
INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...); #批量给全部字段添加数据
/*修改数据
注意:
若没有指定条件语句,则会修改整张表的所有数据
*/
UPDATE 表名 SET 字段名1 = 值1,字段名2 = 值2,...[WHERE 条件];
/*删除数据
注意:
若未指定条件语句,则会删除整张表的所有数据
DELETE语句不能用于删除某一字段的值(这需要用到UPDATE)
*/
DELETE FROM 表名 [WHERE 条件]
- DQL-语法
/*编写顺序*/ /*执行顺序*/
SELECT #基本查询 FROM
字段列表 表名列表
FROM #条件查询 WHERE
表名列表 条件列表
WHERE #聚合函数 GROUP BY
条件列表 分组字段列表
GROUP BY #分组查询 HAVING
分组字段列表 分组后条件列表
HAVING # SELECT
分组后条件列表 字段列表
ORDER BY #排序查询 ORDER BY
排序字段列表 排序字段列表
LIMIT #分页查询 LIMIT
分页参数 分页参数
- DQL-基本查询
SELECT *|字段1,字段2,字段3... FROM 表名; #查询多个字段。“|”意为“或”,即要蛮只出现“|”前面的内容,要蛮只出现“|”后面的内容,不会同时出现。“*”表示所有字段
SELECT 字段1 [AS 别名1],字段2 [AS 别名2]... FROM 表名; #设置别名,也可不写“AS”
SELECT DISTINCT 字段列表 FROM 表名; #去除重复记录
- DQL-条件查询
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件列表
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<>或 != | 不等于 |
BETWEEN…AND… | 在某个范围之内(含最小、最大值) |
IN(…) | 在括号中的列表中的值中选择一个 |
LIKE 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
IS NULL | 是NULL |
逻辑运算符 | 功能 |
---|---|
AND 或 && | 且 |
OR 或 || | 或 |
NOT 或 ! | 非 |
- DQL-聚合函数
/*
功能:对指定字段进行纵向计算
注意:null值不参与聚合运算
*/
SELECT 聚合函数(字段列表) FROM 表名;
常见聚合函数
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
- DQL-分组查询
/*
功能:根据指定字段中的值进行分组
注意:
执行顺序where>聚合函数>having
分组之后,查询的字段一般为聚合函数字段和分组字段,不然此操作无意义
where与having的区别:
执行时机不同:where是分组之前进行过滤,不满足where条件的数据不参与分组;having是对分组后的数据进行筛选
判断条件不同:where不能对聚合函数进行判断(因为where会比聚合函数先执行),having可以(having在聚合函数后执行)
*/
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
- DQL-排序查询
/*
排序方式:
ASC:升序(默认值)
DESC:降序
注意:若为多字段排序,只有前一个字段相同时才会根据后面的字段排序
*/
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式;
- DQL-分页查询
/*
注意:
起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
分页查询在不同的数据库中有不同的实现,LIMIT只是MySQL中的实现方式
若省略起始索引,则表示查询第一页数据,如:limit 10
*/
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;
- DCL-管理用户
/*查询用户*/
USE mysql;
SELECT * FROM user;
/*创建用户
注意:主机名可用通配符,下同
*/
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
/*修改用户密码*/
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
/*删除用户*/
DROP USER '用户名'@'主机名';
- DCL-权限控制
/*查询权限*/
SHOW GRANTS FOR '用户名'@'主机名';
/*授予权限
注意:
授权时,数据库名和表名可以使用*进行通配
多个权限之间,使用逗号分隔,下同
*/
GRANTS 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
/*撤销权限*/
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
权限列表
权限 | 说明 |
---|---|
ALL,ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/试图 |
CREATE | 创建数据库/表 |
文章末尾:
第三处用于规定数据库的排序规则。COLLATE如何规定,会直接影响到varchar、char类型的列的排序规则,表现形式为影响ORDER BY语句的顺序,影响WHERE条件中大于小于号筛选出来的结果,影响DSITINCT、GROUP BY、HAVING语句的查询结果。