数据库相关嵌套子查询
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库相关嵌套子查询相关的知识,希望对你有一定的参考价值。
select sno,cno
from sc x
where grade>=(select avg(grade) from sc y where y.sno=x.sno)
查询步骤是什么?
select sno,cno
from sc
where grade>=(select avg(grade) from sc )
我这样也能得到正确结果,但顺序不一样,为什么啊?
select sno,cno
from sc x
where grade>=(select avg(grade) from sc y where y.sno=x.sno)
首先执行y.sno=x.sno,我想Sno是学号吧,从X关系和Y关系中查找学号相同的,从新建立一个新的关系,
再从新的关系中求成绩的平均值。
最后才在新的关系中查找满足条件(grade>=平均成绩)的Sno和Cno。
最后的结果排序如果没有指定显示顺序,结果将按其最方便的顺序(通常是元组在表中的先后顺序)输出结果。可以按照自己的意思排列结果的顺序,用ORDER BY子句指定一个或多个属性列的升序(ASC)或降序(DESC)。
select sno,cno
from sc x
where grade>=(select avg(grade) from sc y where y.sno=x.sno)
ORDER BY grade ASC;
和
select sno,cno
from sc
where grade>=(select avg(grade) from sc )
ORDER BY grade ASC;
输出的结果肯定一致吧。 参考技术B 因为你第一个语句用到了y.sno=x.sno,相当于连接两个表了。
第二个相当于从一个表里取的,所以顺序不一样不奇怪吧 参考技术C (1)
select sno,cno
from sc x
where grade>=(select avg(grade) from sc y where y.sno=x.sno)
(2)
select sno,cno
from sc
where grade>=(select avg(grade) from sc )
(1)(2)意义不一样
(1)是找出 成绩大于A的平均成绩的课程
(2)是找出 成绩大于所有人所有课程成绩平均值的课程本回答被提问者采纳
使用连接嵌套子查询
【中文标题】使用连接嵌套子查询【英文标题】:Nesting subqueries with joins 【发布时间】:2014-01-31 22:53:01 【问题描述】:我正在尝试合并 4 个表,以获取服装项目的相应数据,在为每个项目选择时是这样的。
Array(
[0] => array ([item] => 1, [article] => 10, [layer1] => 6, [layer2] => 8, [layer3] => 9, [layer4] => 10),
[1] => array ([item] => 2, [article] => 5, [layer1] => 3, [layer2] => 4, [layer3] => 5, [layer4] => 0/null),
[2] => array ([item] => 3, [article] => 7, [layer1] => 7, [layer2] => 0/null etc),
[3] => array ([item] => 4, [article] => 1, [layer1] => 1, [layer2] => 2, [layer3] => 0/null etc))
我不知道如何嵌套和连接这些表以获得正确的数据,但所有 4 个表(不幸的是)都是存储各种排序和预览数据所必需的,最远的表在树下(article_layers,和层)需要多行连接。骨骼表如下所示。
items table
item_id item_article item_name
1 10 red dress
2 5 green polo
3 7 jeans
4 1 black leather jacket
5 10 black dress
articles table
article_id article_name
1 jacket
5 shirt
7 pants
10 dress
article_layers table
id article_id layer_id
1 1 1
2 1 2
3 5 3
4 5 4
5 5 5
6 7 7
7 10 6
8 10 8
9 10 9
10 10 10
layers table
layer_id layer_name
1 jacket_right_sleeve
2 jacket_left_sleeve
3 shirt_right_sleeve
4 shirt_left_sleeve
5 shirt_torso
6 dress_torso
7 pants
8 dress_left_sleeve
9 dress_right_sleeve
10 dress_skirt
我试过了
SELECT items.*, articles.*, article_layers.*, layers.*,
(SELECT * FROM layers where article_layers.layer_id = layers.layer_id) as layer1,
FROM items
JOIN articles ON items.article_id = articles.article_id
JOIN article_layers ON articles.article_id = article_layers.article_id
还有许多类似的查询,但我找不到获取所需数据的神奇公式。任何帮助表示赞赏。
【问题讨论】:
【参考方案1】:试试这个:
SELECT *
FROM items i
INNER JOIN articles a ON i.article_id = a.article_id
INNER JOIN article_layers al ON a.article_id = al.article_id
INNER JOIN layers l ON al.layer_id = l.layer_id
【讨论】:
以上是关于数据库相关嵌套子查询的主要内容,如果未能解决你的问题,请参考以下文章