SQL查询与修改详解
一、SQL查询基础
1.1 SELECT 语句
SELECT 语句用于从数据库中检索数据,基本语法如下:
SELECT column1, column2, ... FROM table_name;
要从名为employees
的表中选择所有员工的姓名和职位:
SELECT name, position FROM employees;
1.2 WHERE 子句
WHERE 子句用于筛选满足特定条件的记录,要查找职位为 ‘Manager’ 的所有员工:
SELECT * FROM employees WHERE position = 'Manager';
1.3 ORDER BY 子句
ORDER BY 子句用于对结果集进行排序,按薪水从高到低排序:
SELECT * FROM employees ORDER BY salary DESC;
1.4 聚合函数
聚合函数如 COUNT(), SUM(), AVG(), MAX(), MIN() 等,用于执行计算并返回单一值,计算所有员工的平均工资:
SELECT AVG(salary) AS average_salary FROM employees;
1.5 GROUP BY 子句
GROUP BY 子句用于将结果集按一个或多个列分组,通常与聚合函数一起使用,按部门统计员工数量:
SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;
二、SQL修改操作
2.1 INSERT INTO 语句
INSERT INTO 语句用于向表中添加新记录,向employees
表添加一名新员工:
INSERT INTO employees (name, position, salary, department) VALUES ('John Doe', 'Developer', 70000, 'IT');
2.2 UPDATE 语句
UPDATE 语句用于修改表中已存在的记录,将 John Doe 的工资更新为 75000:
UPDATE employees SET salary = 75000 WHERE name = 'John Doe';
2.3 DELETE 语句
DELETE 语句用于从表中删除记录,删除所有职位为 ‘Intern’ 的员工:
DELETE FROM employees WHERE position = 'Intern';
2.4 ALTER TABLE 语句
ALTER TABLE 语句用于修改表的结构,如添加、删除或修改列,向employees
表添加一个新列hire_date
:
ALTER TABLE employees ADD hire_date DATE;
三、高级查询技巧
3.1 JOIN 操作
JOIN 操作用于结合两个或多个表的数据,常见的 JOIN 类型有 INNER JOIN, LEFT JOIN, RIGHT JOIN 和 FULL JOIN,使用 INNER JOIN 连接employees
和departments
表,以获取每个员工及其对应的部门名称:
SELECT e.name, d.department_name FROM employees e INNER JOIN departments d ON e.department = d.id;
3.2 子查询
子查询是一个嵌套在其他 SQL 语句中的查询,查找工资高于公司平均工资的员工:
SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);
3.3 UNION 操作
UNION 操作用于合并两个或多个 SELECT 语句的结果集,并自动去除重复的行,查找所有经理和开发人员的姓名:
SELECT name FROM employees WHERE position = 'Manager' UNION SELECT name FROM employees WHERE position = 'Developer';
四、性能优化
4.1 索引的使用
索引可以显著提高查询速度,特别是在大型数据库中,常见的索引类型包括 Btree, Hash 和 Fulltext,创建索引的示例如下:
CREATE INDEX idx_position ON employees(position);
4.2 查询优化器提示
在某些情况下,可以使用查询优化器提示来指导数据库如何执行查询,强制使用特定的索引:
SELECT /*+ INDEX(employees idx_position) */ * FROM employees WHERE position = 'Manager';
五、事务管理
5.1 事务的概念
事务是一系列操作的集合,这些操作作为一个整体一起向系统提交或撤回,事务具有 ACID(原子性、一致性、隔离性、持久性)特性。
5.2 控制事务的语句
BEGIN TRANSACTION; 或START TRANSACTION;:开始一个新的事务。
COMMIT;:提交当前事务,使所有更改永久保存。
ROLLBACK;:撤回当前事务,取消所有未提交的更改。
转账操作可以放在一个事务中确保数据的一致性:
BEGIN TRANSACTION; UPDATE accounts SET balance = balance 1000 WHERE account_id = 'A'; UPDATE accounts SET balance = balance + 1000 WHERE account_id = 'B'; COMMIT;
如果在执行过程中出现错误,可以使用 ROLLBACK 撤回更改:
ROLLBACK;
相关问题与解答
问题1: 如何在 SQL 中删除重复记录?
解答: 删除重复记录通常涉及使用子查询来标识重复记录,然后删除这些记录,以下是一个示例,假设我们有一个名为employees
的表,其中包含重复的电子邮件地址,我们希望保留每个电子邮件的最新记录(假设有一个created_at
时间戳列):
DELETE e1 FROM employees e1 INNER JOIN employees e2 WHERE e1.email = e2.email AND e1.created_at < e2.created_at;
这个查询会删除created_at
时间较早的重复记录,只保留最新的一条。
问题2: 如何在 SQL 中实现分页?
解答: 分页通常用于处理大量数据,只显示一部分结果,在 SQL 中,可以使用LIMIT
和OFFSET
子句来实现分页,假设每页显示10条记录,要获取第3页的数据:
SELECT * FROM employees ORDER BY created_at DESC LIMIT 10 OFFSET 20;
这里,LIMIT 10
表示每页显示10条记录,OFFSET 20
表示跳过前20条记录,即从第21条记录开始显示,对应第3页的数据(假设第一页是从第1条记录开始)。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/82415.html