Salta el contingut

Consultes senzilles - AND - OR - NOT

Comparacions lògiques

En SQL podem posar més d’una condició a la directiva WHERE.

Aquestes condicions admeten els operadors:

  • AND: torna cert quan les dues condicions son certes

  • OR: torna cert quan una de les condicions és certa

  • NOT: torna cert quan la condició és falsa.

Operador AND

La següent consulta retorna les files que compleixen les dues condicions especificades a la clàusula WHERE.

Un exemple de l'ús de AND
SELECT LAST_NAME, DEPARTMENT_ID, SALARY
FROM employees
WHERE DEPARTMENT_ID > 50 AND SALARY > 12000;
+-----------+---------------+----------+
| LAST_NAME | DEPARTMENT_ID | SALARY   |
+-----------+---------------+----------+
| King      |            90 | 24000.00 |
| Kochhar   |            90 | 17000.00 |
| De Haan   |            90 | 17000.00 |
+-----------+---------------+----------+
Un altre exemple de l'ús de AND
SELECT LAST_NAME, HIRE_DATE, JOB_ID
FROM employees
WHERE HIRE_DATE > '1998-01-01' AND JOB_ID LIKE 'SA%';
+-----------+------------+--------+
| LAST_NAME | HIRE_DATE  | JOB_ID |
+-----------+------------+--------+
| Zlotkey   | 2000-01-29 | SA_MAN |
| Taylor    | 1998-03-24 | SA_REP |
| Grant     | 1999-05-24 | SA_REP |
+-----------+------------+--------+

Operador OR

La següent consulta retorna les files que compleixen qualsevol de les dues condicions especificades a la clàusula WHERE.

Un exemple de l'ús de OR
SELECT DEPARTMENT_NAME, MANAGER_ID, LOCATION_ID
FROM departments
WHERE LOCATION_ID = 2500 OR MANAGER_ID=124;
+-----------------+------------+-------------+
| DEPARTMENT_NAME | MANAGER_ID | LOCATION_ID |
+-----------------+------------+-------------+
| Shipping        |        124 |        1500 |
| Sales           |        149 |        2500 |
+-----------------+------------+-------------+

Operador NOT

La següent consulta retorna les files que no compleixen la condició especificada a la clàusula WHERE.

Un exemple de l'ús de NOT
SELECT DEPARTMENT_NAME, LOCATION_ID
FROM departments
WHERE LOCATION_ID NOT IN (1700,1800);
+-----------------+-------------+
| DEPARTMENT_NAME | LOCATION_ID |
+-----------------+-------------+
| Shipping        |        1500 |
| IT              |        1400 |
| Sales           |        2500 |
+-----------------+-------------+

Regles de prioritat

ORDRE OPERADORS
1 Aritmètics: * / %
2 Aritmètics: + -
3 Comparació < <= > >= = <>
4 IS [NOT] NULL, [NOT] LIKE, [NOT] IN
5 [NOT] BETWEEN
6 NOT
7 AND
8 OR

* Dos operadors de la mateixa prioritat s’avaluaran d’esquerra a dreta

Exemple de prioritat
SELECT CONCAT_WS(' ',LAST_NAME,
                     SALARY*1.05) AS "Nou Sou",
       DEPARTMENT_ID, FIRST_NAME
FROM employees
WHERE DEPARTMENT_ID IN(50,80) AND -- 1r AND 
      FIRST_NAME LIKE 'C%' OR -- 2n OR
      LAST_NAME LIKE '%z%'; 
+--------------------+---------------+------------+
| Nou Sou            | DEPARTMENT_ID | FIRST_NAME |
+--------------------+---------------+------------+
| Lorentz 4410.0000  |            60 | Diana      |
| Davies 3255.0000   |            50 | Curtis     |
| Zlotkey 11025.0000 |            80 | Eleni      |
| Gietz 8715.0000    |           110 | William    |
+--------------------+---------------+------------+

La condició s'avalua de la següent forma

WHERE (DEPARTMENT_ID IN(50,80) AND FIRST_NAME LIKE 'C%') OR
      LAST_NAME LIKE '%z%';