jeudi 29 novembre 2012
Oracle SQL - L'importance de l'ordre de préséance
Ordre de préséance dans SQL
L'importance de l'ordre de préséance est le plus évident lorsque vous traitez avec le groupement des conditions. Ceci est mieux illustré dans les instructions select comme ceci:
SELECT empno, Payrate, dept_code
DE emp_work
OÙ dept_code = 'Ventes'
ET Payrate = 18
OU Payrate = 20;
L'utilisateur essaie d'interroger pour obtenir des informations sur l'ensemble des employés du service des ventes qui ont payrates de 18 ou 20. Cependant, les résultats réels de cette requête va y avoir TOUS les employés du service des ventes avec un Payrate de 18 ans et tout employé d'un Payrate de 20 ans.
C'est parce que Oracle évalue le 'ET' abord en raison de sa priorité plus élevée.
Quand Oracle se penche sur cette requête le voit:
OÙ dept_code = 'Ventes'
ET Payrate = 18
et évalue en même temps les conditions du premier.
Oracle va rechercher les dossiers des employés lorsque l'employé est dans le département des ventes et a une Payrate
de 18 ans.
ALORS Oracle regarde l'opérateur OR, étant donné que les deux premières conditions ont été regroupées par l'opérateur ET, tous Oracle a laissé est la suivante:
OU Payrate = 20;
d'évaluer, de sorte que les contrôles d'Oracle pour tous les salariés ayant un Payrate de 20 ans.
NOTE: Les employés d'un dollar 20 un Payrate heure ne sont pas tous dans le département des ventes.
Depuis ce que l'utilisateur voulait voir, c'était les employés du service des ventes, et avec une Payrate de 18 ou 20 ans, nous voulons Oracle à regarder l'opérateur avant de regarder l'ET.
Vous pouvez mettre le OU-dessus de l'ET si vous voulez, mais il ne va pas aider. Oracle va encore à l'opérateur AND abord parce que c'est plus de l'ordre de préséance. Ce que nous devons faire, c'est en quelque sorte élever ou plus et d'une manière que même l'ordinateur peut comprendre. La façon dont nous y parvenir est en entourant les conditions OR avec les parenthèses ().
Parenthèses sont plus élevés sur l'ordre de préséance tableau que ET ou OU. Rien à l'intérieur des parenthèses sera évaluée en premier. Lorsque vous utilisez des parenthèses pour regrouper les états que vous voulez évalués en même temps (comme le OU les conditions de cet exemple), il est appelé regroupement.
Par exemple, si l'on ajoute les parenthèses autour des conditions ou de notre exemple précédent:
SELECT empno, Payrate, dept_code
DE emp_work
OÙ dept_code = 'Ventes'
ET (Payrate = 18
OU Payrate = 20);
Les conditions Payrate sont regroupés et évalués d'abord en raison de la parenthèse autour d'eux. Puis Oracle regarde la déclaration ET.
Que nous nous retrouvons avec une sélection qui demande la liste de tous les employés qui ont une Payrate de 18 ou 20, puis vérifie pour voir qui d'entre eux est dans le département des ventes, ce qui nous donnera les résultats que nous recherchions pour.
Regroupement n'est pas souvent nécessaire, en particulier en termes simples sélections.
Toutefois, si jamais vous trouvez que vous recevez des informations plus ou différent de celui que vous attendiez d'une requête avec plusieurs conditions, c'est une bonne estimation de ce regroupement permettra de vous donner les résultats que vous recherchez l'origine.
Priorité des opérateurs
Priorité définit l'ordre dans lequel Oracle utilise lors de l'évaluation des opérateurs différents dans la même expression. Chaque opérateur a une priorité prédéfinie. Oracle évalue les opérateurs avec une priorité plus élevée avant qu'il évalue les opérateurs avec une plus faible priorité. Les opérateurs ayant la même priorité sont évaluées de gauche à droite.
* Tableau partiel * des opérateurs afin de SQL priorité
& - Utilisé comme préfixe de paramètre
() - Définition d'opérateur normal priorité
NON - Inversion du résultat d'une expression
ET - Exprimer vrai si les deux conditions sont vraies
OU - Exprimer Vrai si la condition est vraie...
Inscription à :
Publier les commentaires (Atom)
Aucun commentaire:
Enregistrer un commentaire