Anda di halaman 1dari 7

BASES DE DATOS I

TEORIA DE CONSULTAS (QUERY)

CONSULTA SOBRE UNA TABLA

Cuando se necesita consultar la información existente en las tablas se debe utilizar el comando de
consultas de SQL, SELECT.

Primero se analizará la consulta sobre una tabla, para lo cual se utilizará la tabla EMPLEADO
mostrada en la figura.

El comando de consulta básico obligatoriamente consta de dos


cláusulas: la cláusula SELECT en la cual se describen los campos o
expresiones a ser visualizadas, y la cláusula FROM en la cual se detalla
la fuente de donde se realiza la consulta, en este caso la tabla
EMPLEADO.

Iniciemos con un comando de consulta básico:

SELECT *
FROM empleado;

Con la consulta anterior, se visualizarán todos los campos (*) y todos


los registros de la tabla EMPLEADO.

En algunas ocasiones solo se necesitarán consultar algunos campos de una determinada tabla, lo
cual se logra especificando en la cláusula SELECT los campos a ser visualizados separados por
comas de la siguiente manera:

SELECT codigo, nombre, salario


FROM empleado;

Ahora se visualizarán solo los campos CODIGO, NOMBRE y SALARIO de todos los registros o
empleados que se encuentren en la tabla EMPLEADO.

En la cláusula SELECT también se pueden utilizar expresiones, como se mencionó al comienzo del
documento. Suponiendo que en la tabla EMPLEADO los salarios de los trabajadores son mensuales
y mediante una consulta se pretende mostrar los salarios anuales de dichos trabajadores, el
comando de consulta quedará así:

SELECT codigo, nombre, salario*12


FROM empleado;

Note que en el comando anterior se realiza una multiplicación entre el campo SALARIO y la
constante 12 (lo que se conoce como una expresión).

Las únicas operaciones que se pueden utilizar en la cláusula SELECT son la multiplicación, la
división, la suma y la resta, o cualquier combinación de las anteriores. También se debe tener en
cuenta que estás operaciones siguen las reglas de precedencia, ampliamente conocidas, y que la
precedencia de estas operaciones se puede alterar si son encerradas entre paréntesis.

Ahora, si se observa el resultado de la consulta, cada columna que se despliega tiene una
cabecera que es exactamente el nombre del campo o la expresión que se ha colocado en la
cláusula SELECT. Esta cabecera puede modificarse haciendo uso de los alias de campo de la
siguiente manera.

Preparado por: Ing. WALBERTO CANTILLO ACUÑA – Pág. 1


SELECT codigo, nombre, salario*2 salario_anual
FROM empleado;

SELECT codigo, nombre, salario*2 as salario_anual


FROM empleado;

Note que la tercera columna desplegada no muestra como cabecera SALARIO*12 sino que es
reemplazada por SALARIO_ANUAL, el alias de campo. Todos los campos o expresiones de la
cláusula SELECT pueden tener alias de campo simplemente es colocar después del nombre de
campo o expresión el alias deseado separado por un espacio.

Hasta el momento todas las consultas realizadas despliegan los campos detallados en la cláusula
SELECT para todos los registros de la tabla sobre la cual se realiza la consulta. Se pueden
restringir los registros visualizados introduciendo una nueva cláusula al comando de consulta, la
cláusula WHERE. La cláusula WHERE verifica que los registros a mostrar como resultado de la
consulta sean aquellos registros que cumplan con la condición o condiciones allí expresadas. Las
condiciones se expresan mediante operandos y operadores.

Los operandos pueden ser campos, expresiones o constantes, mientras que los operadores los
podemos clasificar en tres grupos: de comparación, lógicos y SQL.

Las dos primeras clasificaciones son ampliamente conocidas y solo se mencionarán los
operadores. De comparación: >, <, =, >=, <=, <> o ¡=; y lógicos: AND, OR, NOT.

La tercera clasificación está compuesta por los siguientes operadores: IN, BETWEEN .. AND .. y
LIKE; su uso será mostrado a través de ejemplos.

Operador IN:
SELECT codigo, nombre, salario
FROM empleado
WHERE codigo IN (10, 30, 50);

