2011-05-11 21 views
12

preguntaba si alguien sabe por qué se utilizan los paréntesis en este SQL: Por lo tanto, el formato es el siguiente:paréntesis SQL utilizan en una cláusula OR

nombre, la ubicación y el departamento de servicio de los empleados cuyo nombre comienza con A o B. (Una traducción aproximada del francés).

me respondió de la siguiente manera:

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%')) 

Básicamente, donde el pasado y se preocupa por el dónde, no podía simplemente prescindir de los paréntesis con el fin de tener el SQL seleccionar para mí los empleados con su nombre que comienza con una A o una B? ¿Qué diferencia hace el posicionamiento de un paréntesis de esa manera? Y ahy hay un doble uso de paréntesis? ¿O es priorizar el OR en la última cláusula, ya que un AND lo está precediendo?

+0

Olvidémonos de los asteriscos sobre el paréntesis ... es un error que hice en algún lugar aquí cuando publiqué la pregunta. – angela

+1

Los eliminé. –

+0

¡Gracias por las respuestas! Ayudó mucho – angela

Respuesta

19

Eche un vistazo al Operator Precedence en SQL Server (No lo ha especificado, pero me imagino que es el mismo para todos los RDBMS). Lo que esto significa es que los AND (sin paréntesis) se evalúan antes de las RUP.

Así, en su caso concreto, sin el paréntesis, las condiciones son:

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

O

  • employe.nom LIKE 'B%'
10

Lo usa para especificar la agrupación de la cláusula, no la prioridad. SQL no le permite especificar la prioridad, ya que el optimizador creará la mejor prioridad para usted.

AND() 

Tomarán las dos condiciones de OR en una sola declaración. Entonces, si alguno de ellos es verdadero, el AND también es verdadero. Los paréntesis internos no son necesarios, pero ayudan a visualizar la separación.

Sin los paréntesis externos permitiría cualquier cosa con la cláusula final como verdadera también.

0

Supongo que los * s están ahí para enfatizar algo, así que los ignoro por el momento. No dudes en corregirme si estoy equivocado.

Yo sugeriría hacer de esta manera:

(...) 
AND employe.nom REGEX '^[AB]' 

... o algo similar.

Me disculpo, pero la pregunta principal que hace sobre el paréntesis no es muy clara para mí.

1

Hay parenthes adicionales es. La regla en matemáticas es agregar el paréntesis para aclarar la lógica. En este caso, si elimina todos los paréntesis, obtendrá la respuesta incorrecta. Lo que tienes es un AND ((b) OR (c)). La eliminación de todos los paréntesis lo tomaría de (a OR b) AND (a OR c) a (a AND b) O c que es incorrecto.

Cuestiones relacionadas