Bonjour,
Je fais mumuse avec SQL en ce moment et je me suis dit : tiens, est-il possible de mettre des SELECT dans les différentes clauses d'un SELECT, comme ça, pour satisfaire ma curiosité.
Voici mes tests et je vois que souvent c'est OK mais c'est KO pour le Group by (pb de syntaxe) et dans le Order by (pb de cohérence?).
SELECT DANS SELECT : OK
SELECT DANS FROM : OK
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 select table_name, (select count(*) from cat) from cat where rownum < 11 order by table_type; TABLE_NAME (SELECTCOUNT(*)FROMCAT) ------------------------------ -------------------------------------------------------------------------- AAPT_ACTION_QUEUE_CLIENT_APP 1458 ACCMINDEX 1458 ACCOUNTING_BALANCE 1458 ACCOUNTING_ENTRY 1458 ACCOUNT_MANAGER_PROFIL 1458 ACCOUNTING_ROOT 1458
SELECT DANS WHERE : OK
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select table_name from (select table_name from cat) ; TABLE_NAME ------------------------------ AAPT_ACTION_QUEUE_CLIENT_APP ACCMINDEX ACCOUNTING_BALANCE ACCOUNTING_ENTRY ACCOUNTING_ENTRY_HISTO
SELECT DANS GROUP BY : KO (syntaxe)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select table_name from cat where rownum = (select count(*) from dual) order by table_type; TABLE_NAME ------------------------------ AAPT_ACTION_QUEUE_CLIENT_APP
SELECT DANS HAVING : OK
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select table_type from cat where rownum < 50 group by (select 'TABLE_TYPE' from dual) * Error at line 1 ORA-22818: expressions de sous-requête non autorisées ici
SELECT DANS ORDER BY : KO (exécution)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select table_type, count(*) from cat group by TABLE_TYPE having count(*) < (select count(*) from cat)/10; TABLE_TYPE COUNT(*) ----------- ---------- VIEW 43 SYNONYM 5
Estc-e que vous pourriez me dire pourquoi c'est interdit dans le Group by et pourquoi le résultat du SELECT dans le Order by n'est pas pris en compte?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 select table_type, count(*) from cat group by TABLE_TYPE order by (select 2 from dual); TABLE_TYPE COUNT(*) ----------- ---------- TABLE 1236 SEQUENCE 174 SYNONYM 5 VIEW 43
Partager