Sous-requêtes dans la clause FROM

Il est possible de raffiner progressivement une requête en enchaînant les questions dans la clause FROM. Ceci est une alternative à la création de vue.

Syntaxe

CTRL+C pour copier, CTRL+V pour coller
1
SELECT ... FROM 
2
(SELECT ... 
3
FROM ... 
4
WHERE ...) 
5
WHERE ...
SELECT ... FROM 
(SELECT ... 
FROM ... 
WHERE ...) 
WHERE ...

RemarqueSous-sous requête

Il est possible d'imbriquer successivement plusieurs sous-requêtes.

CTRL+C pour copier, CTRL+V pour coller
1
SELECT ... FROM 
2
(SELECT ... FROM 
3
  (SELECT... 
4
  FROM ...
5
  WHERE)
6
WHERE ...) 
7
WHERE ...
SELECT ... FROM 
(SELECT ... FROM 
  (SELECT... 
  FROM ...
  WHERE)
WHERE ...) 
WHERE ...

SyntaxeJointure de sous-requêtes

Il est possible de faire le produit ou la jointure de sous-requêtes.

CTRL+C pour copier, CTRL+V pour coller
1
SELECT ... FROM 
2
(SELECT ... FROM 
3
WHERE...) R1,
4
(SELECT ... FROM 
5
WHERE...) R2
6
WHERE R1... = R2...
SELECT ... FROM 
(SELECT ... FROM 
WHERE...) R1,
(SELECT ... FROM 
WHERE...) R2
WHERE R1... = R2...

Méthode

Cette extension est particulièrement utile pour les calculs d’agrégat après filtrage ou pour enchaîner les calculs d’agrégat (par exemple pour faire la moyenne de comptage après regroupement).

ExempleEnchaînement de calculs d'aggrégat

CTRL+C pour copier, CTRL+V pour coller
1
SELECT AVG(c)
2
FROM (SELECT COUNT(b) AS c FROM t GROUP BY a)
SELECT AVG(c)
FROM (SELECT COUNT(b) AS c FROM t GROUP BY a)

ExempleCalcul de la moyenne des ventes par jour de la semaine

CTRL+C pour copier, CTRL+V pour coller
1
SELECT AVG(q) FROM
2
(SELECT jds AS jds, COUNT(*) AS q
3
FROM ventes v
4
GROUP BY jds)
SELECT AVG(q) FROM
(SELECT jds AS jds, COUNT(*) AS q
FROM ventes v
GROUP BY jds)