在 MySQL 中,子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以分为相关子查询和非相关子查询两种类型。
相关子查询是指子查询的执行结果依赖于外部查询中的值。在执行相关子查询时,MySQL 会先执行外部查询,然后根据外部查询的结果来执行子查询。
一、相关子查询的特点是:
- 子查询的执行结果依赖于外部查询中的值。
- 子查询的执行顺序是先执行外部查询,然后根据外部查询的结果来执行子查询。
- 相关子查询的执行效率较低,因为它需要多次执行子查询。
二、相关子查询的使用方法是:
- 在子查询中使用外部查询中的值。
- 在子查询中使用外部查询中的表。
- 在子查询中使用外部查询中的列。
三、相关子查询的高级应用包括:
- 利用相关子查询实现多表关联。
- 利用相关子查询实现动态查询。
- 利用相关子查询实现数据过滤。
四、以下是生成的 MySQL 相关子查询的示例代码:
-- 创建表
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
category_id INT,
price DECIMAL(10, 2)
);
-- 插入数据
INSERT INTO products (name, category_id, price)
VALUES ('Product 1', 1, 10.00),
('Product 2', 1, 20.00),
('Product 3', 2, 30.00),
('Product 4', 2, 40.00),
('Product 5', 3, 50.00);
-- 示例 1:使用子查询计算每个分类的平均价格
SELECT category_id, AVG(price) AS average_price
FROM products
GROUP BY category_id;
-- 示例 2:使用相关子查询查找每个分类中价格高于平均价格的产品
SELECT *
FROM products p1
WHERE price > (
SELECT AVG(price)
FROM products p2
WHERE p1.category_id = p2.category_id
);
-- 示例 3:使用子查询计算每个分类的产品数量
SELECT category_id, (
SELECT COUNT(*)
FROM products p2
WHERE p1.category_id = p2.category_id
) AS product_count
FROM products p1
GROUP BY category_id;
在上述示例中,我们创建了一个名为 'products' 的表,并插入了一些示例数据。然后,我们使用子查询和相关子查询来执行各种聚合和分组操作。
示例 1 中,我们使用子查询计算每个分类的平均价格,并将结果与产品表进行连接,以获取每个分类的产品信息。
示例 2 中,我们使用相关子查询查找每个分类中价格高于平均价格的产品。相关子查询是指子查询中引用了外部查询中的表或列,因此子查询的执行结果会受到外部查询的影响。在这个例子中,我们使用相关子查询来计算每个分类的平均价格,并将结果与产品表进行比较,以获取价格高于平均价格的产品信息。
示例 3 中,我们使用子查询计算每个分类的产品数量,并将结果与产品表进行连接,以获取每个分类的产品信息。
(文章为作者在学习MySQL过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)
标签:category,示例,查询,相关,分组,MySQL,products,id From: https://blog.csdn.net/weixin_69763181/article/details/139619907