文章目录
-
-
- [一、 数据操作语言 (DML)](#一、 数据操作语言 (DML))
-
- [1. SELECT (查询)](#1. SELECT (查询))
- [2. UPDATE (更新)](#2. UPDATE (更新))
- [3. DELETE (删除)](#3. DELETE (删除))
- [4. INSERT (插入) - (补充)](#4. INSERT (插入) - (补充))
- [二、 数据定义语言 (DDL)](#二、 数据定义语言 (DDL))
-
- [1. CREATE (创建)](#1. CREATE (创建))
- [2. ALTER (修改)](#2. ALTER (修改))
- [3. DROP (删除)](#3. DROP (删除))
- [三、 数据控制语言 (DCL)](#三、 数据控制语言 (DCL))
-
- [1. GRANT (授权)](#1. GRANT (授权))
- [2. REVOKE (撤销)](#2. REVOKE (撤销))
- [四、 其他常用的 SQL 语句 (补充)](#四、 其他常用的 SQL 语句 (补充))
-
- [1. TRUNCATE (截断)](#1. TRUNCATE (截断))
- [2. JOIN (连接查询)](#2. JOIN (连接查询))
- [3. DISTINCT (去重)](#3. DISTINCT (去重))
- [4. LIMIT / TOP (分页)](#4. LIMIT / TOP (分页))
- [5. UNION (合并结果集)](#5. UNION (合并结果集))
- [6. CASE WHEN (流程控制)](#6. CASE WHEN (流程控制))
-
假设我们有一个用户表 users,结构为 (id, name, email, age, status)。
一、 数据操作语言 (DML)
主要用于对数据库表中的数据进行增、删、改、查。
1. SELECT (查询)
这是使用频率最高的语句,用于从表中检索数据。
-
经典例子 1:条件查询与排序
查询状态为"active"且年龄大于 18 的用户,按 ID 倒序排列。sqlSELECT id, name, email FROM users WHERE status = 'active' AND age > 18 ORDER BY id DESC; -
经典例子 2:聚合与分组
统计每个状态下的用户数量,且只显示数量大于 10 的组。sqlSELECT status, COUNT(*) as user_count FROM users GROUP BY status HAVING COUNT(*) > 10;
2. UPDATE (更新)
用于修改表中现有的数据。切记配合 WHERE 使用,否则会更新全表。
-
经典例子:批量修改状态
将 ID 为 1001 的用户邮箱更新,并将状态改为 'inactive'。sqlUPDATE users SET email = 'new_email@example.com', status = 'inactive' WHERE id = 1001;
3. DELETE (删除)
用于删除表中的数据行。切记配合 WHERE 使用,否则会清空全表。
-
经典例子:删除指定数据
删除所有最后登录时间早于 2023 年 1 月 1 日的用户。sqlDELETE FROM users WHERE last_login < '2023-01-01';
4. INSERT (插入) - (补充)
虽然题目未列出,但这是 DML 中必不可少的语句。
-
经典例子:插入新记录
sqlINSERT INTO users (name, email, age) VALUES ('Zhang San', 'zhangsan@test.com', 25);
二、 数据定义语言 (DDL)
主要用于定义或修改数据库结构(表、索引、视图等)。
1. CREATE (创建)
用于创建数据库、表、索引或视图。
-
经典例子 1:创建表
创建一个带有主键和非空约束的用户表。sqlCREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -
经典例子 2:创建索引
为 email 字段创建索引以加快查询速度。sqlCREATE INDEX idx_email ON users(email);
2. ALTER (修改)
用于修改现有的数据库对象结构(如表结构)。
-
经典例子 1:添加列
在用户表中增加一个电话号码列。sqlALTER TABLE users ADD COLUMN phone_number VARCHAR(20); -
经典例子 2:修改列类型
将 age 字段的类型从 INT 改为 TINYINT。sqlALTER TABLE users MODIFY COLUMN age TINYINT;
3. DROP (删除)
用于删除数据库对象(结构连同数据一起删除,不可逆)。
-
经典例子 1:删除表
sqlDROP TABLE IF EXISTS users; -
经典例子 2:删除数据库
sqlDROP DATABASE my_database;
三、 数据控制语言 (DCL)
主要用于管理数据库的权限 和安全。
1. GRANT (授权)
将特定权限授予用户。
-
经典例子:授予查询和修改权限
创建一个用户 'web_user',并允许其从任何主机连接,仅对 my_db 数据库拥有查询和插入权限。sqlGRANT SELECT, INSERT ON my_db.* TO 'web_user'@'%' IDENTIFIED BY 'password123';
2. REVOKE (撤销)
收回已授予用户的权限。
-
经典例子:撤销修改权限
收回 'web_user' 在 my_db 数据库上的插入权限。sqlREVOKE INSERT ON my_db.* FROM 'web_user'@'%';
四、 其他常用的 SQL 语句 (补充)
这些语句在开发和维护中非常经典。
1. TRUNCATE (截断)
属于 DDL,用于删除表中所有数据,但保留表结构。比 DELETE 速度快,且重置自增 ID。
-
经典例子:清空表数据
sqlTRUNCATE TABLE users;
2. JOIN (连接查询)
用于多表关联查询,是关系型数据库的核心。
-
经典例子:内连接
查询用户及其订单信息(假设有 orders 表)。sqlSELECT u.name, o.order_id, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id;
3. DISTINCT (去重)
用于返回唯一不同的值。
-
经典例子:查询所有不同的状态
sqlSELECT DISTINCT status FROM users;
4. LIMIT / TOP (分页)
用于限制返回的行数(不同数据库语法略有不同,以 MySQL 为例)。
-
经典例子:分页查询
查询第 2 页的数据(每页 10 条,跳过前 10 条,取 10 条)。sqlSELECT * FROM users ORDER BY id LIMIT 10 OFFSET 10;
5. UNION (合并结果集)
用于合并两个或多个 SELECT 语句的结果集。
-
经典例子:合并两个表的用户名
sqlSELECT name FROM users UNION SELECT name FROM admins;
6. CASE WHEN (流程控制)
用于实现类似编程语言中的 if-else 逻辑。
-
经典例子:数据透视/分类
将年龄分组显示。sqlSELECT name, CASE WHEN age < 18 THEN 'Minor' WHEN age BETWEEN 18 AND 60 THEN 'Adult' ELSE 'Senior' END AS age_group FROM users;