web-dev-qa-db-fra.com

Utilisation des parenthèses SQL dans une clause OR

Je me demandais si quelqu'un saurait pourquoi utilisons-nous les parenthèses dans ce SQL: Ainsi, le format se présente comme suit:

Nom, lieu et service du service des salariés dont le nom commence par A ou B. (Une traduction grossière du français).

J'ai répondu de la manière suivante:

SELECT service.nom_serv, localite.ville, localite.departemen
FROM service, localite, employe
WHERE service.code_loc=localite.code_loc
AND employe.service=service.code_serv
AND ((employe.nom LIKE 'A%') OR (employe.nom LIKE 'B%'))

Fondamentalement, en ce qui concerne le dernier ET pour le OERE, ne pourrais-je pas simplement me passer des parenthèses pour que le SQL sélectionne pour moi les employés dont le nom commence par un A ou un B? Quelle différence fait le positionnement d'une parenthèse de cette façon? Et ahy y a-t-il une double utilisation des parenthèses? Ou est-ce pour prioriser le OR dans la dernière clause, puisqu'un AND le précède?

18
angela

Jetez un œil à Operator Precedence dans SQL Server (Vous ne l'avez pas spécifié, mais j'imagine que c'est la même chose pour tous les SGBDR). Cela signifie que les ET (sans parenthèses) sont évalués avant1 lier plus étroitement que les OR.

Donc, dans votre cas particulier, sans les parenthèses, les conditions sont les suivantes:

  • employe.service=service.code_serv AND employe.nom LIKE 'A%'

OR

  • employe.nom LIKE 'B%'

1L'ordre d'évaluation n'est délibérément pas spécifié dans SQL, ce qui permet de nombreux réorganisations plus possibles que les langages qui garantissent une évaluation ordonnée de gauche à droite ou de priorité.

22

Vous l'utilisez pour spécifier le regroupement de la clause, pas la priorité. SQL ne vous permet pas de spécifier la priorité car l'optimiseur créera la meilleure priorité pour vous.

AND ()

Prend les deux conditions OR dans une seule instruction. Donc, si l'un ou l'autre est vrai, le AND l'est également. Les parenthèses internes ne sont pas nécessaires, mais aident à visualiser la séparation.

Sans les parenthèses extérieures, cela autoriserait également tout ce qui a la clause finale.

13
Dustin Laine

Il y a des parenthèses supplémentaires. La règle en mathématiques est d'ajouter la parenthèse pour clarifier la logique. Dans ce cas, si vous supprimez toutes les parenthèses, vous obtiendrez la mauvaise réponse. Ce que vous avez est un AND ((b) OR (c)). La suppression de toutes les parenthèses la retirerait de (a OR b) AND ( a OR c) à (a AND b) OR c qui est incorrect.

1
Dave