SELECT dans les différentes parties du SELECT
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
Code:
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 FROM : OK
Code:
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 WHERE : OK
Code:
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 GROUP BY : KO (syntaxe)
Code:
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 HAVING : OK
Code:
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 |
SELECT DANS ORDER BY : KO (exécution)
Code:
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 |
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?