一、数据定义语言(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); — 绝对值
六、注意事项
- 关键字大小写:SQL 关键字不区分大小写(如 SELECT 和 select 等效),但通常使用大写以增强可读性。
- 引号:字符串用单引号 ',列名和表名通常不用引号(除非包含特殊字符)。
- 通配符:% 匹配任意数量字符,_ 匹配单个字符。
- 别名:使用 AS 为列或表起别名(如 SELECT name AS emp_name)。
- NULL 值:使用 IS NULL 或 IS NOT NULL 判断空值。
- 事务控制:
- START TRANSACTION; — 开始事务
COMMIT; — 提交事务
ROLLBACK; — 回滚事务 - 安全性:避免直接使用 DROP 或 DELETE 时不加 WHERE 条件。
七、总结
SQL 的核心在于对数据的增删改查(CRUD)和结构管理。掌握上述基本语句后,可以通过组合使用(如子查询、视图、索引等)实现更复杂的功能。建议通过实际项目练习(如设计电商数据库、学生成绩管理系统等)巩固技能。