Voorrang

Als query's ingewikkeld worden, kan het probleem van de volgorde optreden, oftewel de vraag: welke operator heeft precedentie (voorrang) op de onderste regel van de query?

 

SELECT CONCAT(last_name, ' ', salary * 1.05) employee_raise, department_id, first_name

FROM employees

WHERE department_id IN(50,80) AND first_name LIKE 'C%' OR last_name LIKE '%S%';

 

clip0070

 

De AND komt voor de OR. Dus eerst worden alle werknemers geselecteerd die werken op afdeling 50 of 80 EN die een voornaam hebben die begint met een C. Dat is alleen maar Curtis.

Daarna komt de OR en worden alle werknemers getoond die een letter 's' in hun achternaam hebben.

 

De regels van de volgorde zijn als volgt:

 

Volgorde

Operator

1

rekenkundige operatoren zoals + - * /

2

concatenatie (CONCAT)

3

vergelijkingsoperatoren <, <=, >, >=, <>

4

IS (NOT) NULL, LIKE, (NOT) IN

5

(NOT) BETWEEN

6

NOT

7

AND

8

OR

 

 

Stel dat je in de vorige query de OR en de AND omdraait.

 

SELECT CONCAT(last_name, ' ', salary * 1.05) employee_raise, department_id, first_name

FROM employees

WHERE department_id IN(50,80) OR first_name LIKE 'C%' AND last_name LIKE '%S%';

 

clip0071

 

 

De beste manier om zeker te zijn van je resultaat is het gebruik van haakjes in de WHERE.

 

SELECT CONCAT(last_name, ' ', salary * 1.05) employee_raise, department_id, first_name

FROM employees

WHERE (department_id IN(50,80) OR first_name LIKE 'C%') AND last_name LIKE '%S%';

 

clip0072