SQL 详解数据库
SQL(Structured Query Language,结构化查询语言)是一种专门用于与关系型数据库进行交互的标准化语言。它可以用于查询、更新和管理数据库中的数据,以及定义和控制数据库的结构。
以下是 SQL 的主要功能模块及其详解:
1. 数据查询 (Data Query)
1.1 SELECT 语句
用于从数据库中检索数据,是 SQL 最常用的语句。
基本语法: SELECT 列名 FROM 表名 WHERE 条件;
示例:SELECT name, age FROM students WHERE age > 18;
关键子句:
- WHERE:条件过滤。
- ORDER BY:排序。
SELECT name, age FROM students ORDER BY age DESC;
GROUP BY:分组。
SELECT department, COUNT(*) FROM employees GROUP BY department;
HAVING:分组后的条件过滤。
SELECT department, AVG(salary)
FROM employees
GROUP BY department
HAVING AVG(salary) > 5000;
LIMIT:限制返回记录数量。
SELECT * FROM students LIMIT 10;
2. 数据操作 (Data Manipulation)
2.1 INSERT 语句
用于向表中插入数据。
基本语法:INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);
示例:INSERT INTO students (name, age, grade) VALUES ('Alice', 20, 'A');
2.2 UPDATE 语句
用于更新表中的数据。
基本语法:UPDATE 表名 SET 列名 = 新值 WHERE 条件;
示例:UPDATE students SET grade = 'B' WHERE name = 'Alice';
2.3 DELETE 语句
用于删除表中的数据。
基本语法:DELETE FROM 表名 WHERE 条件;
示例:DELETE FROM students WHERE age < 18;
3. 数据定义 (Data Definition)
3.1 CREATE 语句
用于创建数据库和表。
创建数据库:CREATE DATABASE 数据库名;
创建表:
CREATE TABLE 表名 (
列名 数据类型 [约束],
...
);
示例:
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
age INT,
grade CHAR(1)
);
3.2 ALTER 语句
用于修改表结构。
添加列:ALTER TABLE 表名 ADD 列名 数据类型;
修改列:ALTER TABLE 表名 MODIFY 列名 新数据类型;
删除列:ALTER TABLE 表名 DROP 列名;
3.3 DROP 语句
用于删除数据库或表。
删除表:DROP TABLE 表名;
删除数据库:DROP DATABASE 数据库名;
4. 数据控制 (Data Control)
4.1 GRANT 语句
用于赋予用户权限。
基本语法:GRANT 权限 ON 数据库名.表名 TO '用户名'@'主机';
示例: GRANT SELECT, INSERT ON school.* TO 'user1'@'localhost';
4.2 REVOKE 语句
用于撤销用户权限。
基本语法:REVOKE 权限 ON 数据库名.表名 FROM '用户名'@'主机';
示例:REVOKE SELECT, INSERT ON school.* FROM 'user1'@'localhost';
5. 事务管理 (Transaction Management)
事务是一组操作的集合,要么全部执行成功,要么全部回滚。
事务控制语句:
- BEGIN / START TRANSACTION:开始事务。
- COMMIT:提交事务。
- ROLLBACK:回滚事务。
- SAVEPOINT:设置保存点。
示例:
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
6. 高级查询
6.1 子查询
嵌套在其他查询中的查询。
示例:SELECT name FROM students WHERE age = (SELECT MAX(age) FROM students);
6.2 联合查询 (UNION)
合并多个查询结果。
示例:
SELECT name FROM students WHERE grade = 'A'
UNION
SELECT name FROM students WHERE age < 18;
6.3 连接 (JOIN)
将多个表中的数据组合起来。
- INNER JOIN:返回匹配的行。
SELECT employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
- LEFT JOIN:返回左表的所有行,即使没有匹配。
- RIGHT JOIN:返回右表的所有行。
- FULL JOIN:返回所有匹配和不匹配的行。
7. 常见 SQL 数据类型
7.1 数值类型
- INT, FLOAT, DECIMAL
7.2 字符类型
- CHAR, VARCHAR, TEXT
7.3 日期类型
- DATE, DATETIME, TIMESTAMP