MYSQL学习10


参考MICK的SQL基础教程,进行SQL的基础学习。

视图的优势

  1. 视图无需保存数据,因此可以节省存储设备的容量。
  2. 可以将频繁使用的 SELECT 语句保存成视图。
  3. 视图中的数据会随着原表的变化自动更新。

创建视图

CREATE VIEW productsum (product_type, cnt_product) AS SELECT
	product_type,
	COUNT(*)
FROM
	product
GROUP BY
	product_type SELECT
		*
	FROM
		productsum

这里的 AS 与定义别名时使用的 AS 并不相同,如果省略就会发生错误。虽然很容易混淆,但是语法就是这么规定的。

注:

  1. 可以使用多重视图,但是会降低SQL 的性能。
  2. 定义视图时不要使用ORDER BY子句,数据
    行都是没有顺序的。

子视图

子查询的特点概括起来就是一张一次性视图

SELECT
	product_type,
	cnt_product
FROM
	(
		SELECT
			product_type,
			COUNT(*) AS cnt_product
		FROM
			product
		GROUP BY
			product_type
	) AS productsum

由于子查询的层数原则上没有限制,因此可以像“子查询的FROM句中还可以继续使用子查询,但是,随着子查询嵌套层数的增加,SQL 语句会变得越来越难读懂,性能也会越来越差。

标量子查询

SELECT
	product_id,
	product_name,
	sale_price,
	(
		SELECT
			AVG(sale_price)
		FROM
			product
	) AS AVG_price
FROM
	product
WHERE
	sale_price > (
		SELECT
			AVG(sale_price)
		FROM
			product
	);

注:最后我们来介绍一下使用标量子查询时的注意事项,那就是该子查询绝对不能返回多行结果。

关联子查询

SELECT
	product_type,
	product_name,
	sale_price
FROM
	product AS p1
WHERE
	sale_price > (
		SELECT
			AVG(sale_price)
		FROM
			product AS p2
		WHERE
			p1.product_type = p2.product_type
		GROUP BY
			product_type
	);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值