实用的SQL实例
                           
天天向上
发布: 2024-12-28 21:27:55

原创
353 人浏览过

好的!为了帮助你更好地理解和掌握SQL,以下是几个实用的SQL实例,涵盖了基础查询、复杂查询、窗口函数、事务管理、数据库优化等内容。

1. 基本查询操作

查询所有记录

假设有一个表 students,包含学生信息:

idnameagegrade
1Alice20A
2Bob22B
3Charlie21A
4Dave23C

查询所有学生的信息:

SELECT * FROM students;

查询特定列

查询所有学生的姓名和年龄:

SELECT name, age FROM students;

使用WHERE条件筛选

查询所有年龄大于21岁的学生:

SELECT * FROM students WHERE age > 21;

排序数据

查询所有学生并按年龄升序排序:

SELECT * FROM students ORDER BY age ASC;

限制结果

查询前两名学生的姓名和年龄:

SELECT name, age FROM students LIMIT 2;

2. 聚合函数与分组

使用聚合函数

计算所有学生的平均年龄:

SELECT AVG(age) AS average_age FROM students;

使用GROUP BY分组

按成绩分组,统计每个成绩等级的人数:

SELECT grade, COUNT(*) AS student_count FROM students GROUP BY grade;

结合HAVING筛选

查询成绩为”A”的学生平均年龄大于21岁的人数:

SELECT grade, AVG(age) AS average_age
FROM students
GROUP BY grade
HAVING grade = 'A' AND AVG(age) > 21;

3. 连接查询(JOIN)

假设有两张表:studentscourses,学生选课信息如下:

students 表:

idname
1Alice
2Bob

courses 表:

student_idcourse
1Math
1Science
2History

INNER JOIN

查询每个学生所选的课程:

SELECT students.name, courses.course
FROM students
INNER JOIN courses ON students.id = courses.student_id;

LEFT JOIN

查询每个学生及其选的课程,如果没有选课则显示NULL:

SELECT students.name, courses.course
FROM students
LEFT JOIN courses ON students.id = courses.student_id;

4. 窗口函数

假设有一个 sales 表,记录销售数据:

salespersonsales_amountsale_date
John5002024-01-01
Jane6002024-01-02
John7002024-01-03
Jane8002024-01-04

使用 ROW_NUMBER() 排名

按销售金额降序排名:

SELECT salesperson, sales_amount, ROW_NUMBER() OVER (ORDER BY sales_amount DESC) AS rank
FROM sales;

使用 LEAD()LAG() 比较前后行数据

比较每个销售员当前和上一天的销售额差:

SELECT salesperson, sales_amount, LAG(sales_amount) OVER (PARTITION BY salesperson ORDER BY sale_date) AS previous_sales,
       sales_amount - LAG(sales_amount) OVER (PARTITION BY salesperson ORDER BY sale_date) AS sales_difference
FROM sales;

5. 事务管理

假设有一个银行账户的 accounts 表:

account_idbalance
11000
22000

开始事务

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT;  -- 提交事务

如果中途出现错误,可以使用 ROLLBACK 进行回滚:

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- 假设此时发生错误
ROLLBACK;  -- 回滚事务

6. 索引与查询优化

假设你有一个表 employees,包含大量员工数据,你可以创建索引来提高查询效率。

创建索引

CREATE INDEX idx_employee_name ON employees(name);

使用 EXPLAIN 分析查询

当查询执行较慢时,可以使用 EXPLAIN 查看查询的执行计划:

EXPLAIN SELECT * FROM employees WHERE name = 'John';

EXPLAIN 将展示查询是否利用了索引、表扫描的顺序等信息。


7. 复杂查询与子查询

子查询在 SELECT 中使用

查询每个学生和他们所选课程数量:

SELECT students.name, 
       (SELECT COUNT(*) FROM courses WHERE courses.student_id = students.id) AS course_count
FROM students;

子查询在 WHERE 中使用

查询销售额大于某个平均值的销售员:

SELECT salesperson
FROM sales
WHERE sales_amount > (SELECT AVG(sales_amount) FROM sales);

总结

这些实例展示了从简单查询到复杂查询的多种SQL用法,包括聚合函数、连接查询、窗口函数、事务管理等。通过不断实践这些操作,你可以提升SQL的应用能力,逐步应对更复杂的数据库操作。要特别注意的是,理解和掌握SQL的优化技巧,能够帮助你应对大数据量和高并发的查询需求。

发表回复 1

Your email address will not be published. Required fields are marked *


零基础学习SQL – 来学习啦- 编程乐园

零基础学习SQL – 来学习啦- 编程乐园

[…] 通过这些系统化的学习,你将能够快速掌握SQL,并能够在实际项目中灵活运用SQL解决各种数据处理和分析问题。实用的SQL实例可参照这边文章:实用的sql实例/ […]