LOOP [FROM] table_data [NODATERANGE] 
                      [WHERE where_clause[ {AND|OR} where_clause]] 
                      [[REVERSE_]SORTBY field_data
                      [ROW_COUNT $variable_name]
END_LOOP


where_clause is exactly as before, except that if you include it in brackets, you can put NOT in front to negate just that clause.

The original clause separator was the comma (,), which acted as an implicit AND. This is still perfectly valid, but you can now mix any combination of AND, OR and NOT, and by using brackets you can alter priorities.

By default, OR will be evaluated before AND. It is strongly recommended to put brackets around combinations to show the intended priority clearly. If you mix the comma and AND / OR / NOT (not recommended), everything between each comma will be treated as if it were inside brackets.


Example:

(Statement split over multiple physical lines for clarity only)

These commands will now execute if the congregation is your local one and the brother is not the one named. They will also execute if the talk number is 161 or higher (not less than or equal to 160).

LOOP FROM "Home Talks" 
           WHERE ("Congregation" IS "$LocalCong" AND “Brother” ISNOT “$strThisBrother”)
           OR (NOT “Talk Number” ISLESSOREQUAL “160”)
    (commands go inside LOOP)
END_LOOP