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 NULLen comptes de= NULLque és incorrecte -
IS NOT NULLen comptes dea <> NULLque é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 |