El ejemplo anterior mostrará el CODIGO, NOMBRE y SALARIO de los trabajadores cuyo código se
encuentre en la lista mostrada después del operador IN, es decir, mostrará aquellos trabajadores
que tengan el código 10 o el código 30 o el código 50. El operador IN no encierra intervalos de
valores sino que opera sobre valores puntuales. La anterior consulta es equivalente a:

SELECT codigo, nombre, salario


FROM empleado
WHERE codigo=10 OR codigo=30 OR codigo=50;

Operador BETWEEN .. AND ..:


SELECT codigo, nombre, salario
FROM empleado
WHERE codigo BETWEEN 10 AND 50;

En este ejemplo a diferencia del anterior el operador BETWEEN encierra un intervalo de valores
que va desde el código 10 hasta el código 50, incluyendo los extremos; es decir, la condición es
cumplida por todos los trabajadores que tengan desde el código 10 hasta el código 50. Ahora el
operador no aplica a valores puntuales sino a un intervalo de valores.

Operador LIKE:

Preparado por: Ing. WALBERTO CANTILLO ACUÑA – Pág. 2


SELECT codigo, nombre, salario
FROM empleado
WHERE nombre LIKE ‘E%’;

En el ejemplo los trabajadores que cumplen con la condición son todos aquellos cuyo nombre
comience por “E” sin importar cuantos caracteres existan después de la “E”, lo cual es expresado
mediante el carácter %.

También podemos filtrar los nombres que terminen en “a” (WHERE nombre LIKE ‘%a’) o los
nombres que en cualquier posición tengan “ch” (WHERE nombre LIKE ‘%ch%’).

Los resultados de las consultas realizadas anteriormente aparecen en el orden en el cual los
registros fueron insertados en la tabla. Este orden puede ser modificado mediante la cláusula
ORDER BY. La cláusula ORDER BY tienes las opciones de realizar ordenamientos ascendentes
(ASC), ordenamiento que asume por defecto, y ordenamiento descendentes (DESC). Ejemplos:

SELECT codigo, nombre, salario


FROM empleado
WHERE salario IN (10, 30, 50)
ORDER BY nombre;

En este ejemplo el ordenamiento se está realizando por nombre y de manera ascendente que es
el tipo de ordenamiento que se asume por defecto. El ejemplo anterior es equivalente a:

SELECT codigo, nombre, salario


FROM empleado
WHERE salario IN (10, 30, 50)
ORDER BY nombre ASC;

Los ordenamientos también pueden expresarse por la posición del campo en la cláusula SELECT.
Ejemplo:

SELECT codigo, nombre, salario


FROM empleado
WHERE salario IN (10, 30, 50)
ORDER BY 2;

Igual a los dos ejemplos anteriores el resultado de esta consulta es ordenado por nombre de
manera ascendente, porque el nombre se encuentra en la segunda posición en la cláusula
SELECT.

El ordenamiento también puede realizarse por múltiples campos y a cada campo se le puede
aplicar un tipo diferente de ordenamiento. Ejemplo:

SELECT codigo, nombre, salario


FROM empleado
WHERE salario IN (10, 30, 50)
ORDER BY nombre DESC, salario ASC;

En este ejemplo el resultado de la consulta se ordena inicialmente por el nombre de manera


descendente y luego por el salario de manera ascendente. Cuando los ordenamientos se realizan
por más de un campo, el efecto de los ordenamientos se notará si los ordenamientos anteriores
presentan grupo repetitivos.

Preparado por: Ing. WALBERTO CANTILLO ACUÑA – Pág. 3


CONSULTA SOBRE MULTIPLES TABLAS

De la tabla EMPLEADO se puede obtener bastante información del empleado, pero cuando se
requiere conocer en qué departamento está ubicado un trabajador solo se tiene acceso al código
del departamento donde el empleado labora.

Si se requiere que la consulta arroje además del nombre y salario del trabajador, el nombre del
departamento donde está ubicado, es necesario buscar el nombre del departamento en la tabla
DEPARTAMENTO. Lo anterior implica que la información requerida debe ser extraída de dos tablas.

El comando de consulta también permite


