SQL
定义:SQL(Structured Query Language,结构化查询语言)是一种标准化的数据库操作语言,广泛用于关系数据库管理系统(RDBMS),如 MySQL、PostgreSQL 等。它支持数据的定义(DDL)、操作(DML)和控制(DCL)。
作用:
- DDL(Data Definition Language):定义和管理数据库结构(如
CREATE TABLE
)。- DML(Data Manipulation Language):操作数据(如
SELECT
、INSERT
)。- DCL(Data Control Language):控制访问权限(如
GRANT
、REVOKE
)。
优点
- 描述性强:SQL 使用声明式语句,用户只需指定“想要什么”,无需关心底层实现。例如:
SELECT name FROM students WHERE age > 18;
。 - 非过程化语言:SQL 不支持循环或条件分支(如 if-else),但可以通过子查询和连接实现复杂逻辑。
- 跨平台性(补充):SQL 是 ANSI/ISO 标准,大多数 RDBMS 支持核心语法,具有良好的可移植性。
SQL 的五种主要用途
- 更新数据(Update):
- 示例:
UPDATE employees SET salary = salary * 1.1 WHERE dept_id = 3;
- 含义:将部门 3 的员工薪资提高 10%。
- 示例:
- 读取数据(Read):
- 示例:
SELECT name, age FROM students WHERE age BETWEEN 18 AND 25 ORDER BY age;
- 含义:查询 18-25 岁学生的姓名和年龄,并按年龄排序。
- 示例:
- 写入数据(Write):
- 示例:
INSERT INTO orders (order_id, customer_id, date) VALUES (1001, 5, '2025-03-01');
- 含义:插入一条订单记录。
- 示例:
- 删除数据:
- 示例:
DELETE FROM users WHERE last_login < '2024-01-01';
- 含义:删除超过一年的未登录用户。
- 示例:
- 结构管理:
- 示例:
CREATE TABLE products (id INT PRIMARY KEY, name VARCHAR(50), price DECIMAL(10,2));
- 含义:创建商品表。
- 示例:
工作中会使用 SQL 的职业
- 通用职业:
- 后端开发人员:编写 API 时使用 SQL 查询数据库,如
SELECT * FROM orders WHERE status = 'pending';
。 - 数据科学家:结合 SQL 和 Python(如 pandas)分析数据,例如:
SELECT AVG(salary) FROM employees GROUP BY dept_id;
。
- 后端开发人员:编写 API 时使用 SQL 查询数据库,如
- 数据管理员(DBA):
- 性能优化:创建索引,如
CREATE INDEX idx_name ON employees(name);
。 - 备份与恢复:使用
BACKUP DATABASE db_name TO DISK = 'path';
(SQL Server 示例)。 - 权限管理:
GRANT SELECT ON customers TO analyst_role;
。
- 性能优化:创建索引,如
流行的 SQL 数据库系统
- SQL Server:支持 T-SQL(扩展 SQL),适用于企业级高可用性场景。
- 示例:
SELECT TOP 5 * FROM sales ORDER BY amount DESC;
(查询销售额前 5)。
- 示例:
- PostgreSQL:支持 JSON 和高级索引,适合复杂查询。
- 示例:
SELECT * FROM users WHERE data->>'age' > '25';
(查询 JSON 字段)。
- 示例:
- MySQL:优化了高并发读写,常见于 Web 应用。
- 示例:
SELECT COUNT(*) FROM logs WHERE date = CURDATE();
(统计今日日志)。
- 示例:
- SQLite:无服务器架构,适合嵌入式系统。
- 示例:
SELECT * FROM contacts LIMIT 10;
(查询前 10 条记录)。
- 示例:
深入内容:SQL 查询示例
- 连接查询:
sql">SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id = d.id WHERE e.salary > 50000;
- 含义:查询薪资超过 5 万的员工及其部门名称。
- 子查询:
sql">SELECT name FROM students WHERE class_id IN (SELECT id FROM classes WHERE teacher = 'Smith');
- 含义:查询 Smith 老师班级的学生。
- 聚合函数:
sql">SELECT dept_id, AVG(salary) as avg_salary FROM employees GROUP BY dept_id HAVING AVG(salary) > 60000;
- 含义:查询平均薪资超过 6 万的部门。