MySQL 子查询和分组查询是 SQL 语言中非常重要的两个查询方式,本篇攻略将详细讲解这两种查询方法的使用和应用场景。
子查询
子查询也称为内查询,是指在一个 SQL 语句中嵌套了另一个 SELECT 语句,通常用来做为外查询的限定条件。
基本语法
子查询的基本语法如下:
SELECT column
FROM table
WHERE column operator (SELECT column FROM table WHERE condition);
其中,后半部分的 (SELECT column FROM table WHERE condition)
就是子查询。子查询可以出现在 SELECT、FROM、WHERE 子句中,但通常更多的是出现在 WHERE 子句中。
示例
首先,我们创建一个 students 表,包含 id、name、age 和 score 四个字段,如下所示:
CREATE TABLE students(
id INT PRIMARY KEY,
name VARCHAR(20),
age INT,
score FLOAT
);
INSERT INTO students VALUES(1, 'Tom', 18, 90.0);
INSERT INTO students VALUES(2, 'Jerry', 17, 95.0);
INSERT INTO students VALUES(3, 'Lucy', 18, 80.0);
INSERT INTO students VALUES(4, 'Lily', 17, 85.0);
示例一:查询所有年龄大于平均年龄的学生
我们可以使用子查询来实现这个功能:
SELECT name, age
FROM students
WHERE age > (SELECT AVG(age) FROM students);
其输出结果如下所示:
name age
Tom 18
Lucy 18
示例二:查询所有成绩高于 Lucy 的学生
我们同样可以使用子查询来实现这个功能:
SELECT name, score
FROM students
WHERE score > (SELECT score FROM students WHERE name='Lucy');
其输出结果如下所示:
name score
Tom 90.0
Jerry 95.0
分组查询
分组查询是指将数据按照某个字段分组,然后对每个组进行统计、计算。它经常与聚合函数一起使用。
基本语法
分组查询的基本语法如下:
SELECT column, AGGREGATE(column)
FROM table
GROUP BY column;
其中,AGGREGATE(column) 表示聚合函数,如 SUM(column)、AVG(column) 等。
示例
仍然使用上面的 students 表,我们来看一下如何使用分组查询。
示例一:计算每个年龄的学生数量
我们可以使用 COUNT() 函数来计算每个年龄的学生数量:
SELECT age, COUNT(*) AS count
FROM students
GROUP BY age;
其输出结果如下所示:
age count
17 2
18 2
示例二:计算每个年龄的平均分数
我们可以使用 AVG() 函数来计算每个年龄的平均分数:
SELECT age, AVG(score) AS avg_score
FROM students
GROUP BY age;
其输出结果如下所示:
age avg_score
17 90.0
18 85.0
以上就是本篇攻略对 MySQL 子查询和分组查询的详细讲解和示例说明。希望能够对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 子查询和分组查询 - Python技术站