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

Langage SQL Discussion :

ANY, ALL, MIN, MAX


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut ANY, ALL, MIN, MAX
    Bonjour,

    j'ai juste une petite question syntaxique.

    Je sais que l'on peut "remplacer" ALL par MAX:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ENOM, SAL FROM EMP
                  WHERE SAL> ALL (SELECT SAL
                              FROM EMP
                              WHERE PROF = 'INGENIEUR');
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ENOM, SAL FROM EMP
                  WHERE SAL> (SELECT MAX(SAL)
                              FROM EMP
                              WHERE PROF = 'INGENIEUR');
    De même, est-ce la même chose de "remplacer" ANY par MIN?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ENOM, SAL FROM EMP
                  WHERE SAL> ANY (SELECT SAL
                              FROM EMP
                              WHERE PROF = 'INGENIEUR');
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ENOM, SAL FROM EMP
                  WHERE SAL> (SELECT MIN(SAL)
                              FROM EMP
                              WHERE PROF = 'INGENIEUR');
    Merci par avance,
    John

  2. #2
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 327
    Points
    4 327
    Par défaut
    Bonjour,

    l'important n'est pas de savoir s'il y a des équivalences dans les résultats des requêtes, mais de les comprendre.

    Lit bien les requêtes et tu comprendra que au même titre que si on est plus grand que le maximum, alors on est supérieur a tous, si on est supérieur au plus faible, on est supérieur a au moins un ...

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par kazou Voir le message
    Bonjour,

    l'important n'est pas de savoir s'il y a des équivalences dans les résultats des requêtes, mais de les comprendre.

    Lit bien les requêtes et tu comprendra que au même titre que si on est plus grand que le maximum, alors on est supérieur a tous, si on est supérieur au plus faible, on est supérieur a au moins un ...
    merci, c'est ce que je désirais savoir. Je comprenais bien la première équivalence, mais le ANY me posant problème, je voulais savoir s'il avait le même sens que MIN.

    Merci beaucoup!

    John

  4. #4
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 327
    Points
    4 327
    Par défaut
    ANY n'as en aucun cas le même sens que MIN, tout comme ALL n'as pas le même sens que MAX.

    Ils peuvent seulement donner des résultats équivalents si ils sont utilisés d'une certaine manière.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2008
    Messages : 207
    Points : 114
    Points
    114
    Par défaut
    Citation Envoyé par kazou Voir le message
    ANY n'as en aucun cas le même sens que MIN, tout comme ALL n'as pas le même sens que MAX.

    Ils peuvent seulement donner des résultats équivalents si ils sont utilisés d'une certaine manière.
    oui, bien sûr, ce que je voulais dire, vous m'avez compris, est que mes équivalences de formules sont correctes. Je voulais savoir si mes deux formules avec ANY et MIN donnait le même résultat.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Non, pas d'équivalence !

    Démonstration...

    Voici deux tables simples contenant 3 lignes chacunes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE T_ALLANY_AA1 (C1 INT)
     
    INSERT INTO T_ALLANY_AA1 VALUES (1)
    INSERT INTO T_ALLANY_AA1 VALUES (2)
    INSERT INTO T_ALLANY_AA1 VALUES (3)
     
    CREATE TABLE T_ALLANY_AA2 (C2 INT)
     
    INSERT INTO T_ALLANY_AA2 VALUES (4)
    INSERT INTO T_ALLANY_AA2 VALUES (5)
    INSERT INTO T_ALLANY_AA2 VALUES (6)
    A priori les deux requêtes suivantes donnent le même résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT C2 FROM T_ALLANY_AA2
                  WHERE C2 > ALL (SELECT C1
                                   FROM   T_ALLANY_AA1)
     
    C2          
    ----------- 
    4
    5
    6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT C2 FROM T_ALLANY_AA2
                  WHERE C2 > (SELECT MAX(C1)
                               FROM   T_ALLANY_AA1)
     
    C2          
    ----------- 
    4
    5
    6
    Rajoutons une petite ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO T_ALLANY_AA1 VALUES (NULL)
    Rejouons nos requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT C2 FROM T_ALLANY_AA2
                  WHERE C2 > ALL (SELECT C1
                                   FROM   T_ALLANY_AA1)
     
    C2          
    -----------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT C2 FROM T_ALLANY_AA2
                  WHERE C2 > (SELECT MAX(C1)
                               FROM   T_ALLANY_AA1)
     
    C2          
    ----------- 
    4
    5
    6
    Patatras... et CQFD !

    A +

  7. #7
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Si je comprends bien la démonstration, on ne peut pas être supérieur à NULL parce que NULL n'est pas une valeur mais une absence de valeur ?

  8. #8
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 327
    Points
    4 327
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Si je comprends bien la démonstration, on ne peut pas être supérieur à NULL parce que NULL n'est pas une valeur mais une absence de valeur ?
    En réalité NULL n'est pas une valeur mais un marqueur qui signifie que la valeur est inconnue.
    Certaines personnes affirment à tort que NULL désigne une abscence de valeur (moi y compris par abus de langage).

    Je m'explique, prenons l'exemple d'une table telle que celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE MEMBRE (
    id INT NOT NULL,
    prenom VARCHAR(50) NOT NULL,
    nom VARCHAR(50) NOT NULL,
    dateNaissance DATE NULL
    );
    Ici la date de naissance peut être NULL, hors il est totalement faux de considérer qu'une personne ne peut avoir de date de naissance, elle est simplement inconnu du système. Cette logique mêne à avoir des opérateurs logique retournant trois valeurs possibles : true, false, unknown.
    En effet quand une des deux valeur est NULL, l'opération est impossible a évaluer, on ne sais donc pas si on dois retourner true ou false, alors on retourne unknown, cependant les SGBD n'implémente pas forcément cette logique a trois état.
    Un article de Frédéric explique cette manière de penser, il explique très bien l'utilisation et le rôle du marqueur NULL.

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

Discussions similaires

  1. Algorithme Min-Max appliqué au jeu Puissance 4 en C .
    Par hebmaster dans le forum Intelligence artificielle
    Réponses: 17
    Dernier message: 29/10/2012, 08h33
  2. probleme Algo Min Max
    Par ishikawa dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 20/04/2007, 11h02
  3. Fonction d'évaluation d'un jeu de dames utilisant l'algorithme du min/max
    Par elron8 dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 31/01/2007, 12h04
  4. [C++.NET] Valeurs min/max dans une TextBox
    Par raboin dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 06/04/2006, 18h15
  5. Emuler un min/max-width ou un min/max-height
    Par Perceval dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/09/2005, 19h43

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