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 '用户名'@'主机名';
### SQL 分类及其详细说明 SQL(Structured Query Language)是用于管理和操作关系型数据库的标准语言。根据功能和用途的不同,SQL 被分为以下四类:数据定义语言(DDL)、数据操纵语言(DML)、数据查询语言(DQL)和数据控制语言(DCL)。以下是每种分类的详细解释: #### 1. 数据定义语言(DDL) DDL 是用于定义和修改数据库结构的语言。它主要涉及数据库对象(如表、索引、视图等)的创建、修改和删除。常见的 DDL 命令包括: - **CREATE**:用于创建数据库对象,例如数据库、表、索引等。 ```sql CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(100), salary DECIMAL(10, 2) ); ``` - **ALTER**:用于修改已存在的数据库对象的结构。 ```sql ALTER TABLE employees ADD COLUMN department_id INT; ``` - **DROP**:用于删除数据库对象。 ```sql DROP TABLE employees; ``` - **TRUNCATE**:用于快速清空表中的所有数据,但保留表结构[^4]。 #### 2. 数据操纵语言(DML) DML 是用于对数据库中的数据进行增删改操作的语言。它主要用于操作表中的数据记录。常见的 DML 命令包括: - **INSERT**:用于向表中插入新记录。 ```sql INSERT INTO employees (id, name, salary) VALUES (1, 'John Doe', 5000); ``` - **UPDATE**:用于更新表中已有的记录。 ```sql UPDATE employees SET salary = 6000 WHERE id = 1; ``` - **DELETE**:用于从表中删除指定的记录。 ```sql DELETE FROM employees WHERE id = 1; ``` 事务控制语句(如 COMMIT、ROLLBACK 和 SAVEPOINT)通常与 DML 配合使用,以确保数据操作的安全性和一致性。 #### 3. 数据查询语言(DQL) DQL 是用于从数据库中检索数据的语言。它的核心命令是 SELECT,用于查询表中的数据。例如: ```sql SELECT id, name, salary FROM employees WHERE salary > 5000; ``` 通过 SELECT 语句,可以实现复杂的查询操作,包括连接多个表、使用聚合函数、排序和分组等[^3]。 #### 4. 数据控制语言(DCL) DCL 是用于管理数据库权限和安全性的语言。它主要包括以下命令: - **GRANT**:用于授予用户或角色特定的权限。 ```sql GRANT SELECT, INSERT ON employees TO user1; ``` - **REVOKE**:用于撤销已授予的权限。 ```sql REVOKE INSERT ON employees FROM user1; ``` 此外,DCL 还可以用于事务的管理,确保数据库的一致性和完整性[^2]。 ### 总结 SQL分类数据库的操作提供了清晰的功能划分。通过 DDL 管理数据库结构,DML 操纵数据内容,DQL 查询数据信息,以及 DCL 控制权限和事务,这些语言共同构成了 SQL 的强大功能体系[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值