MySQL的复杂查询

复杂查询主要包括视图、子查询和关联子查询

1.视图

先介绍一下视图:

  • ·从SQL的角度来看,视图和表是相同的,两者的区别在于表中存储的是实际的数据,而视图中保存的是SELEC

T语句(视图本身并不存储数据)。

  • 使用视图可以轻松完成跨多表查询数据等复杂操作。
  • 视图中不能包含ORDER BY和对视图的更新操作(INSERT、DELETE、UPDATE

1.1创建视图的方法

CREATE VIEW 视图名称(<视图列名1><视图列名2><视图列名3>......)
AS
<SELECT语句>

例如:创建一个视图

CREATE VIEW productsum(product type,cnt product)
AS
SELECT product type,COUNT(*)
FROM product
GROUP BY product type;

 

2.关联子查询

介绍一下关联子查询:
关联子查询会在细分的组内进行比较时使用。
关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分。
关联子查询的结合条件如果未出现在子查询中就会发生错误。
例如:我们查询各种商品种类中高于该种类的平均销售单价的商品。

--发生错误的语句
SELECT product id,product name,sale price
FROM product
WHERE sale_price >(SELECT AVG(sale price)FRoM product GRouP BY product type);--这里会报错,因为不是唯一值

正确的方式应该是:

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);

结果如下:

 这里起到的关键作用就是在子查询中添加的WHERE子句条件。该条件的意思就是在同一商品种类中对各商品的销
售单价和平均单价进行比较。