SQL基础教程第五章复杂查询

视图

视图和表

从SQL角度来看视图就是一张表,区别就是是否保存了真正的数据

  • 优点
    1. 节省存储设备容量
    2. 可以将频繁使用的select语句保存为视图,不用每次都重复书写

创建视图

1
2
3
4
5
CREATE VIEW ProductSum(product_type,cnt_product)
AS
SELECT product_type,COUNT(*)
FROM Product
Group BY product_type;

使用视图

1
2
SELECT product_type,cnt_product
FROM Productsum;
  1. 尽量避免多重视图
  2. 不能使用order by

删除视图

DROP VIEW

子查询

子查询其实就是一次性视图

1
2
3
4
SELECT product_type, cnt_product
FROM (SELECT product_type, COUNT(*) AS cnt_product
FROM Product
GROUP BY product_type) AS ProductSum;

这个是一次性的,别名在查询结束后就消失了

关联子查询

1
2
3
SELECT AVG(sale_price)
FROM Product
GROUP BY product_type;

子查询如上所示,根据商品种类查找平均价格,如果使用下面的查询会报错:

1
2
3
4
5
SELECT product_id, product_name, sale_price
FROM Product
WHERE sale_price > (SELECT AVG(sale_price)
FROM Product
GROUP BY product_type);

因为sale_price是一个数据,而子查询是三个数据,所以需要追加一行关联查询:

1
2
3
4
5
6
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);

结合条件一定要写在子查询里