28

I always use brackets in sql queries. But I have example:

DELETE FROM prog 
WHERE prog_start >= $1 AND prog_start < $2
   OR prog_end > $1 AND prog_end <= $2

Is it equal to :

DELETE FROM prog
WHERE ( prog_start >= $1 AND prog_start < $2 )
   OR ( prog_end > $1 AND prog_end <= $2 ) 

or not ?

Evan Carroll
  • 78,363
  • 46
  • 261
  • 468
Bdfy
  • 23,141
  • 55
  • 131
  • 179

2 Answers2

37

In SQL the AND operator takes "precedence" over OR operator. PostgreSQL adheres to the spec here. You can the exact precedence in PostgreSQL in the docs Lexical Structure: Operator Precedence.

So in your case, the result will be the same. However, it's much easier, and cleaner to simply use the parentheses.

Evan Carroll
  • 78,363
  • 46
  • 261
  • 468
Raphaël Althaus
  • 59,727
  • 6
  • 96
  • 122
1

It goes as per the Operator Precendence http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615.

To form a complex condition it's always better to parenthesis your conditions.

Rahul
  • 76,197
  • 13
  • 71
  • 125