Vous êtes sur la page 1sur 13

Asignatura: Sistemas de Base de Datos

TEMA

5
CONSULTAS A UNA TABLA
Introduccin
En este captulo aprender el comando SQL SELECT que se usa para recuperar datos en una base de datos. Examinar los modos de organizar datos y usar las funciones de SQL para consultar filas y calcular totales. Tambin aprender los comandos SELECT anidados situando un comando SELECT dentro de otro. Por ltimo, aprender como agrupar filas que contienen valores iguales en alguna columna.

Construir consultas sencillas


Una de las caractersticas ms importantes de un DBMS es la posibilidad que ofrece de contestar un amplio rango de preguntas con relacin a los datos de una base de datos. Cuando necesitamos encontrar datos para responder a una pregunta especfica, utilizamos una consulta. Una consulta es una pregunta representada de manera que el DBMS pueda comprender. En SQL utilizamos el comando SELECT para consultar una base de datos. La forma bsica del comando SELECT es SELECT-FROM-WHERE. Despus de la palabra SELECT, listamos las columnas que queremos incluir en los resultados de la consulta. Esta parte del comando se denomina clusula SELECT. Despus, escribimos la palabra FROM seguida del nombre de la tabla que contiene los datos que queremos consultar. Esta parte del comando se denomina clusula FROM. Por ltimo, despus de la palabra WHERE, listamos las condiciones (restricciones) que se apliquen a los datos que queremos recuperar. Esta parte opcional del comando se denomina clusula WHERE. Por ejemplo, cuando tenemos que recuperar las filas de slo los clientes con lmite de crdito $7500.00, incluimos una condicin en la clusula WHERE especificando que el valor de la columna limiCreClien ha de ser $7500.00 (limiCreClien=7500). No hay reglas especiales de formato en SQL. En este libro, las clusulas FROM y WHERE (cuando se utiliza) aparecen en lneas separadas slo para que los comandos sean ms legibles y comprensibles. 50

Asignatura: Sistemas de Base de Datos

Recuperar determinadas columnas y todas las filas


Podemos escribir un comando para recuperar las columnas especificadas y todas las filas de una tabla, como vemos en el ejemplo 1. Ejemplo 1: Liste el cdigo, nombre y balance de todos los clientes. Como tenemos que listar todos los clientes, no tenemos que incluir ninguna clusula WHERE, pues no necesitamos especificar restriccin alguna a los datos que queremos recuperar. Simplemente listaremos las columnas que queremos incluir (codiClien, nombreClien y balanClien) en la clusula SELECT y el nombre de la tabla (tCliente) en la clusula FROM. Escriba un punto y coma para indicar el final del comando y despus haga clic en el botn Ejecutar para mostrar los resultados. La consulta y sus resultados aparecen en la figura 4.1. Nota: En Oracle Database Express Edition, el nmero que aparece en el cuadro Mostrar indica el nmero mximo de filas que mostrar Oracle en los resultados de la consulta. El valor por defecto el 10. Para cambiarlo, puede hacer clic en la flecha y seleccionar un nuevo valor de la lista o escribirlo en el cuadro. En la figura 4.1 vemos el cuadro de lista Mostrar con el valor cambiado por el usuario para mostrar 100 filas. Cuando ejecutamos una consulta cuyos resultados incluirn ms filas que el nmero del cuadro de lista Mostrar, Oracle lo indicar con un mensaje. Si ocurre esta situacin, aumente el nmero del cuadro de lista Mostrar y despus haga clic de nuevo en el botn Ejecutar para mostrar todos los resultados de la consulta. Si utilizamos SQL Server para ejecutar los comandos SQL de este libro, los resultados de nuestras consultas pueden diferir ligeramente de los que vemos en las figuras. En SQL Server, los valores del campo balanClien tendrn dos posiciones decimales y los valores del campo fechaPedi se pueden mostrar con un valor de tiempo. Aunque nuestros resultados pueden tener un formato diferente, los datos deberan ser los mismos que vemos en las figuras.

