SQL分类

本文详细介绍了SQL中的四个主要部分:DDL用于数据库对象定义,DML处理数据增删改,DQL用于数据查询,DCL则涉及用户管理和权限控制。涵盖了创建、修改、查询和权限分配的关键SQL语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DDL(数据定义语言)

DDL,全称为 Data Definition Language,用来定义数据库对象(数据库,表,字段)。

数据库操作

  1. 查询所有数据库
SHOW DATABASE;
  1. 查询当前数据库
SELECT DATABASE();
  1. 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
  1. 删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
  1. 使用某个数据库
USE 数据库名;

表操作

  1. 查询当前数据库所有表
SHOW TABLES;
  1. 查询表结构
DESC 表名;
  1. 查询指定表的建表语句
SHOW CREATE TABLE 表名;
  1. 创建表

  1. 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
  1. 删除表
DROP TABLE [IF EXISTS] 表名;
  1. 删除表,并重新创建该表
TRUNCATE TABLE 表名;

字段操作

  1. 添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
  1. 在指定字段后添加新字段
alter table 表名 add 新字段名 类型(长度) [是否为空] [COMMENT 注释] after 指定字段;
  1. 修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
  1. 修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
  1. 修改字段默认值
alter table 表名 modify column 字段名 类型(长度) default 默认值 [COMMENT 注释];
  1. 删除字段
ALTER TABLE 表名 DROP 字段名;

DML(数据操作语言)

DML,全称为 Data Manipulation Language,用来对数据库表中的数据进行增删改

插入数据

  1. 插入数据时,指定字段顺序需要和值顺序一致
  2. 字符串和日期型数据需要用引号(“” 或 ‘’)包括
  3. 插入的数据大小应满足字段定义的大小要求
  1. 给指定字段插入数据
INSERT INTO 表名(字段名1,字段名2,字段名3,......) VALUES(1,2,3,......);
  1. 给全部字段插入数据
INSERT INTO 表名 VALUES(1,2,3,......);
  1. 批量插入数据
INSERT INTO 表名(字段名1,字段名2,字段名3,......) VALUES(1,2,3,......),(1,2,3,......),(1,2,3,......),······;
INSERT INTO 表名 VALUES(1,2,3,......),(1,2,3,......),(1,2,3,......),······;
  1. 插入数据(存在则修改记录值,不存在则插入)
REPLACE INTO 表名(字段名1,字段名2,字段名3,......) VALUES(1,2,3,......);
  1. 插入符合条件的数据
INSERT INTO 表名(字段名1,字段名2,字段名3,......)
SELECT 所有要插入的字段名
FROM 所查的表
WHERE 筛选条件

修改数据

  1. 修改所有数据
UPDATE 表名
SET 字段名1=1,字段名2=2,......; 
  1. 修改指定数据
UPDATE 表名
SET 字段名1=1,字段名2=2,......; 
WHERE 筛选条件;

删除数据

  1. 删除整张表
DELETE
FROM 表名;
  1. 删除表中指定数据
DELETE
FROM 表名
WHERE 筛选条件;

DQL(数据查询语言)

DQL,全称为 Data Query Language,用来查询数据库表中的记录

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 筛选条件
GROUP BY 分组依据
HAVING 分组后的筛选条件
ORDER BY 排序字段名
LIMIT 分页数据

基本查询

  1. 查询多个字段
SELECT 字段1,字段2,字段3,......
FROM 表名;
  1. 查询所有字段
SELECT *
FROM 表名;
  1. 设置字段别名
SELECT 字段1 AS 别名1,字段2 AS 别名2,字段3 AS 别名3,......
FROM 表名;
  1. 去除重复记录
SELECT DISTINCT 字段列表
FROM 表名;

条件查询

  1. 大于(>)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 > 具体值;
  1. 小于(<)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 < 具体值;
  1. 等于(=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 = 具体值;
  1. 大于等于(>=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 >= 具体值;
  1. 小于等于(<=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 <= 具体值;
  1. 不等于(<> 或 !=)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 != 具体值;
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 <> 具体值;
  1. 逻辑与(AND 或 &&)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) AND (筛选条件2) AND (筛选条件3) ······;
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) && (筛选条件2) && (筛选条件3) ······;
  1. 逻辑或(OR 或 ||)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) OR (筛选条件2) OR (筛选条件3) ······;
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (筛选条件1) || (筛选条件2) || (筛选条件3) ······;
  1. 逻辑非(NOT 或 !)

  1. 在某个范围之内

