MySQL知识点总结(持续更新)
聚合函数通常用于对数据进行统计和聚合操作。以下是一些常见数据库系统(如 MySQL、PostgreSQL、Oracle、SQL Server 等)中常用的聚合函数:
常见的数据库聚合函数:
-
COUNT():计算指定列中非空值的数量
SELECT COUNT(*) FROM table_name;
-
SUM():计算指定列值的总和
SELECT SUM(column_name) FROM table_name;
-
AVG():计算指定列值的平均值
SELECT AVG(column_name) FROM table_name;
-
MAX():找出指定列中的最大值。
SELECT MAX(column_name) FROM table_name;
-
MIN():找出指定列中的最小值
SELECT MIN(column_name) FROM table_name;
这些函数在不同的数据库系统中可能会有细微的语法或功能差异,但基本功能是一致的。它们通常与 GROUP BY
语句一起使用,以便对分组后的数据进行聚合操作。
SQL 查询中常用的关键词可以根据功能分为以下几类:
数据定义语言(DDL)
用于定义和管理数据库结构:
-
CREATE
:创建数据库或数据库对象(如表、视图、索引等)。 -
ALTER
:修改数据库或数据库对象的结构。 -
DROP
:删除数据库或数据库对象。 -
TRUNCATE
:删除表中的所有数据,但保留表结构。
数据操作语言(DML)
用于操作数据库中的数据:
-
SELECT
:查询数据。 -
INSERT
:插入新数据。 -
UPDATE
:更新现有数据。 -
DELETE
:删除数据。
数据控制语言(DCL)
用于管理数据库的访问权限:
-
GRANT
:授予用户对数据库的访问权限。 -
REVOKE
:撤销用户的访问权限。
数据库事务控制语言(TCL)
用于管理数据库事务:
-
COMMIT
:提交事务,使所有更改永久生效。 -
ROLLBACK
:回滚事务,撤销所有未提交的更改。 -
SAVEPOINT
:设置事务的保存点,以便在发生错误时可以回滚到该点。
其他常见关键词
1. 数据查询与过滤
-
SELECT
:查询数据-- 查询所有列 SELECT * FROM employees;-- 查询特定列 SELECT employee_id, first_name, last_name, salary FROM employees;
-
WHERE
:条件过滤-- 等值查询 SELECT * FROM employees WHERE department_id = 5;-- 范围查询 SELECT * FROM employees WHERE salary BETWEEN 5000 AND 10000;-- 模糊查询 SELECT * FROM employees WHERE last_name LIKE 'A%';-- 多条件查询 SELECT * FROM employees WHERE department_id = 5 AND salary > 5000;
-
HAVING
:聚合条件过滤SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id HAVING AVG(salary) > 5000;
2. 数据排序
-
ORDER BY
:排序-- 单列排序 SELECT * FROM employees ORDER BY salary DESC;-- 多列排序 SELECT * FROM employees ORDER BY department_id ASC, salary DESC;
3. 数据分组
-
GROUP BY
:分组-- 按部门分组,计算每个部门的员工数 SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id;-- 按部门分组,计算每个部门的平均工资 SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id;
4. 连接操作
-
INNER JOIN
:内连接SELECT employees.employee_id, employees.first_name, departments.department_name FROM employees INNER JOIN departments ON employees.department_id = departments.department_id;
-
LEFT JOIN
:左连接SELECT employees.employee_id, employees.first_name, departments.department_name FROM employees LEFT JOIN departments ON employees.department_id = departments.department_id;
-
RIGHT JOIN
:右连接SELECT employees.employee_id, employees.first_name, departments.department_name FROM employees RIGHT JOIN departments ON employees.department_id = departments.department_id;
-
FULL JOIN
:全连接SELECT employees.employee_id, employees.first_name, departments.department_name FROM employees FULL JOIN departments ON employees.department_id = departments.department_id;
5. 子查询
-
IN
:值在子查询结果集中SELECT employee_id, first_name, last_name FROM employees WHERE department_id IN (SELECT department_id FROM departments WHERE location_id = 1001);
-
EXISTS
:子查询返回至少一行SELECT employee_id, first_name, last_name FROM employees WHERE EXISTS (SELECT 1 FROM departments WHERE department_id = employees.department_id AND location_id = 1001);
-
ANY
:与子查询返回的值进行比较,满足任意一个条件SELECT employee_id, first_name, last_name FROM employees WHERE salary > ANY (SELECT salary FROM employees WHERE department_id = 5);
-
ALL
:与子查询返回的值进行比较,满足所有条件SELECT employee_id, first_name, last_name FROM employees WHERE salary > ALL (SELECT salary FROM employees WHERE department_id = 5);
6. 表达式和条件判断
-
AS
:指定别名SELECT employee_id AS id, first_name AS fname, last_name AS lname, salary * 12 AS annual_salary FROM employees;
-
CASE
:条件表达式SELECT employee_id, first_name, last_name, salary,CASEWHEN salary > 10000 THEN 'High'WHEN salary BETWEEN 5000 AND 10000 THEN 'Medium'ELSE 'Low'END AS salary_level FROM employees;
7. 事务控制
-
COMMIT
:提交事务-- 提交事务,使所有更改永久生效 COMMIT;
-
ROLLBACK
:回滚事务-- 回滚事务,撤销所有未提交的更改 ROLLBACK;
-
SAVEPOINT
:设置事务的保存点-- 设置保存点 SAVEPOINT sp1;-- 执行一些操作 UPDATE employees SET salary = salary * 1.1 WHERE department_id = 5;-- 回滚到保存点 ROLLBACK TO SAVEPOINT sp1;
8. 其他常用操作
-
UNION
:合并两个或多个SELECT
语句的结果集(去重)SELECT employee_id, first_name, last_name FROM employees WHERE department_id = 5 UNION SELECT employee_id, first_name, last_name FROM employees WHERE salary > 10000;
-
UNION ALL
:合并两个或多个SELECT
语句的结果集(不去重)SELECT employee_id, first_name, last_name FROM employees WHERE department_id = 5 UNION ALL SELECT employee_id, first_name, last_name FROM employees WHERE salary > 10000;
-
VIEW
:创建或替换视图-- 创建视图 CREATE VIEW high_salary_employees AS SELECT employee_id, first_name, last_name, salary FROM employees WHERE salary > 10000;-- 查询视图 SELECT * FROM high_salary_employees;
-
INDEX
:创建或删除索引-- 创建索引 CREATE INDEX idx_employee_last_name ON employees (last_name);-- 删除索引 DROP INDEX idx_employee_last_name;
-
EXPLAIN
:显示 SQL 语句的执行计划EXPLAIN SELECT * FROM employees WHERE last_name = 'Smith';