Figura 4.1. Comando SELECT para seleccionar determinadas columnas de la tabla tCliente.

51

Asignatura: Sistemas de Base de Datos

Recuperar todas las columnas y todas las filas


Podemos utilizar el mismo tipo de comando ilustrado en el ejemplo 1 para recuperar todas las columnas y todas las filas de una tabla. Sin embargo, como vemos en el ejemplo 2, podemos utilizar un mtodo abreviado para llevar a cabo esta tarea. Ejemplo 2 Liste la tabla tArticulo completa En lugar de incluir todas las columnas en la clusula SELECT, podemos utilizar un asterisco (*) para indicar que queremos incluir todas las columnas. El resultado listar todas las columnas en el orden en que se las describimos al DBMS al crear la tabla. Si quiere que las columnas aparezcan en otro orden, escriba los nombres de las columnas en el orden en que quiere que aparezcan en los resultados de la consulta. En este caso, asumiendo que el orden por defecto es adecuado, podemos utilizar la consulta que vemos en la figura 4.2 para mostrar toda la tabla tArticulo.

Figura 4.2. Comando SELECT para seleccionar todas las columnas de la tabla tArticulo.

Clusula WHERE
Cuando tenemos que recuperar filas que cumplan alguna condicin, incluiremos la clusula WHERE en el comando SELECT, como vemos en el ejemplo 3. Ejemplo 3 Cmo se llama el cliente con el cdigo de cliente 148? Podemos utilizar la clusula WHERE para restringir los resultados de la consulta al cdigo de cliente 148, como vemos en la figura 4.3. Como codiClien es una columna de caracteres, el valor 148 ir entre comillas simples. Adems, como la columna codiClien es la clave principal de la tabla

52

Asignatura: Sistemas de Base de Datos tCliente, slo puede haber un cliente cuyo nmero coincida con el nmero especificado en la clusula WHERE.

Figura 4.3. Comando SELECT para encontrar el nombre del cliente con cdigo 148. La condicin de la clusula WHERE que hemos visto se llama condicin simple. Una condicin simple tiene la forma de un nombre de columna, un operador de comparacin y despus otro nombre de columna o bien un valor. En la tabla 4.1 se recogen los operadores de comparacin que se pueden utilizar en SQL. Observe que hay dos versiones del operador no igual a: < > y !=. Operador de comparacin Descripcin = Igual a < Menor que > Mayor que <= Menor que o igual a >= Mayor que o igual a <> No igual a != No igual a Tabla 4.1. Operadores de comparacin utilizados en comandos SQL. Ejemplo 4 Encuentre el cdigo y nombre de los clientes situados en la ciudad de Grove. La nica diferencia entre este ejemplo y el anterior es que en el ejemplo 3, no poda haber ms de una fila en la respuesta porque la condicin implicaba a la clave principal de la tabla. En el ejemplo 4 la condicin implica a una columna que no es la clave principal de la tabla. Como hay ms de un cliente situado en la ciudad de Grove, los resultados pueden y de hecho contienen ms de una fila, como vemos en la figura 4.4.

Figura 4.4. Comando SELECT para encontrar a todos los clientes situados en Grove.

53

Asignatura: Sistemas de Base de Datos

Ejemplo 5 Encuentre el cdigo, nombre, balance y lmite de crdito para todos los clientes con balances que excedan sus lmites de crdito. Una condicin sencilla tambin puede comparar los valores almacenados en dos columnas. En la figura 4.5 la clusula WHERE incluye un operador de comparacin que selecciona slo las filas en las que el balance es mayor que el lmite de crdito.

Figura 4.5. Comando SELECT para encontrar a todos los clientes con balances que exceden sus lmites de crdito.

Condiciones compuestas
Las condiciones que hemos visto hasta ahora se denominan condicionales simples. Los siguientes ejemplos requieren condiciones compuestas. Una condicin compuesta se forma conectando dos o ms condiciones simples con los operadores AND, OR y NOT. Cuando el operador AND conecta condiciones simples, todas las condiciones simples deben ser verdaderas para que la condicin compuesta sea verdadera. Cuando el operador OR conecta las condiciones simples, la condicin compuesta ser verdadera siempre que cualquier otra de las condiciones simples lo sea. Preceder una condicin del operador NOT invierte la verdad de la condicin original. Por ejemplo, si la condicin original es verdadera, la condicin nueva ser falsa, y si la condicin original es falsa, la nueva ser verdadera. Ejemplo 6 Liste las descripciones de todos los artculos situados en el almacn 3 Y para las que haya ms de 25 unidades. En el ejemplo 6 se trata de recuperar aquellos artculos que cumplan ambas condiciones: el nmero de almacn es igual a 3 y el nmero de unidades es mayor que 25. Para encontrar la respuesta, formamos una condicin compuesta utilizando el operador AND, como vemos en la figura 4.6. La consulta examina los datos de la tabla tArticulo y lista los artculos situados en el almacn 3 y para las que hay ms de 25 unidades. Cuando una clusula WHERE utiliza el operador AND para conectar condiciones simples, tambin se le denomina una condicin AND.

54

Asignatura: Sistemas de Base de Datos

Figura 4.6. Comando SELECT con una condicin AND en lneas separadas. Para que sea ms legible, cada una de las condiciones simples de la consulta que vemos en la figura 4.6 aparece en una lnea separada. Hay usuarios que prefieren poner las condiciones en la misma lnea con cada una de las condiciones simples entre parntesis, como vemos en la figura 4.7. Ambos mtodos llevan a cabo la misma funcin. En este libro las condiciones simples aparecen en lneas aparte y sin parntesis.

Figura 4.7. Comando SELECT con una condicin AND en la misma lnea. Ejemplo 7 Liste las descripciones de todos los artculos situados en el almacn 3 O en las que haya ms de 25 unidades. En el ejemplo 7, se trata de recuperar las descripciones para aquello artculos para las que el nmero de almacn sea igual a 3, o para las que el nmero de unidades sea mayor que 25, o ambos. Para ello, formaremos una condicin compuesta utilizando el operador OR, como vemos en la figura 4.8. Cuando una clusula WHERE utiliza el operador OR para conectar condiciones simples, tambin se denomina una condicin OR.

Figura 4.8. Comando SELECT con una condicin OR.

55

Asignatura: Sistemas de Base de Datos

Ejemplo 8 Liste las descripciones de todos los artculos que NO estn en el almacn 3. Para el ejemplo 8, podramos utilizar una condicin simple y el operador no igual a (WHERE almaArti <> 3). Como alternativa, podemos utilizar el operador igual (=) en la condicin y preceder toda la condicin del operador NOT, como vemos en la figura 4.9. Cuando una clusula WHERE utiliza el operador NOT para conectar condiciones simples, tambin se denomina una condicin NOT.

Figura 4.9. Comando SELECT con una condicin NOT. No es necesario que la condicin almaArti=3 vaya entre parntesis, pero de esta manera el comando es ms legible.

Operador BETWEEN
El ejemplo 9 requiere una condicin compuesta para determinar la respuesta. Ejemplo 9 Liste el cdigo, nombre y balance de todos los clientes con balances mayores o iguales a $2000 y menores o iguales a $5000. Para recuperar los datos, podemos utilizar una clusula WHERE y el operador AND, como vemos en la figura 4.10. Nota: En SQL los nmeros incluidos en las consultas se introducen sin smbolos adicionales, como pueden ser el smbolo del dlar o las comas. Una alternativa a este mtodo sera utilizar el operador BETWEEN, como vemos en la figura 4.11. El operador BETWEEN nos permite especificar un rango de valores en una condicin.

56

Asignatura: Sistemas de Base de Datos

Figura 4.10. Comando SELECT con una condicin AND para una sola columna.