(BETWEEN ··· AND ··· )来实现

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 BETWEEN 初始值 AND 终止值;

联结条件来实现

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (字段名 >= 起始值) AND (字段名 <= 终止值)
  1. 在某个范围之外

(NOT BETWEEN ··· AND ··· )来实现

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT BETWEEN 初始值 AND 终止值;

联结条件来实现

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE (字段名 < 起始值) OR (字段名 > 终止值)
  1. 在多个值之中(IN)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IN (具体值1,具体值2,具体值3,······);
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IN (
	SELECT 字段名
	FROM 表名
	WHERE 筛选条件
);
  1. 不在多个值之中(NOT IN)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT IN (具体值1,具体值2,具体值3,······);
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT IN (
	SELECT 字段名
	FROM 表名
	WHERE 筛选条件
);
  1. 相似(LIKE)

开头内容相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "具体值%";

中间内容相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "%具体值%";

结尾内容相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "%具体值";

第二位内容相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "_具体值%";

第三位内容相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 LIKE "__具体值%";

倒数第二位内容相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值_";

倒数第三位内容相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值__";
  1. 不相似(NOT LIKE)

开头内容不相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "具体值%";

中间内容不相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值%";

结尾内容不相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值";

第二位内容不相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "_具体值%";

第三位内容不相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "__具体值%";

倒数第二位内容不相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值_";

倒数第三位内容不相似

SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 NOT LIKE "%具体值__";
  1. 为空(IS NULL)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IS NULL;
  1. 不为空(IS NOT NULL)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 IS NOT NULL;
  1. 正则表达式(REGEXP)
SELECT 所查询的所有字段名
FROM 所查询的所有表
WHERE 字段名 REGEXP 正则表达式;

聚合查询

  1. 计算行数
SELECT COUNT(*)
FROM 表名;
  1. 计算某字段不重复的行数
SELECT COUNT(DISTINCT 字段名)
FROM 表名
[WHERE 筛选条件];
  1. 计算某字段最大值
SELECT MAX(字段名)
FROM 表名
[WHERE 筛选条件];
  1. 计算某字段最小值
SELECT MIN(字段名)
FROM 表名
[WHERE 筛选条件];
  1. 计算某字段平均数
SELECT AVG(字段名)
FROM 表名
[WHERE 筛选条件];

分组查询

  1. GROUP可以单独使用,但HAVING必须和GROUP BY 一起使用
  2. 使用GROUP BY 时,SELECT后必须有分组依据
  3. 使用GROUP BY时,SELECT后不能跟单独字段值,否则将违反约束,可以跟分组依据和聚合函数
  1. 计算某字段的每组最大值
SELECT 分组依据,MAX(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
  1. 计算某字段的每组最小值
SELECT 分组依据,MIN(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
  1. 计算某字段的每组平均值
SELECT 分组依据,AVG(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
  1. 计算某字段的每组行数
SELECT 分组依据,COUNT(字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;
  1. 计算某字段的每组无重复值行数
SELECT 分组依据,COUNT(DISTINCT 字段名) [AS 别名]
FROM 表名
[WHERE 筛选条件]
GROUP BY 分组依据;

排序查询

  1. 单字段排升序排序
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段 ;
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段 ASC;
  1. 单字段排降序排序
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段 DESC;
  1. 多字段排序(按照顺序依次进行排序)
SELECT 所查询的所有字段名
FROM 所查询的所有表
[WHERE 筛选条件]
ORDER BY 排序字段1 DESC,排序字段2,排序字段3,······;

分页查询

  1. 起始索引从0开始,起始索引=(查询页码 -1)* 每页显示记录数
  2. 分页查询关键字在不同数据库是不同的,在MySQL中是LIMIT
  3. 如果查询的是第一页数据,起始索引可以省略不写,直接简写为LIMIT 查询记录数
  1. 分页查询
SELECT 字段列表
FROM 表名
LIMIT 起始索引,查询记录数;

DCL(数据控制语言)

DCL,全称为 Data Control Language,用来创建数据库用户、控制数据库的访问权限

管理用户

  1. 查询用户
USE 数据库名;
SELECT *
FROM user;
  1. 创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  1. 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
  1. 删除用户
DROP USER '用户名'@'主机名';

权限控制

MySQL存在多种权限,常用的有以下几种权限:

权限意义
ALL,ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表
  1. 查询权限
SHOW GRANTS FOR '用户名'@'主机名';
  1. 授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  1. 撤销权限
REVOKE 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值