sql-explain
分析SQL查询执行计划并提供优化建议,支持PostgreSQL/MySQL/SQLite。
涵盖SQL数据定义、操作、查询和控制命令的综合指南。
openclaw skills install @duanc-chao/f命令、参数、文件名以原文为准
名称: sql-operations-mastery
描述: 使用 SQL 进行数据库操作的全面指南,涵盖关系数据库系统中的数据定义、操作、查询和控制。
关键词: ["sql", "database", "relational database", "data manipulation", "data definition", "query", "mysql", "postgresql", "oracle"]
目标
让用户掌握使用标准 SQL(结构化查询语言)有效创建、管理和查询关系数据库所需的实用技能。
SQL(结构化查询语言)是用于管理和操作关系数据库的标准编程语言。它是一种声明式语言,这意味着你只需指定*想要什么*数据,数据库管理系统(DBMS)就会自行找到最有效的检索方式。
SQL 命令根据其功能分为四种主要类型。
数据定义语言(DDL)
DDL 命令用于定义和管理数据库及其对象(如表和索引)的结构。
- 创建数据库:
CREATE DATABASE my_company;USE my_company;
CREATE TABLE employees (
id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
hire_date DATE,
salary DECIMAL(10, 2)
);- 添加列:
ALTER TABLE employees ADD COLUMN department VARCHAR(50);- 删除表:
DROP TABLE employees;数据操作语言(DML)
DML 命令用于插入、更新和删除表中的实际数据。
INSERT INTO employees (id, first_name, last_name, hire_date, salary, department)
VALUES (101, 'Jane', 'Doe', '2023-01-15', 75000.00, 'Engineering');UPDATE employees
SET salary = 80000.00
WHERE id = 101;DELETE FROM employees
WHERE id = 101;数据查询语言(DQL)
DQL 主要用于从数据库中检索数据。SELECT 语句是 DQL 的核心。
SELECT first_name, last_name FROM employees;SELECT * FROM employees WHERE department = 'Engineering';SELECT first_name, last_name, salary
FROM employees
ORDER BY salary DESC;数据控制语言(DCL)
DCL 命令管理数据库的访问权限和许可。
GRANT SELECT, INSERT ON employees TO 'analyst_user';REVOKE INSERT ON employees FROM 'analyst_user';要提取有意义的洞察,通常需要执行更复杂的查询。
聚合数据
聚合函数对一组值执行计算并返回单个值。常用函数包括 COUNT()、SUM()、AVG()、MIN() 和 MAX()。
SELECT AVG(salary) AS average_salary
FROM employees
WHERE department = 'Engineering';SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;合并多个表的数据(JOIN)
JOIN 子句用于根据两个或多个表之间的相关列,将它们的行组合在一起。
-- 假设有一个 'departments' 表,包含 dept_id 和 dept_name
SELECT e.first_name, e.last_name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.department = d.dept_name;子查询
子查询是嵌套在另一个查询内部的查询。通常用在 WHERE 子句中。
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);UPDATE 或 DELETE 语句中忘记 WHERE 子句会将操作应用于表中的每一行。这是一个常见且往往会造成灾难性后果的错误。BEGIN; -- 开始事务
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT; -- 保存所有更改
-- 如果发生错误,可以使用 ROLLBACK; 撤销所有更改WHERE 子句和 JOIN 条件中频繁使用的列上创建索引,可显著提升查询性能。CREATE INDEX idx_employee_dept ON employees(department);已收录 1 个 Skill