Ga naar hoofdinhoud

Logische operatoren

Er zijn drie logische operatoren waarmee je voorwaarden kunt stellen aan condities:

  • AND
  • OR
  • NOT

AND

Met AND moet aan alle voorwaarden worden voldaan om een resultaat te krijgen. Bij numerieke waarden hoef je geen enkele aanhalingstekens te gebruiken (department_id = 50) maar bij alfanumerieke velden gebruik je enkele aanhalingstekens (job_id = 'ST_CLERK').

SELECT last_name, department_id, salary
FROM employees
WHERE department_id = 50 AND job_id = 'ST_CLERK';
last_namedepartment_idsalary
Rajs503500
Davies503100
Matos502600
Vargas502500

Nog een voorbeeld met numerieke waarden in de WHERE. Gebruik geen aanhalingstekens.

SELECT last_name, department_id, salary
FROM employees
WHERE department_id > 50 AND salary > 12000;
last_namedepartment_idsalary
King9024000
Kochhar9017000
De Haan9017000

Datums moeten wel tussen enkele aanhalingstekens.

SELECT last_name, hire_date, job_id
FROM employees
WHERE hire_date > '1998-01-01' AND job_id LIKE 'SA%';
last_namehire_datejob_id
Zlotkey2000-01-29SA_MAN
Taylor1998-03-24SA_REP
Grant1999-05-24SA_REP

OR

Met OR moet aan één van de voorwaarden voldaan worden.

SELECT department_name, manager_id, location_id
FROM departments
WHERE location_id = 2500 OR manager_id = 124;
department_namemanager_idlocation_id
Shipping1241500
Sales1492500

NOT

Met NOT moet er juist niet aan een voorwaarde worden voldaan.

SELECT department_name, location_id
FROM departments
WHERE location_id NOT IN(1700,1800);
department_namelocation_id
Shipping1500
IT1400
Sales2500

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 (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%';
employee_raisedepartment_idfirst_name
0.060Bruce
0.050Kevin
0.050Trenna
0.050Curtis
0.050Randall
0.050Peter
0.020Michael
0.0110Shelley
  • AND komt voor 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 OR en worden alle werknemers getoond die een letter 's' in hun achternaam hebben.
VolgordeOperator
1rekenkundige operatoren zoals + - * /
2concatenatie (CONCAT)
3vergelijkingsoperatoren <, <=, >, >=, <>
4IS (NOT) NULL, LIKE, (NOT) IN
5(NOT) BETWEEN
6NOT
7AND
8OR

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

SELECT (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%';
employee_raisedepartment_idfirst_name
0.050Kevin
0.050Trenna
0.050Curtis
0.050Randall
0.050Peter
0.080Eleni
0.080Ellen
0.080Jonathon

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

SELECT (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%';
employee_raisedepartment_idfirst_name
0.050Kevin
0.050Trenna
0.050Curtis
0.050Randall
0.050Peter