Web.SQL.Recuperación de Datos.
Manipulación de Datos.
Para realizar las consulas se utiliza la instrucción SELECT. Su sintáxis es la siguiente:
select * from personas; Esto viene a decir algo así como “muestrame todos los campos(*) de la tabla personas (from personas).select nombre, apellidos, edad from personas; Se puede mostrar sólo los campos que queramos, pero separándolos por comas.select distinct nombre, apellidos from personas; La instrucción distinct sirve para no mostrar valores repetidos, es decir, si existen columnas cuyo datos se repitan no los mostrará.select nombre, apellidos from personas order by apellidos; Ordenar los resultados por el campo apellidos. Por defecto se ordena de forma ascendente.select nombre asc, apellidos desc from personas; Se puede especificar el orden en distintos campos, en este caso mostramos la lista de resultados ordenados por nombre de forma ascendente y los apellidos de forma descendente pero sin perder el orden de la primera columna.
Condiciones.
Claúsula Where. Esta instrucción sirve para especificar una condición a la hora de mostrar resultados.
select * from personas where ciudad=”badajoz”; Mostramos todos los campos de la tabla personas cuya ciudad pertenezca a badajoz.
Vamos a ver los operadores que se pueden utilizar con where:
- =. Igual a.
- <>. Distinto a.
- >. Mayor a.
- <. Menor a.
- >=. Mayor e igual a.
- <=. Menor e igual a.
- AND, OR, NOT. Son operadores que se usan para condiciones compuestas.
- LIMIT. Limita el número de registros que se van a mostrar.
- IN. Especifica múltiples valores para una columna.
- BETWEEN. Utiliza para buscar en rangos de valores.
- LIKE. Se utiliza para las búsquedas de aproximación.
AND, OR, NOT.
Vamos a ver algunos ejemplos de condiciones compuestas:
select * from personas where edad>=20 AND ciudad=”badajoz”; Estamos buscando personas que sea de mayores de 19 y que sean de la ciudad de badajoz.select * from personas where edad>=20 OR ciudad=”badajoz”; Estamos buscando personas que sean mayores de 19 o que sean de badajoz. La diferencia entre en el AND y OR, es que si usamos AND deben cumplirse las dos condiciones a la vez siempre. Si se usa OR va a mostrar cuando se cumpla
una de las dos o las dos a la vez:
- Personas sean mayores de 19, sean o no de badajoz, ya que se cumple la primera condición.
- Personas que sean de Badajoz, sean o no de 19, ya que se cumple la segunda condición.
- Personas que sean mayores de 19 y que sean de Badajoz.
- No mostrará aquellas personas que sean menores de 20 y que no sean de Badajoz.
select * from personas where not edad<18; En este ejemplo niega la condición, es decir, muestra aquellas personas que no son menores de 18, o sea igual o mayores de 18.
VALORES NULOS.
También se puede preguntar si un campo es nulo o no de la siguiente forma:
select * from personas where edad IS NULL; Muestra todos los campos de la tabla persona cuya edad es nula, es decir, no tiene valor.select * from personas where edad IS NOT NULL; Muestra todos los campos de la tabla persona cuya edad tenga cualquier valor, es decir, que no sea nulo.
LIMIT.
select * from personas where edad>17 LIMIT 5; Con este ejemplo lo que hacemos es mostrar todos los campos de la tabla personas cuya edad sea mayor o gual de 18, pero sólo mostrándolo los 5 primeros registros.
IN.
Se utiliza cuando queremos buscar varios valores a la vez. Es como una especia de condicional compuesta. Un ejemplo:
select * from personas pais IN (“Francia”,”Alemania”,”Irlanda”); En este ejemplo muestra todos los campos de la tabla personas cuyos paises sean Francia, Alemania e Irlanda.select * from personas pais NOT IN (“Francia”,”Alemania”,”Irlanda”); También se puede negar usando la cláusula NOT, de esta forma mostraría los demás paises a excepción de Francia, Alemania e Irlanda.
BETWEEN.
Se utiliza para buscar rango de valores. Un ejemplo:
select * from personas where edad BETWEEN 18 AND 25; Muestra todos los campos de la tabla personas cuya edad esté comprendida entre 18 y 25.select * from personas where (edad BETWEEN 18 AND 25) AND NOT pais IN(“ España”, “Alemania”, ”Belgica”); Podemos mezclar ya muchas cosas y complicar un poco más la consulta. En este ejemplo quiero mostrar todos los campos de la tabla personas, cuya edad esté comprendida entre 18 y 25 y al vez que no sean de España, Alemania y Bélgica.
LIKE.
Búsqueda por patrones o por aproximación. Un ejemplo:
SELECT * FROM persona
WHERE apellidos LIKE ‘a%’; Este ejemplo lo que hace es mostrar todos los campos de la tabla personas cuyos apellidos comiencen por a.
Veamos algunas combinaciones:
- ‘a%’. Que comience por la letra ‘a’.
- ‘%a’. Que termine por la letra ‘a’.
- ‘%or%’. Que contenga las letras ‘or’.
- ‘_r%’. Que contenga la letra ‘r’ en la segunda posición.
- ‘a_%_%’. Que empiece por la letra ‘a’ y contenga al menos 3 caracteres.
- ‘a%o’. Que empiece por la letra ‘a’ y termine la por la letra ‘o’.
UNIÓN. Se utiliza para mostrar los datos de dos tablas distintas. Como requisitos deben tener ambas las mismas columnas y además ser de tipo de datos similar, deben estar siempre en el mismo orden. Un ejemplo:
SELECT nombre, apellidos, ciudad, pais FROM profesores
WHERE pais=’España’
UNION
SELECT nombre, apellidos, ciudad, pais FROM alumnos
WHERE pais=’España’;
- Union por defecto no muestra los registros que están duplicados, si por alguna circunstancia necesitaramos que los mostrara usaríamos UNION ALL.
GROUP BY. Sirve para agrupar registros de forma que evita los duplicados. Esta instrucción normalmente se utiliza con funciones de agrupamiento, como son por ejemplo COUNT, MAX, MIN, SUM, AVG ..etc. Un ejemplo:
SELECT COUNT(id) as Cuenta, pais
FROM personas
GROUP BY pais
ORDER BY COUNT(id) DESC;
- En este ejemplo cuenta los distintos paises que hay, sin duplicados, de forma que agrupa todas las ciudades duplicadas y muestra un solo registro por país.
FUNCIONES. Existen muchas funciones prediseñadas en SQL, aquí algunos ejemplos:
- min(); Valor mínimo.
- max(); Valor máximo.
- count(); Cuenta los distintos valores.
- avg(); Hace una media de los distintos valores.
- sum(); Hace una suma.
HAVING. Esta instrucción sirve para usar condiciones en funciones agregadas, ya que con el Where no lo permite. Un ejemplo:
SELECT COUNT(id), pais
FROM personas
GROUP BY pais
HAVING COUNT(id) > 5
ORDER BY COUNT(id) DESC;
SUBCONSULTAS. Son, como su nombre bien dice, consultas dentro de otras consultas. Con esto podemos realizar consultas más complejas cuyos resultados dependen de otra consulta. Un ejemplo:
Tenemos una pequeña tabla de empleados donde vamos almacenar; id, nombre,edad,dirección y el salario. Queremos mostrar sólo aquellos empleados cuyo salario sea mayor de 4500:
SELECT * FROM empleados
WHERE id IN (
SELECT id FROM empleados
WHERE salario>4500);
Para realizar consultas podemos usar todo lo que hemos aprendido, incluso con los select, update y delete:
UPDATE empleados
SET salario=salario*0.30
WHERE edad IN(
SELECT edad FROM empleados WHERE edad>=29);
EXIST. Sirve para averiguar si existe algún registro en una subconsulta. Un ejemplo:
SELECT *
FROM personas
WHERE EXISTS (SELECT * FROM pedidos WHERE id= pedidos.personaid AND );
En este ejemplo muestro todos los campos de la tabla personas si existe algún pedido en la tabla pedidos de esa persona.
ANY/ALL. Esta instrucción se utiliza con la cláusula Where y Having. El operador ANY devuelva verdadero cuando se cumple la condición algún registro de la subconsulta. El operador ALL devuelve verdadero cuando todos los registros de la subconsulta cumple la condición. Un ejemplo:
SELECT *
FROM personas
WHERE id= ANY (SELECT personaid FROM pedidos WHERE cantidad> 20);
En este ejemplo, da verdadero con sólo encontrarse con un registro que sea la cantidad mayor de 20.
SELECT *
FROM personas
WHERE id= ALL(SELECT personaid FROM pedidos WHERE cantidad> 20);
Si lo hiciéramos con la cláusula ALL, la diferencia está en que sólo sería verdadero si todos los registros cumplieran con la condición, es decir, que fueran mayores de 20.