realizar consultas de múltiples tablas al
tiempo. Este tipo de consultas, al igual
que las consultas sobre una sola tabla,
también debe cumplir con ciertas
características. La primera y más
importante es que el número de
cláusulas básicas y obligatorias ahora se
incrementa a tres: la cláusula SELECT
donde se detallan todos los campos que
se requieren mostrar; la cláusula FROM,
donde se colocan las tablas de donde
queremos extraer información; y la
cláusula WHERE que debe expresar
como una condición la relación que exista entre las tablas involucradas. Es así como podemos
basarnos en la siguiente regla para propósitos de orientación.

REGLA: Si en la consulta participan 2 tablas la cláusula WHERE debe expresar por lo menos una
relación; si participan 3 tablas la cláusula WHERE debe expresar por lo menos dos relaciones; si
participan “n” tablas la cláusula WHERE debe expresar por lo menos “n-1” relaciones. Nótese que
se hace uso del término “por lo menos” porque además de las condiciones obligatorias (aquellas
que relacionan las tablas) pueden existir condiciones propias del ejercicio. Como claridad a lo
anterior, analice el siguiente ejemplo:

SELECT empleado.codigo, empleado.nombre, departamento.nombre


FROM empleado, departamento
WHERE empleado.codigo_dept = departamento.codigo
ORDER BY empleado.nombre;

Del ejemplo anterior se pueden sacar varias conclusiones:


a) La notación tabla.campo se hace debido a que pueden existir campos con el mismo nombre
en las diferentes tablas utilizadas y debemos especificar a qué campo se hace referencia
exactamente, para evitar ambigüedad, lo que ocurre con el campo NOMBRE y el campo
CODIGO. Si se quiere hacer referencia al campo NOMBRE de la tabla EMPLEADO se hace
mediante la notación empleado.nombre, y si se quiere hacer referencia al campo NOMBRE
de la tabla DEPARTAMENTO se hace mediante la notación departamento.nombre.
b) En la cláusula FROM se deben detallar todas las tablas que participen en la consulta sin
importar si los campos de alguna de ellas se muestre (aparezca en la cláusula SELECT).
c) A pesar de que el ejemplo anterior no presenta ningún tipo de condicionamiento particular,
ejemplo: que el código del empleado este en un intervalo determinado, obligatoriamente
se debe presentar la cláusula WHERE porque en ella debemos expresar la relación
existente entre las dos tablas participantes (véase el diagrama); si esto no se hace el
resultado de la consulta estará errado porque se genera lo que se conoce como PRODUCTO
CARTESIANO, que no es más que el cruce de todos los registros de la tabla EMPLEADO
contra todos los registros de la tabla DEPARTAMENTO.

Preparado por: Ing. WALBERTO CANTILLO ACUÑA – Pág. 4


d) El ordenamiento se puede realizar utilizando los campos de cualquiera de las tablas
involucradas o el posicionamiento de estos campos en la cláusula SELECT.

Ahora analice el ejemplo anterior al cuál se le da un condicionamiento particular consistente en


mostrar solo los trabajadores que tengan el código dentro de un intervalo dado.

SELECT empleado.codigo, empleado.nombre, departamento.nombre


FROM empleado, departamento
WHERE empleado.codigo_dept = departamento.codigo
AND empleado.codigo BETWEEN 10 AND 50
ORDER BY empleado.nombre;

Observe en esta consulta que existen dos condiciones a pesar de solo estar involucradas dos
tablas. La primera condición “empleado.codigo_dept = departamento.codigo” es obligatoria
porque establece la relación entre las dos tablas y evita el producto cartesiano; y la segunda
“empleado.codigo BETWEEN 10 AND 50” es la condición particular de la consulta.

Existe otra manera de expresar la consulta anterior:

SELECT e.codigo, e.nombre, d.nombre


FROM empleado e, departamento d
WHERE e.codigo_dept = d.codigo
AND e.codigo BETWEEN 10 AND 50
ORDER BY e.nombre;

Note que en este ejemplo el nombre de la tabla que se anteponía a cada campo ha sido
reemplazado por una letra y en la cláusula FROM cada nombre de tabla está seguida por una de
las letras que se anteponen a los nombres de campos. Esta notación a reemplazado el nombre de
la tabla por un ALIAS DE TABLA el cual es definido en la cláusula FROM, por lo que, “e.nombre” se
refiere al campo NOMBRE de la tabla EMPLEADO debido a que “e” se ha definido como alias de la
tabla empleado.

TALLERES

Dadas las siguientes tablas y sus relaciones:

1. Escribir una consulta que muestre el código y nombre de los estudiantes de las facultades
100, 150 y 200. Ordene el resultado por facultad y por código de estudiante.

2. Escribir una consulta que muestre código del estudiante, nombre del estudiante, nombre de
la asignatura, nota1, nota2 y nota3, para las asignaturas perdidas en el periodo 20061.

Preparado por: Ing. WALBERTO CANTILLO ACUÑA – Pág. 5


3. Escribir una consulta que muestre el periodo, código del estudiante, y el código de la
asignatura para aquellas asignaturas donde los estudiantes hayan ganado los tres
exámenes, ordene el resultado por periodo, código de estudiante y por código de asignatura.

4. Escribir una consulta que muestre código de la asignatura y nombre de la asignatura para
aquellas asignaturas que contengan LAB en su nombre, ordene el resultado por nombre de
asignatura

5. Escribir una consulta que muestre el nombre del estudiante, el código de la asignatura, y el
nombre de la asignatura, para los estudiantes cuyo nombre comience por JOSE, ordene el
resultado por nombre del estudiante y por código de la asignatura.

6. Escribir una consulta que muestre periodo, nombre del estudiante, código de asignatura y
promedio de notas, para los estudiantes de apellidos PEREZ PEREZ, ordene la consulta por
periodo, nombre de estudiante y código de asignatura.

7. Escribir una consulta que muestre periodo, código del estudiante y código de la asignatura
de todas las asignaturas cursadas del periodo 20051 al periodo 20062 por el estudiante cuyo
código es 150150150, ordene el resultado por periodo y código de la asignatura.

8. Escribir una consulta que muestre periodo, nombre del estudiante y nombre de la asignatura
para aquellos estudiantes que ganaron el primer examen en el periodo 20051, ordene el
resultado por nombre del estudiante.

Dadas las siguientes tablas y sus relaciones:

9. Escribir una consulta que muestre el código del trabajador, nombre del trabajador y nombre
del departamento de los departamentos 10, 25 y 55, ordene el resultado por nombre del
departamento.

10. Escribir una consulta que muestre código del trabajador, nombre del trabajador e
incremento porcentual del salario para aquellos trabajadores cuyo incremento porcentual de
salario fue inferior a 10%, ordene el resultado por el incremento porcentual.

11. Escribir una consulta que muestre los conceptos y valores correspondientes que se
cancelaron a JUAN PEREZ en el periodo 200508.

12. Escribir una consulta que muestre todos los descuentos realizados a JUAN PEREZ en el
periodo 200509 (TIPO_CONCEPTO=’D’).

13. Escribir una consulta que muestre el código del trabajador y nombre del trabajador para
aquellos trabajadores que el 30 de Junio de 2006 cumplan 20 o más años de labores.

Preparado por: Ing. WALBERTO CANTILLO ACUÑA – Pág. 6


14. Escribir una consulta que muestre el código del trabajador y nombre del trabajador para
aquellos trabajadores que ingresaron el segundo trimestre del año 2000.

15. Escribir una consulta que muestre el código del trabajador, nombre del trabajador, código
del jefe y nombre del jefe, para todos los trabajadores.

Dadas las siguientes tablas y sus relaciones:

16. Escribir una consulta que muestre el código del estudiante y el apellido del estudiante de
todos los estudiantes que al día de hoy tengan libros prestados.

17. Escribir una consulta que muestre el código del libro y el título del libro de los libros que
actualmente estén prestados.

18. Escribir una consulta que muestre el código del estudiante y el código del libro para los
cuales se les ha otorgado un plazo en el préstamo mayor de una semana.

19. Escribir una consulta que muestre el nombre del estudiante y el nombre del libro para los
préstamos que se vencieron en el mes de junio de 2006.

20. Escribir una consulta que muestre el nombre del estudiante y el nombre del libro para los
préstamos que se realizaron en el segundo semestre del 2006.

21. Escribir una consulta que muestre el código del libro, nombre del libro y autor para todos los
libros que en su titulo tengan la palabra INGENIERIA y que el nombre del autor comience
por ALBERT.

Preparado por: Ing. WALBERTO CANTILLO ACUÑA – Pág. 7

Anda mungkin juga menyukai