Figura 4.11. Comando SELECT con el operador BETWEEN. El operador BETWEEN es inclusivo, lo que significa que la consulta selecciona un valor igual a cualquier valor de la condicin y en el rango de los valores. Por ejemplo, en la clusula BETWEEN 2000 AND 5000 los valores entre 2000 y 5000 haran la condicin verdadera. Podemos utilizar el operador BETWEEN en Oracle y SQL Server. El operador BETWEEN no es una funcin esencial en SQL, ya hemos visto que podemos obtener el mismo resultado sin l. Sin embargo, la utilizacin del operador BETWEEN hace que determinados comandos SELECT sean ms sencillos de contruir.

Columnas de Clculo
Con las consultas de SQL podemos llevar a cabo diferentes clculos. La columna de clculo no existe en la base de datos pero se puede calcular utilizando datos de las columnas existentes. Los clculos pueden llevar cualquiera de los operadores aritmticos que vemos en la tabla 4.2. Operador aritmtico Descripcin + Suma Resta * Multiplicacin / Divisin Tabla 4.2. Operadores aritmticos. Ejemplo 10 Encuentre el cdigo, nombre y crdito disponible (el lmite de crdito menos el balance) de cada cliente.

57

Asignatura: Sistemas de Base de Datos

Figura 4.12. Comando SELECT con una columna de clculo. En la base de datos de Premiere Products no existe ninguna columna que almacene el crdito disponible de los clientes, pero podemos calcularlo utilizando las columnas limiCreClien y balanClien. Para calcular el crdito disponible, utilizaremos la expresin limiCreClien balanClien, como vemos en la figura 4.12. Los parntesis antes y despus del clculo (limiCreClien balanClien) no son esenciales pero lo hacen ms legible. Tambin se pueden asignar un nombre a una columna de clculo poniendo delante del clculo la palabra AS y el nombre deseado. Por ejemplo, el comando que vemos en la figura 4.13 asigna el nombre crediDisClien a la columnas de clculo.

Figura 4.13. Comando SELECT con una columna de clculo nombrada. Ejemplo 11 Encuentre el cdigo, nombre y crdito disponible de los clientes que tengan ms de 5000 de crdito disponible. Tambin podemos utilizar las columnas de clculo en comparaciones como vemos en la figura 4.14.

58

Asignatura: Sistemas de Base de Datos

Figura 4.14. Comando SELECT con un clculo en la condicin.

Operador LIKE
En la mayora de los casos, en las condiciones de las clusulas WHERE hay coincidencias exactas, como recuperar filas de los clientes situados en la ciudad de Grove. Sin embargo, en algunos casos las coincidencias exactas no funcionan. Por ejemplo, podramos saber que el valor deseado contiene slo un conjunto determinado de caracteres. En esos casos, utilizaremos el operador LIKE con un smbolo de porcentaje, como vemos en el ejemplo 12. En lugar de buscar la igualdad, el operador LIKE utiliza uno o ms caracteres de porcentaje para buscar una coincidencia a partir de un modelo. Ejemplo 12 Liste el cdigo, nombre y direccin completa de los clientes situados en una calle que contenga las letras Central. Todo lo que sabemos es que las direcciones que queremos contienen un conjunto determinado de caracteres (Central) en alguna parte de la columna direcClien, pero no sabemo s dnde. En SQL para Oracle y para SQL Server, el signo de porcentaje (%) se utiliza como comodn para representar cualquier conjunto de caracteres. Como vemos en la figura 4.15, la condicin LIKE %Central% recupera informacin de los clientes cuya calle contiene un conjunto de caracteres, seguidos de las letras Central, seguidas posteriormente por algunos caracteres adicionales. Observe que esta consulta tambin recuperara informacin de un cliente cuya calle es 123 Centralia, porque Centralia tambin contiene las letras Central.

Figura 4.15. Comando SELECT con un operador LIKE y comodines. Otro smbolo comodn en SQL es el guin bajo (_), que representa cualquier carcter individual. Por ejemplo, T_m representa la letra T seguida de cualquier carcter, seguido de la letra m, y recuperara filas en que se incluyeran las palabras Tim, Tom o T3m. 59

Asignatura: Sistemas de Base de Datos

Nota: En una base de datos grande slo debemos utilizar los comodines cuando sea absolutamente necesario. Las bsquedas con comodines pueden ser extremadamente lentas para el proceso.

Operador IN
Una clusula IN, que consiste en el operador IN seguido de un conjunto de valores, proporciona una manera concisa de escribir ciertas condiciones, como ilustra el ejemplo 13. Ms adelante veremos otro uso de la clusula IN en ejemplos ms complejos. Ejemplo 13 Liste el cdigo, nombre y lmite de crdito de cada cliente que tenga un lmite de crdito de $5000, $10000 y $15000. En esta consulta podemos utilizar una clusula IN para determinar si un lmite de crdito es $5000, $10000 o $15000. Obtendremos la misma respuesta utilizando la condicin WHERE limiCreClien = 5000 OR limiCreClien = 10000 OR limiCreClien = 15000. El mtodo que vemos en la figura 4.17 es ms sencillo porque la clusula IN contiene un conjunto de valores: 5000, 10000 y 15000. La condicin es verdadera para aquellas filas en que el valor de la columna limiCreClien est en ese conjunto.

Figura 4.17. Comando SELECT con una clusula IN.

Ordenar
El orden de las filas en una tabla es inmaterial para el DBMS. Desde un punto de vista prctico, esto significa que cuando consultamos una base de datos relacional, no hay ningn orden definido en el que mostrar los resultados. Las filas se pueden mostrar en el orden en que se introdujeron originalmente los datos, pero ni siquiera esto es del todo cierto. Si el orden en que se muestran los datos es importante, podemos solicitar expresamente que los resultados aparezcan en un orden deseado. En SQL especificaremos el orden de los resultados utilizando la clusula ORDER BY.

60

Asignatura: Sistemas de Base de Datos

Clusula ORDER BY
Utilizamos la clusula ORDER BY para listar datos en un orden especfico, como vemos en el ejemplo 14. Ejemplo 14 Liste el cdigo, nombre y balance de los clientes. Ordene el resultado en orden ascendente (aumentando) por balance. La columna segn la que ordenamos los datos se denomina clave de ordenacin o simplemente clave. En el ejemplo 14 tenemos que ordenar el resultado por balance, por tanto la clave de ordenacin es la columna balanClien. Para ordenar el resultado utilice la clusula ORDER BY seguida de la clave de ordenacin. Si no especificamos un orden, por defecto ser ascendente. La consulta aparece en la figura 4.18.

Figura 4.18. Comando SELECT para obtener filas.

Opciones adicionales para ordenar


En ocasiones podemos necesitar ordenar datos utilizando ms de una clave, como vemos en el ejemplo 15. Ejemplo 15 Liste el cdigo, nombre y lmite de crdito de todos los clientes. Ordnelos por lmite de crdito en orden descendente y despus por nombre. (En otras palabras primero ordene los clientes con lmite de crdito en orden descendente. Dentro de cada grupo de clientes con el mismo lmite de crdito, ordnelos por nombre en orden ascendente.) En el ejemplo 15 tenemos dos nuevos conceptos: ordenar por varias claves (limiCreClien y nombreClien) y ordenar una de las claves en orden descendente. Cuando tenemos que ordenar

61

Asignatura: Sistemas de Base de Datos datos por dos columnas, la columna ms importante (en este caso, limiCreClien) se denomina clave principal de ordenacin y la columna menos importante (en este caso, nombreClien) se denomina clave secundaria de ordenacin. Para ordenar por mltiples claves, listaremos las claves por orden de importancia en la clusula ORDER BY. Para clasificar en orden descendente, despus del nombre de la clave de ordenacin situaremos el operador DESC, como vemos en la figura 4.19.

Figura 4.19. Comando SELECT para ordenar datos por mltiples claves de ordenacin.

62

Vous aimerez peut-être aussi