SQL
SQL
CURRENT_DATE() / YEAR(fecha):
SELECT e.nombre, (CURRENT_DATE() - e.contrato), YEAR(CURRENT_DATE) - e.edad
FROM empleados e
MONTH(fecha):
SELECT *
FROM pedidos
WHERE MONTH(pedidos.fechapedido) = 3
TEMA 1:
La función MONTH() devuelve el mes de una fecha
La función YEAR() devuelve el año de una fecha
TEMA 2:
ORDER BY:
Podemos indicar la columna por la que queremos ordenar utilizando su nombre de columna
(nbcolumna) o utilizando su número de orden que ocupa en la lista de selección
(Nºcolumna).
Ejemplo:
SELECT nombre, oficina, contrato
FROM empleados
ORDER BY oficina
es equivalente a
DESC/ ASC:
Si queremos podemos alterar ese orden utilizando la cláusula DESC (DESCendente), en
este caso el orden será el inverso al ASC.
Ejemplos:
SELECT nombre, numemp, contrato
FROM empleados
ORDER BY contrato DESC
La cláusula DESC o ASC se puede indicar para cada columna y así utilizar una ordenación
distinta para cada columna.
DISTINCT / ALL:
Al incluir la cláusula DISTINCT en la SELECT, se eliminan del resultado las repeticiones de
filas. Si por el contrario queremos que aparezcan todas las filas incluidas las duplicadas,
podemos incluir la cláusula ALL o nada, ya que ALL es el valor que SQL asume por defecto.
Lista los códigos de los directores de las oficinas. El director 108 aparece en cuatro oficinas,
por lo tanto aparecerá cuatro veces en el resultado de la consulta.
En este caso el valor 108 aparecerá una sola vez ya que le decimos que liste los distintos
valores de directores.
TOP:
La cláusula TOP permite sacar las n primeras filas de la tabla origen. No elige entre valores
iguales, si pido los 25 primeros valores pero el que hace 26 es el mismo valor que el 25,
entonces devolverá 26 registros en vez de 25 (o los que sea).
SELECT TOP 3 numemp, nombre
FROM empleado
ORDER BY contrato
TOP n PERCENT:
SELECT TOP 20 PERCENT nombre
FROM empleado
ORDER BY contrato
Lista el nombre de los empleados ordenándolos por fecha de contrato, sacando únicamente
un 20% del total de empleados. Como tenemos 10 empleados, sacará los dos primeros, si
tuviésemos 100 empleados sacaría los 20 primeros.
WHERE:
SELECT nombre
FROM empleados
WHERE oficina = 12 AND edad > 30
Lista el nombre de los empleados de la oficina 12 que tengan más de 30 años. (oficina igual
a 12 y edad mayor que 30).
Lista los empleados contratados antes del año 88 (cuya fecha de contrato sea anterior al 1
de enero de 1988).
¡¡Ojo!!, las fechas entre almohadillas # # deben estar con el formato mes,día,año aunque
tengamos definido otro formato para nuestras fechas.
BETWEEN:
Examina si el valor de la expresión está comprendido entre los dos valores definidos por
exp1 y exp2.
OR:
SELECT numemp, nombre
FROM empleados
WHERE (oficina = 12) OR (oficina = 14) OR (oficina = 16)
Lista los empleados asignados a alguna oficina (los que tienen un valor en la columna
oficina).
LIKE:
Se utiliza cuando queremos utilizar caracteres comodines para formar el valor con el
comparar.
Lista los empleados cuyo nombre empiece por Luis (Luis seguido de cero o más
caracteres).
Lista los empleados cuyo nombre contiene Luis, en este caso también saldría los
empleados José Luis (cero o más caracteres seguidos de LUIS y seguido de cero o más
caracteres).
Lista los empleados cuyo nombre contenga una a como tercera letra (dos caracteres, la
letra a, y cero o más caracteres.
Caracteres:
? o bien _ (subrayado)/P> Un car�cter cualquiera
TEMA 3:
UNION:
Elimina duplicados: Por defecto, UNION elimina filas duplicadas en el resultado combinado.
Estructura de columnas: Las consultas deben tener el mismo número de columnas y las
columnas correspondientes deben tener tipos de datos compatibles.
UNION ALL:
Búsqueda más rápida. Usar si no importa que salgan consultas repetidas.
PRODUCTO CARTESIANO:
SELECT *
FROM pedidos,clientes
WHERE pedidos.clie=clientes.numclie
INNER JOIN:
Devuelve solo las filas que tienen coincidencias en ambas tablas.
Si no hay coincidencias entre las tablas, la fila no aparece en el resultado.
Pueden ser las dos la misma tabla, en este caso es obligatorio definir al menos un alias de
tabla.
SELECT columnas
FROM tabla1
INNER JOIN tabla2
ON tabla1.columna = tabla2.columna;
Se pueden definir varias condiciones de emparejamiento unidas por los operadores AND y
OR poniendo cada condición entre paréntesis. Ejemplo:
SELECT *
FROM pedidos INNER JOIN productos ON (pedidos.fab = productos.idfab) AND
(pedidos.producto = productos.idproducto)
| nombre | departamento |
|------------|-------------------|
| Ana | Ventas |
| Luis | Recursos Humanos |
| Carla | NULL |
TEMA 4:
Consultas de Resumen:
SUM() Suma
AVG() Media
MIN() Minimo
MAX() Maximo
COUNT() Contador
SELECT SUM(ventas)
FROM oficinas
Queremos obtener el importe total de ventas de todos los empleados y el mayor objetivo de
las oficinas asignadas a los empleados:
Se forma un grupo para cada oficina, con las filas de la oficina, y la suma se calcula sobre
las filas de cada grupo.
La consulta quedaría mejor incluyendo en la lista de selección la oficina para saber a qué
oficina corresponde la suma de ventas:
SELECT oficina,SUM(ventas)
FROM repventas
GROUP BY oficina
HAVING:
La cláusula HAVING nos permite seleccionar filas de la tabla resultante de una consulta de
resumen.
SELECT oficina
FROM empleados
GROUP BY oficina
HAVING AVG(ventas) > 500000
TEMA 5:
Subconsultas:
SELECT numemp, nombre
FROM empleados
WHERE numemp = (SELECT rep FROM pedidos WHERE clie = (SELECT numclie FROM
clientes WHERE nombre = 'Julia Antequera'))
ANY (alguno):
SELECT oficina, ciudad
FROM oficinas
WHERE objetivo > ANY (SELECT SUM(cuota) FROM empleados GROUP BY oficina)
Lista las oficinas cuyo objetivo sea superior a alguna de las sumas obtenidas.
ALL (todos):
SELECT oficina, ciudad
FROM oficinas
WHERE objetivo > ALL (SELECT SUM(cuota) FROM empleados GROUP BY oficina)
En este caso se listan las oficinas cuyo objetivo sea superior a todas las sumas.
IN:
SELECT numemp, nombre, oficina
FROM empleados
WHERE oficina IN (SELECT oficina FROM oficinas WHERE region = 'este')
Con la subconsulta se obtiene la lista de los números de oficina del este y la consulta
principal obtiene los empleados cuyo número de oficina sea uno de los números de oficina
del este.
Por lo tanto lista los empleados de las oficinas del este.
NOT IN:
SELECT oficina, ciudad
FROM oficinas
WHERE oficina NOT IN (SELECT oficina FROM empleados WHERE oficina IS NOT NULL)
EXIST:
SELECT numemp, nombre, oficina
FROM empleados
WHERE EXISTS (SELECT * FROM oficinas WHERE region = 'este' AND empleados.oficina
= oficinas.oficina)
UPDATE:
UPDATE oficinas INNER JOIN empleados
ON oficinas.oficina = empleados.oficina
SET cuota=objetivo*0.01;
En este ejemplo queremos actualizar las cuotas de nuestros empleados de tal forma que la
cuota de un empleado sea el 1% del objetivo de su oficina.
—----------------------------------
Ejemplo: Queremos poner a cero las ventas de los empleados de la oficina 12
UPDATE empleados SET ventas = 0 WHERE oficina = 12;
Ejemplo: Queremos poner a cero el limite de credito de los clientes asignados a empleados
de la oficina 12.
UPDATE clientes SET limitecredito = 0
WHERE repclie IN (SELECT numemp FROM empleados WHERE oficina = 12);
—---------------------------------------
DELETE:
DELETE *
FROM pedidos
WHERE clie IN (SELECT numclie FROM clientes WHERE nombre = 'Julian López');
TEMA 7:
TEMA 8: