IT评测·应用市场-qidao123.com技术社区

标题: mysql子查询跟关联查询 [打印本页]

作者: 天空闲话    时间: 2024-9-26 13:50
标题: mysql子查询跟关联查询
MySQL的复杂查询

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

先介绍一下视图:
T语句(视图本身并不存储数据)。
1.1创建视图的方法
  1. CREATE VIEW 视图名称(<视图列名1><视图列名2><视图列名3>......)
  2. AS
  3. <SELECT语句>
复制代码
例如:创建一个视图
  1. CREATE VIEW productsum(product type,cnt product)
  2. AS
  3. SELECT product type,COUNT(*)
  4. FROM product
  5. GROUP BY product type;
复制代码
 
2.关联子查询

介绍一下关联子查询:
关联子查询会在细分的组内进行比较时使用。
关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分。
关联子查询的结合条件如果未出现在子查询中就会发生错误。
例如:我们查询各种商品种类中高于该种类的均匀销售单价的商品。
  1. --发生错误的语句
  2. SELECT product id,product name,sale price
  3. FROM product
  4. WHERE sale_price >(SELECT AVG(sale price)FRoM product GRouP BY product type);--这里会报错,因为不是唯一值
复制代码
精确的方式应该是:
  1. SELEcT product type,product name,sale price
  2. 登录后复制
  3. FRoM product AS P1
  4. WHERE sale price >(SELECT AVG(sale price)FRoM product As P2
  5.                    WHERE P1.product type=P2.product type
  6.                    GROUP BY product type);
复制代码
结果如下:

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

 
 MySQL 关联子查询效率
一样平常情况下关联子查询的效率是比较低下的,实际上本例中的关联子查询例子也仅是为了演示关联子查询的原理及用法。如果可以的话,关联子查询只管使用 JOIN 或其他查询来代替。如本例中,使用 INNER JOIN 来替换的 SQL 为:
SELECT article.* FROM article INNER JOIN user ON article.uid = user.uid
留意:此处只是为了演示用 INNER JOIN 替换关联子查询的样例,并非表名这种处理是最优处理

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4