miércoles, 30 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a más de una tabla - Dos alias para una misma tabla en BDUOC (I)

Si pidiésemos los códigos y los apellidos de los empleados que ganan más que el empleado que tiene por código el número 5, haríamos lo siguiente:

SELECT el.codigo_empl, el.apellido_empl
FROM empleados el JOIN empleados e2 ON el.sueldo > e2.sueldo
WHERE e2.codigo_empl = 5;
Hemos tomado la tabla e2 para fijar la fila del empleado con código número 5, de modo que podamos comparar el sueldo de la tabla e1, que contiene a todos los empleados, con el sueldo de la tabla e2, que contiene sólo al empleado 5.
La respuesta a esta consulta sería:

martes, 29 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a más de una tabla -Ejemplo anterior con el SQL92 intermedio o completo

El ejemplo que hemos expuesto antes utilizando el SQL92 intermedio o completo sería:
SELECT p.codigo_proyecto, p.precio, c.nif, p.codigo_cliente, c.codigo_cli
FROM clientes c JOIN proyectos p ON c.codigo_cli = p.codigo_cliente
WHERE c.codigo_cli = 20;

obtendríamos el mismo resultado de antes.
La opción ON, además de expresar condiciones con la igualdad, en el caso de que las columnas que queramos vincular tengan nombres diferentes, nos ofrece la posibilidad de expresar condiciones con los demás operadores de comparación que no sean el de igualdad. Sería el equivalente a la operación que en álgebra relacional hemos denominado θ-combinación (θ-join).
También podemos utilizar una misma tabla dos veces con alias diferentes, para distinguirlas.

lunes, 28 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a más de una tabla - Ejemplo de alias en BDUOC (III)

La forma de expresar la combinación que acabamos de ver pertenece al SQL92 introductorio. Una forma alternativa de realizar la equicombinación anterior, utilizando el SQL92 intermedio o completo, sería la siguiente:
SELECT nombre_columnas_a_seleccionar
FROM tabla1 JOIN tabla2
{ON condiciones|USING (columna [, columna...])}
[WHERE condiciones];

domingo, 27 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a más de una tabla - Ejemplo de alias en BDUOC (II)

Notemos que en WHERE necesitamos expresar el vínculo que se establece entre las dos tablas, en este caso codigo_cli de clientes y codigo_cliente de proyectos. Expresado en operaciones del álgebra relacional, esto significa que hacemos una combinación en lugar de un producto cartesiano.
Fijémonos en que, al igual que en álgebra relacional, la operación que acabamos de hacer es una equicombinación (equi-join); por lo tanto, nos aparecen dos columnas idénticas: c.codigo_ cli y p.codigo_cliente.

sábado, 26 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a más de una tabla - Ejemplo de alias en BDUOC (I)

c podría ser el alias de la tabla clientes. De este modo, para indicar a qué tabla pertenece codigo_cli, sólo haría falta poner: c.codigo_cli.
Veamos cómo quedaría la consulta anterior expresada mediante alias, aunque en este ejemplo no serían necesarios, porque todas las columnas de las dos tablas tienen nombres diferentes.
Pediremos, además, las columnas c.codigo_cli y p.codigo_cliente.
SELECT p.codigo_proyecto, p.precio, c.nif, p.codigo_cliente, c.codigo_cli
FROM clientes c, proyectos p
WHERE c.codigo_cli = p.codigo_cliente AND c.codigo_cli = 20;

Entonces obtendríamos este resultado:

viernes, 25 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a más de una tabla - Ejemplo de combinación en BDUOC

A continuación mostramos un ejemplo con la base de datos BDUOC en el que queremos saber el NIF del cliente y el código y el precio del proyecto que desarrollamos para el cliente
número 20:

SELECT proyectos.codigo_proyecto, proyectos.precio, clientes.nif
FROM clientes, proyectos
WHERE clientes.codigo_cli = proyectos.codigo_cliente AND clientes.
codigo_cli = 20;

El resultado sería:
Si trabajamos con más de una tabla, puede ocurrir que la tabla resultante tenga dos columnas con el mismo nombre. Por ello es obligatorio especificar a qué tabla corresponden las columnas a las que nos estamos refiriendo, denominando la tabla a la que pertenecen antes de ponerlas (por ejemplo, clientes. codigo_cli). Para simplificarlo, se utilizan los alias que, en este caso, se definen en la cláusula FROM.

jueves, 24 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a más de una tabla

