IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

SELECT dans les différentes parties du SELECT


Sujet :

SQL Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut 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 : 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 FROM : 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 WHERE : OK
    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 GROUP BY : KO (syntaxe)
    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 HAVING : OK
    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
    SELECT DANS ORDER BY : KO (exécution)
    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
    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?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    salut,
    parceque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select 'TABLE_TYPE' from dual)
    n´est pas le nom d´une colonne.

    Eric

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Lisez Using Subqueries ainsi que le SELECT et Expressions

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Citation Envoyé par jeffray03 Voir le message
    parceque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (select 'TABLE_TYPE' from dual)
    n´est pas le nom d´une colonne.
    Je suis un peu surpris : dans CAT il y a bien une colonne qui s'appelle TABLE_TYPE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    desc cat
    VIEW cat
     Name                                      Null?    Type                        
     ----------------------------------------- -------- ----------------------------
     TABLE_NAME                                NOT NULL VARCHAR2(30)                
     TABLE_TYPE                                         VARCHAR2(11)
    Si mon SELECT dans DUAL retourne une chaîne de caractères, celle-ci n'est pas convertie en nom de colonne par Oracle? Visiblement ce serait une explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select 'TABLE_TYPE' from dual;
    'TABLE_TYP
    ----------
    TABLE_TYPE
    1 row selected.
    mnitu, j'ai lu le lien sur les sous-requêtes mais celui sur le SELECT ça fait mal!
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    mnitu, j'ai lu le lien sur les sous-requêtes mais celui sur le SELECT ça fait mal!
    Oui je sais, mais limitez-vous aux seules parties qui vous intéresse.

    'TABLE_TYPE' <> TABLE_TYPE

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Citation Envoyé par mnitu
    'TABLE_TYPE' <> TABLE_TYPE
    Ahlala, je me suis fait avoir avec le fait que dans le résultat la chaîne de caractères n'est pas entourée de quotes... donc j'ai cru qu'elle pourrait être utilisée comme nom de colonne.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #7
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Je pense que c'est mieux de partir du lien Using subqueries et de bien noter les différences des différent types de sous-requêtes ainsi que leurs restrictions.

    Par exemple:
    Scalar subqueries, which return a single column value from a single row, are a valid form of expression. You can use scalar subquery expressions in most of the places where expr is called for in syntax. Refer to "Scalar Subquery Expressions" for more information.
    Cela dit en gros que "expr" dans la diagramme de syntaxe peut être remplacé par (Select col from tab where ...)

    Puis, dans Scalar Subquery Expressions
    Scalar subqueries are not valid expressions in the following places:

    •As default values for columns


    •As hash expressions for clusters


    •In the RETURNING clause of DML statements


    •As the basis of a function-based index


    •In CHECK constraints


    •In GROUP BY clauses

    •In statements that are unrelated to queries, such as CREATE PROFILE


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/01/2010, 09h41
  2. Réponses: 6
    Dernier message: 23/03/2009, 15h40
  3. Réponses: 2
    Dernier message: 07/08/2007, 19h48
  4. Alignement de variables dans les <option> d'un <select>
    Par Crowell dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 18/07/2007, 17h42
  5. Aberration dans les résultat d'un SELECT
    Par tpatrice2003 dans le forum Oracle
    Réponses: 1
    Dernier message: 13/06/2006, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo