SQL(Structured Query Language)


一、数据定义语言(DDL

用于定义和管理数据库对象(如表、索引、视图等)。

1. CREATE:创建数据库对象

— 创建数据库
CREATE DATABASE database_name;

— 创建表
CREATE TABLE table_name (
    column1 datatype constraints,
    column2 datatype constraints,
    …
);

— 示例:创建一个员工表
CREATE TABLE employees (
    id INT PRIMARY KEY AUTO_INCREMENT,  — 主键,自增
    name VARCHAR(100) NOT NULL,         — 非空字符串
    age INT CHECK (age >= 0),           — 检查约束
    department_id INT,
    salary DECIMAL(10, 2) DEFAULT 0.00  — 默认值
);

2. ALTER:修改数据库对象

— 添加列
ALTER TABLE table_name ADD column_name datatype;

— 删除列
ALTER TABLE table_name DROP COLUMN column_name;

— 修改列的数据类型(具体语法因数据库而异)
ALTER TABLE table_name MODIFY column_name new_datatype;

— 示例:为 employees 表添加 email 列
ALTER TABLE employees ADD email VARCHAR(255);

3. DROP:删除数据库对象

— 删除表
DROP TABLE table_name;

— 删除数据库
DROP DATABASE database_name;

— 示例:删除 employees 表
DROP TABLE employees;


二、数据操作语言(DML

用于操作数据库中的数据(增删改)。

1. INSERT:插入数据

— 插入完整行
INSERT INTO table_name (column1, column2, …)
VALUES (value1, value2, …);

— 插入部分列
INSERT INTO table_name (column1, column2)
VALUES (value1, value2);

— 插入多行
INSERT INTO table_name (column1, column2)
VALUES
    (value1, value2),
    (value3, value4);

— 示例:插入员工数据
INSERT INTO employees (name, age, department_id, salary)
VALUES ('Alice', 30, 1, 5000.00);

2. UPDATE:更新数据

— 更新表中满足条件的记录
UPDATE table_name
SET column1 = value1, column2 = value2, …
WHERE condition;

— 示例:将部门ID为1的员工工资增加10%
UPDATE employees
SET salary = salary * 1.10
WHERE department_id = 1;

3. DELETE:删除数据

— 删除满足条件的记录
DELETE FROM table_name
WHERE condition;

— 删除所有记录(保留表结构)
DELETE FROM table_name;

— 示例:删除年龄大于60的员工
DELETE FROM employees
WHERE age > 60;


三、数据查询语言(DQL

用于从数据库中查询数据。

1. SELECT:基本查询

— 查询所有列
SELECT * FROM table_name;

— 查询指定列
SELECT column1, column2 FROM table_name;

— 去重查询
SELECT DISTINCT column_name FROM table_name;

— 示例:查询所有员工姓名和工资
SELECT name, salary FROM employees;

2. WHERE:条件过滤

— 使用比较运算符(=, <>, >, <, >=, <=)
SELECT * FROM table_name
WHERE column > value;

— 逻辑运算符(AND, OR, NOT)
SELECT * FROM employees
WHERE age > 25 AND department_id = 2;

— 范围查询(BETWEEN)
SELECT * FROM employees
WHERE salary BETWEEN 3000 AND 5000;

— 集合查询(IN)
SELECT * FROM employees
WHERE department_id IN (1, 2, 3);

— 模糊匹配(LIKE)
SELECT * FROM employees
WHERE name LIKE 'A%';  — 以A开头的名字

3. JOIN:多表连接

— 内连接(INNER JOIN)
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

— 左连接(LEFT JOIN)
SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

— 右连接(RIGHT JOIN)
SELECT employees.name, departments.name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;

— 全连接(FULL JOIN)
SELECT employees.name, departments.name
FROM employees
FULL JOIN departments ON employees.department_id = departments.id;

4. 聚合函数与分组

— 聚合函数
SELECT COUNT(*) AS total, AVG(salary), MAX(salary), MIN(salary)
FROM employees;

— 分组查询(GROUP BY)
SELECT department_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY department_id;

— 分组过滤(HAVING)
SELECT department_id, COUNT(*) AS num_employees
FROM employees
GROUP BY department_id
HAVING COUNT(*) > 5;

5. 排序与分页

— 排序(ORDER BY)
SELECT * FROM employees
ORDER BY salary DESC;  — 降序排列

— 分页(LIMIT 和 OFFSET)
SELECT * FROM employees
LIMIT 10 OFFSET 20;  — 从第21条开始取10条记录


四、数据控制语言(DCL

用于管理数据库权限。

1. GRANT:授予权限

— 授予用户对表的查询权限
GRANT SELECT ON table_name TO 'username'@'host';

— 授予所有权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';

2. REVOKE:撤销权限

— 撤销用户的更新权限
REVOKE UPDATE ON table_name FROM 'username'@'host';

— 刷新权限
FLUSH PRIVILEGES;


五、常用函数

1. 字符串函数

SELECT CONCAT('Hello', ' ', 'World');  — 连接字符串
SELECT UPPER('hello');                 — 转大写
SELECT SUBSTRING('Hello World', 1, 5); — 取子串

2. 日期函数

SELECT NOW();                          — 当前日期和时间
SELECT DATE_ADD('2023-01-01', INTERVAL 1 DAY);  — 日期加减
SELECT DATEDIFF('2023-01-10', '2023-01-01');    — 日期差

3. 数学函数

SELECT ROUND(3.14159, 2);  — 四舍五入
SELECT RAND();             — 随机数
SELECT ABS(-10);           — 绝对值


六、注意事项

  1. 关键字大小写:SQL 关键字不区分大小写(如 SELECT 和 select 等效),但通常使用大写以增强可读性。
  2. 引号:字符串用单引号 ',列名和表名通常不用引号(除非包含特殊字符)。
  3. 通配符:% 匹配任意数量字符,_ 匹配单个字符。
  4. 别名:使用 AS 为列或表起别名(如 SELECT name AS emp_name)。
  5. NULL :使用 IS NULL 或 IS NOT NULL 判断空值。
  6. 事务控制
  7. START TRANSACTION;  — 开始事务
    COMMIT;             — 提交事务
    ROLLBACK;           — 回滚事务
  8. 安全性:避免直接使用 DROP 或 DELETE 时不加 WHERE 条件。

七、总结

SQL 的核心在于对数据的增删改查(CRUD)和结构管理。掌握上述基本语句后,可以通过组合使用(如子查询、视图、索引等)实现更复杂的功能。建议通过实际项目练习(如设计电商数据库、学生成绩管理系统等)巩固技能。