Muchas veces queremos consultar datos de más de una tabla haciendo combinaciones de columnas de tablas diferentes. En el SQL es posible listar más de una tabla que se quiere consultar especificándolo en la cláusula FROM.
1) Combinación
La combinación consigue crear una sola tabla a partir de las tablas especificadas en la cláusula FROM, haciendo coincidir los valores de las columnas relacionadas de estas tablas.

miércoles, 23 de septiembre de 2015

SQL Sentencias de manipulación - Ejemplo de uso de la función de agregación SUM

Veamos un ejemplo de uso de una función de agregación SUM del SQL que aparece en la cláusula HAVING de GROUP BY: “Queremos saber los códigos de los proyectos en los que la suma
de los sueldos de los empleados es mayor que 180.000 euros”:
SELECT num_proyec
FROM empleados
GROUP BY num_proyec
HAVING SUM (sueldo) >1.8E+5;
El resultado de esta consulta sería el que se ve al margen.

martes, 22 de septiembre de 2015

SQL Sentencias de manipulación - Consulta con agrupación de filas en BDUOC

Imaginemos que queremos saber el sueldo medio que ganan los empleados de cada departamento:

SELECT nombre_dep, ciudad_dep, AVG(sueldo) AS sueldo_medio
FROM empleados
GROUP BY nombre_dep, ciudad_dep;

El resultado de esta consulta sería:

lunes, 21 de septiembre de 2015

SQL Sentencias de manipulación - Consultas con agrupación de filas de una tabla

Las cláusulas siguientes, añadidas a la instrucción SELECT FROM, permiten organizar las filas por grupos:
a) La cláusula GROUP BY nos sirve para agrupar filas según las columnas que indique esta cláusula.

b) La cláusula HAVING especifica condiciones de búsqueda para grupos de filas; lleva a cabo la misma función que antes cumplía la cláusula WHERE para las filas de toda la tabla, pero ahora las condiciones se aplican a los grupos obtenidos.
Presenta el siguiente formato:

SELECT nombre_columnas_a seleccionar
FROM tabla_a_consultar
[WHERE condiciones]
GROUP BY columnas_según_las_cuales_se_quiere_agrupar
[HAVING condiciones_por_grupos]
[ORDER BY columna_ordenación [DESC] [, columna [DESC]...]];

domingo, 20 de septiembre de 2015

SQL Sentencias de manipulación - Consulta a BDUOC con respuesta ordenada

Imaginemos que queremos consultar los nombres de los empleados ordenados según el sueldo que ganan, y si ganan el mismo sueldo, ordenados alfabéticamente por el nombre:

SELECT codigo_empl, nombre_empl, apellido_empl, sueldo
FROM empleados
ORDER BY sueldo, nombre_empl;
Esta consulta daría la respuesta siguiente:

Si no se especifica nada más, se seguirá un orden ascendente, pero si se desea seguir un orden descendente es necesario añadir DESC detrás de cada factor de ordenación expresado en la cláusula ORDER BY:
ORDER BY columna_ordenación [DESC] [, columna [DESC] ...]
También se puede explicitar un orden ascendente poniendo la palabra clave ASC (opción por defecto).

sábado, 19 de septiembre de 2015

SQL Sentencias de manipulación - Ordenación de los datos obtenidos en respuestas a consultas

Si se desea que, al hacer una consulta, los datos aparezcan en un orden determinado, es preciso utilizar la cláusula ORDER BY en la sentencia SELECT, que presenta el siguiente formato:
SELECT nombre_columnas_a seleccionar
FROM tabla_a_consultar

[WHERE condiciones]
ORDER BY columna_según_la_cual_se_quiere_ordenar [DESC]
[, col_ordenación [DESC]...];

viernes, 18 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (X)

Ejemplo de uso del predicado EXISTS

Un ejemplo en el que se buscan los códigos y los nombres de los empleados que están asignados a algún proyecto sería:
SELECT codigo_empl, nombre_empl
FROM empleados
WHERE EXISTS (SELECT *
FROM proyectos
WHERE codigo_proyec = num_proyec);

La respuesta a esta consulta sería la que se muestra en el margen.

jueves, 17 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (IX)

Predicado EXISTS

Para comprobar si una subconsulta produce alguna fila de resultados, podemos utilizar la sentencia denominada test de existencia: EXISTS. Para comprobar si una subconsulta no produce ninguna fila de resultados, podemos utilizar NOT EXISTS.

SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE [NOT] EXISTS subconsulta;

miércoles, 16 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (VIII)

a) Veamos un ejemplo de aplicación de ALL para encontrar los códigos y los nombres de los proyectos en los que los sueldos de todos los empleados asignados son menores que el precio del proyecto:

SELECT codigo_proyec, nombre_proyec
FROM proyectos
WHERE precio > ALL (SELECT sueldo
FROM empleados
WHERE codigo_proyec = num_proyec);

Fijémonos en la condición de WHERE de la subconsulta, que nos asegura que los sueldos que observamos son los de los empleados asignados al proyecto de la consulta. La respuesta a esta consulta sería la que aparece en el margen.

b) A continuación, presentamos un ejemplo de ANY/SOME para buscar los códigos y los nombres de los proyectos que tienen algún empleado que gana un sueldo más elevado que el precio
del proyecto en el que trabaja.

SELECT codigo_proyec, nombre_proyec
FROM proyectos
WHERE precio < ANY (SELECT sueldo FROM empleados WHERE codigo_proyec = num_proyec);


La respuesta a esta consulta está vacía, como se ve en el margen.

martes, 15 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (VII)

Predicados ANY/SOME y ALL

Para ver si una columna cumple que todas sus filas (ALL) o algunas de sus filas (ANY/SOME) satisfagan una condición, podemos hacer:

SELECT nombre_columnas_a seleccionar
FROM tabla_a_consultar
WHERE columna operador_comparación {ALL|ANY|SOME}subconsulta;

lunes, 14 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (VI)

Ejemplo de uso del predicado IS NULL

Un ejemplo de uso de este predicado sería “Queremos saber el código y el nombre de todos los empleados que no están asignados a ningún proyecto”:

SELECT codigo_empl, nombre_empl
FROM empleados
WHERE num_proyec IS NULL;
Obtendríamos la respuesta que tenemos al margen.

domingo, 13 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (V)

Predicado IS NULL

Para comprobar si un valor es nulo utilizaremos IS NULL, y para averiguar si no lo es, IS NOT NULL. El formato es:

SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna IS [NOT] NULL;

sábado, 12 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (IV)

Ejemplo de uso del predicado LIKE

A continuación presentamos un ejemplo en el que buscaremos los nombres de los empleados que empiezan por J, y otro ejemplo en el que obtendremos los proyectos que comienzan por S y tienen cinco letras:
a) Nombres de empleados que empiezan por la letra J:

SELECT codigo_empl, nombre_empl
FROM empleados
WHERE nombre_empl LIKE ‘J%’;

La respuesta a esta consulta sería la que se muestra en el margen.

b) Proyectos que empiezan por S y tienen cinco letras:

SELECT codigo_proyec
FROM proyectos
WHERE nombre_proyec LIKE ‘S_ _ _ _’;

Y la respuesta a esta otra consulta sería la que aparece en el margen.

viernes, 11 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (III)

Predicado LIKE

Para comprobar si una columna de tipo carácter cumple alguna propiedad determinada, podemos usar LIKE:
SELECT nombre_columnas_a_seleccionar
FROM tabla_a_consultar
WHERE columna LIKE característica;

Los patrones del SQL92 para expresar características son los siguientes:
a) Pondremos un carácter _ para cada carácter individual que queramos considerar.
b) Pondremos un carácter % para expresar una secuencia de caracteres, que puede no estar formada por ninguno.

jueves, 10 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (II)

Predicado IN

Para comprobar si un valor coincide con los elementos de una lista utilizaremos IN, y para ver si no coincide, NOT IN:

miércoles, 9 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Otros predicados (I)

Predicado BETWEEN

Para expresar una condición que quiere encontrar un valor entre unos límites concretos, podemos utilizar BETWEEN:

martes, 8 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Subconsulta en BDUOC

Si quisiéramos saber los códigos y los nombres de los proyectos de precio más elevado, en primer lugar tendríamos que encontrar los proyectos que tienen el precio más elevado.
Lo haríamos de la forma siguiente:

lunes, 7 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional -Subconsultas

Una subconsulta es una consulta incluida dentro de una cláusula WHERE o HAVING de otra consulta. En ocasiones, para expresar ciertas condiciones no hay más remedio que obtener el valor que buscamos como resultado de una consulta.

domingo, 6 de septiembre de 2015

SQL Sentencias de manipulación - Consultas a una base de datos relacional - Ejemplo de utilización de la función COUNT (*)

Veamos un ejemplo de uso de la función COUNT, que aparece en la cláusula SELECT, para hacer la consulta “¿Cuántos departamentos están ubicados en la ciudad de Lleida?”: