Salta el contingut

Consultes senzilles - AND - OR - NOT

Ordenació de Dades

Les dades que provenen de la base de dades no tenen cap ordre.

Si volem rebre les dades ordenades per algun criteri haurem de demanar-ho explícitament.

La clàusula per demanar les dades ordenades és ORDER BY

Es pot ordenar per més d’una columna a la vegada.

En cas d’ordenar per més d’un criteri, el segon criteri es tindrà en compte entre les files en què tinguin idèntic el primer criteri d’ordenació.

L’ordenació tant pot ser de forma ascendent com de forma descendent.

La sintaxis és la següent:

ORDER BY <criteri1> [ASC|DESC], <criteri2> [ASC|DESC], ...

Exemple ORDER BY

SELECT DEPARTMENT_ID, JOB_ID, LAST_NAME
FROM employees
WHERE DEPARTMENT_ID IN(10,50)
ORDER BY DEPARTMENT_ID ASC, 
         JOB_ID,
         LAST_NAME DESC;
+---------------+-------------------+-----------------+
| DEPARTMENT_ID | JOB_ID            | LAST_NAME       |
+---------------+-------------------+-----------------+
|            10 | AD_ASST           | Whalen          |
|      ^     50 | ST_CLERK    ^     | Vargas          |
|     / \    50 | ST_CLERK   / \    | Rajs   \  3  /  |
|    /   \   50 | ST_CLERK  /   \   | Matos   \   /   |
|   /  1  \  50 | ST_CLERK /  2  \  | Davies   \ /    |
|            50 | ST_MAN            | Mourgos   V     |
+---------------+-------------------+-----------------+

BETWEEN ... AND ...

S’utilitza per a seleccionar dades segons un rang de valors.

Quan s'usa a la clàusula WHERE, la condició BETWEEN ... AND ... retorna el rang de valors entre els límits inferior i superior, incloent els límits.

Cal especificar sempre en primer cas el valor menor.

<camp> BETWEEN <valorInf> AND <valorSup>

En cas de negació utilitzarem la forma

<camp> NOT BETWEEN <valorInf> AND <valorSup>

Exemple BETWEEN ... AND ...

SELECT  EMPLOYEE_ID, LAST_NAME, SALARY
FROM    EMPLOYEES
WHERE   SALARY BETWEEN 3500 AND 5000;
+-------------+-----------+---------+
| EMPLOYEE_ID | LAST_NAME | SALARY  |
+-------------+-----------+---------+
|         107 | Lorentz   | 4200.00 |
|         141 | Rajs      | 3500.00 |
|         200 | Whalen    | 4400.00 |
+-------------+-----------+---------+

És equivalent a haver escrit la condició

WHERE SALARY >= 3500 AND SALARY <= 5000

IN

S’utilitza per a seleccionar dades segons uns valors discrets.

Equivaldria a utilitzar al conjunció OR diverses vegades.

<camp> IN (<valor1>, <valor2>, ...)

En cas de negació utilitzarem la forma

<camp> NOT IN (<valor1>, <valor2>, ...)

Exemple IN

SELECT  EMPLOYEE_ID, LAST_NAME, DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IN (10, 20, 60);
+-------------+-----------+---------------+
| EMPLOYEE_ID | LAST_NAME | DEPARTMENT_ID |
+-------------+-----------+---------------+
|         103 | Hunold    |            60 |
|         104 | Ernst     |            60 |
|         107 | Lorentz   |            60 |
|         200 | Whalen    |            10 |
|         201 | Hartstein |            20 |
|         202 | Fay       |            20 |
+-------------+-----------+---------------+

Seria equivalent a haver escrit la condició

WHERE DEPARTMENT_ID = 10 OR
      DEPARTMENT_ID = 20 OR DEPARTMENT_ID = 60

LIKE

S’utilitza per a seleccionar dades que segueixen un patró determinat.

S’usa només en cadenes de caràcters i permet fer cerques no d’igualtat sinó de com.

S’utilitzen 2 caràcters comodí:

  • % equival a zero o més caràcters qualssevol
  • _ equival a un caràcter qualsevol

Si volem cercar el caràcter % o _ cal posar una contrabarra al seu davant (caràcter d’escape).

Per exemple: que acabi en % caldrà indicar LIKE '%\%'

Exemples LIKE

-- Empleats amb Cognom que comença per A
SELECT  EMPLOYEE_ID, LAST_NAME, SALARY
FROM    EMPLOYEES
WHERE   LAST_NAME LIKE 'A%';
-- Empleats amb Cognom que acaba en A
SELECT  EMPLOYEE_ID, LAST_NAME, SALARY
FROM    EMPLOYEES
WHERE   LAST_NAME LIKE '%A';
-- Empleats amb Cognom que conté una A
SELECT  EMPLOYEE_ID, LAST_NAME, SALARY
FROM    EMPLOYEES
WHERE   LAST_NAME LIKE '%A%';
-- Empleats amb Cognom que conté un _
SELECT  EMPLOYEE_ID, LAST_NAME, SALARY
FROM    EMPLOYEES
WHERE   LAST_NAME LIKE '%\_%';

IS NULL / IS NOT NULL

Quan cerquem informació on un camp ha de ser NUL o no ha de ser NUL, mai utilitzarem els operadors = ni <> (!=)

Utilitzarem els operadors

  • IS NULL en comptes de = NULL que és incorrecte

  • IS NOT NULL en comptes de a <> NULL que és incorrecte

Exemples IS NULL / IS NOT NULL

SELECT  EMPLOYEE_ID, LAST_NAME, DEPARTMENT_ID
FROM    EMPLOYEES
WHERE   DEPARTMENT_ID IS NULL;
+-------------+-----------+---------------+
| EMPLOYEE_ID | LAST_NAME | DEPARTMENT_ID |
+-------------+-----------+---------------+
|         178 | Grant     |          NULL |
+-------------+-----------+---------------+
SELECT  EMPLOYEE_ID, LAST_NAME, COMMISSION_PCT
FROM    EMPLOYEES
WHERE   COMMISSION_PCT IS NOT NULL;
+-------------+-----------+---------------+
| EMPLOYEE_ID | LAST_NAME | DEPARTMENT_ID |
+-------------+-----------+---------------+
|         149 | Zlotkey   |          0.20 |
|         174 | Abel      |          0.30 |
|         176 | Taylor    |          0.20 |
|         178 | Grant     |          0.15 |