SQL: Consultas Simples parte I

Publicado: julio 2, 2010 en SQL
Etiquetas:,

Por muchas razones, las consultas son el corazón del lenguaje SQL. La instrucción SELECT, que se usa para expresar consultas SQL, es la instrucción más potente y compleja de las instrucciones SQL. A pesar de las muchas opciones que ofrece la instrucción SELECT, es posible comenzar simplemente y después construir consultas más complejas.

La instrucción SELECT

La instrucción SELECT recupera datos de una base de daros y los devuelve en forma de resultados de la consulta. Aquí hay algunas consultas de ejemplo que recuperan información sobre las oficinas comerciales:

Listar las oficinas comerciales con sus objetivos y ventas actuales.

SELECT CIUDAD, OBJETIVO, VENTAS
FOM OFICINAS

CIUDAD                   OBJETIVO                          VENTAS

—————– ———————————— ————————–

Daimiel                    300.000,00  €                186.042,00  €

Navarra                   575.000,00  €                692.637,00  €

Castellón                 800.000,00  €                735.042,00  €

Almería                    350.000,00  €                367.911,00  €

León                        725.000,00  €                835.915,00  €

Listar las oficinas comerciales de la región Este con sus objetivos y ventas.

SELECT CIUDAD, OBJETIVO, VENTAS
FROM OFICINAS
WHERE REGION = ‘Este’

CIUDAD                   OBJETIVO                          VENTAS

—————– ———————————— ————————–

Navarra                   575.000,00  €                692.637,00  €

Castellón                 800.000,00  €                735.042,00  €

Almería                    350.000,00  €                367.911,00  €

Listar las oficinas comerciales de la región Este cuyas ventas excedan sus objetivos y ordenadas según el nombre de ciudad.

SELECT CIUDAD, OBJETIVO, VENTAS
FROM OFICINAS
WHERE REGION = ‘Este’
AND VENTAS > OBJETIVO
ORDER BY CIUDAD

CIUDAD                   OBJETIVO                          VENTAS

—————– ———————————— ————————–

Almería                   350.000,00  €                367.911,00  €

Navarra                   575.000,00  €                692.637,00  €

¿Cuáles son los objetivos y ventas de las oficinas de la región Este?

SELECT AVG (OBJETIVO), AVG (VENTAS)
FOM OFICINAS
WHERE REGION = ‘Este’

AVG (OBJETIVO)              AVG (VENTAS)

——————————– ——————————–

575.000,00  €                        598.530,00  €

Para las consultas simples, la solicitud en ingles y la instrucción SELECT de SQL son muy similares. Cuando la solicitud se torna mas complicada, se deben usar más características, de la instrucción SELECT para especificar de forma precisa la consulta.

La Figura 1 muestra la forma completa de la instrucción SELECT, que consiste en seis cláusulas. Las cláusulas SELECT y FROM son obligatorias. El resto de cláusulas es opcional. Solo se incluyen en una instrucción SELECT cuando se quiere usar las funciones que proveen. La siguiente lista resume la función de cada cláusula:

  • La cláusula SELECT lista los elementos de datos a recuperar por la instrucción SELECT. Los elementos pueden ser columnas de la base de datos o columnas calculadas por SQL al procesar la consulta.
  • La cláusula FROM lista las tablas que contienen los datos a recuperar por la consulta.
  • La cláusula WHERE informa a SQL de que incluya solo ciertas filas de datos en los resultados de la consulta. Se usa una condición de búsqueda para especificar las filas deseadas. Los usos básicos de la cláusula WHERE se describen en la sección <<Selección de filas (cláusula WHERE) >>.

Figura 1 Diagrama sintáctico de la instrucción SELECT

  • La cláusula GROUP BY especifica una consulta de resumen. En lugar de producir una fila de resultados por cada fila de datos de la base de datos, agrupa filas similares y produce una fila de resumen de los resultados de cada grupo.
  • La cláusula HAVIGN indica a SQL que incluya en el resultado solo determinados grupos producidos por la cláusula GROUP BY. Al igual que la cláusula WHERE, usa una condición de búsqueda para especificar los grupos deseados.
  • La cláusula OREDER BY ordena los resultados tomando como base los datos de una o  más columnas. Si se omite, los resultados no se ordenan.

La cláusula SELECT

La clausula SELECT con la que comienza cada instrucción SELECT específica los elementos de datos que recupera la consulta. Los elementos se especifican usualmente por una lista de selección, una lista de elementos de selección separados por comas. Cada elemento de selección en la lista genera una única columna de resultados de la consulta, de izquierda a derecha. Un elemento de selección puede ser:

  • Un nombre de columna, que identifica una columna de la tabla o tablas que aparecen en la clausula FROM. Cuando aparece un nombre de columna como elemento de selección, SQL simplemente toma el valor de esa columna de cada fila de la tabla de la base de daros y lo pone en la fila correspondiente de los resultados de la consulta.
  • Una constante, que específica que ese mismo valor de constante aparecerá en cada fila de los resultados de la consulta.
  • Una expresión SQL, que indica que SQL debe calcular el valor a poner en los resultados, según se especifica en la expresión.

La cláusula FROM

La clausula FROM consiste en la palabra clave FROM seguida por una lista de especificaciones de tabla separadas por comas. Cada especificación de tabla identifica una tabla que contiene datos a recuperar por la consulta. Estas tablas se denominan tablas fuentes de la consulta (y de la instrucción SELECT), por que son la fuente de todos los datos de los resultados. Todas las consultas de este capitulo tienen una única tabla fuente, y cada clausula FROM contienen un único nombre de tabla.

Resultados de las consultas

El resultado de una consulta SQL es siempre una tabla de datos, como las de la base de datos, como las de la base de datos. Si se escribe una instrucción SELECT usando SQL interactivo, el SGBD muestra los resultados de forma tabular en la pantalla de la computadora. Si un programa envía una consulta al SGBD usando programación con SQL, se devuelve la tabla de resultados al programa. En cualquier caso, los resultados siempre tienen el mismo formato de filas y columnas que las tablas reales de la base de datos, como se muestra en la Figura 2. Los resultados de una clausula son usualmente una tabla de tres columnas (por que pide tres elementos de datos) y diez filas (por que hay 10 representantes).

Figura 2 La estructura tabular de los resultados de las consultas SQL

Listar los nombres, oficinas y fechas de contratación de todos los representantes.

SELECT NOMBRE, OFICINA_REP,  FECHA _CONTRATO
FROM REPRESENTANTES

NOMBRE                                     OFICINA_REP         FECHA_CONTRATO

————————————-  —————————  ———————————-

Bruno  Arteaga                                          13                    12-FEB-88

Maria Jiménez                                           11                    12-OCT-89

Susana Santos                                          21                    10-DIC-86

Samuel Clavel                                           11                    14-JUN-88

Bernardo Sánchez                                    12                    19-MAY-87

Daniel Ruidrobo                                        12                    20-OCT-86

Tomas Saz                                            NULL                  13-ENE-90

León Freire                                               21                    12-OCT-89

Pablo Cruz                                               12                     01-MAR-87

Neus Azcarate                                         22                     14-NOV-88

En cambio, la siguiente consulta produce una única fila por que solo un representante tiene el número de empleado requerido. Aunque esta única fila de resultados parezca menos <<tabular>> que los resultados multifila, SQL lo considera una tabla de tres columnas y una fila.

¿Cuáles son el nombre, la cuota y las ventas del empleado numero 107?

SELECT NOMBRE, CUOTA, VENTAS
FROM REPRESENTANTES
WHERE NUM_EMPL = 107

NOMBRE                                         CUOTA                        VENTAS

————————————-  —————————  ———————————-

Neus Azcarate                             300.000,00  €               186.042,00  €

En algunos casos, los resultados de una consulta puede ser un único valor, como el siguiente ejemplo:

¿Cuáles son las ventas promedio de nuestros representantes?

SELECT AVG (VENTAS)
FROM REPRESENTANTES

AVG (VENTAS)

————————–

289.353,20  €

Estos resultados son una tabla, aunque unas muy pequeña que solo tiene una fila y una columna.

Finalmente, es posible que una consulta no produzca ninguna fila como resultado, como en este ejemplo:

Listar el nombre y fecha de contrato de quienes tengan ventas superiores a 500.000  €.

SELECT NOMBRE, FECHA_CONTRATO
FROM REPRESENTANTES
WHERE VENTAS > 500000,00  €

NOMBRE                FECHA_CONTRATO

——————–  ————————————-

Incluso en esta situación los resultados son una tabla. En este caso es una tabla vacía, con dos columnas y ninguna fila.

Nótese que el soporte de SQL para datos ausentes se extiende también a los resultados de las consultas. Si un elemento de datos de la base de datos contiene un valor NULL, el valor NULL aparecerá en los resultados de la consulta cuando se recupere el elemento de datos. Por ejemplo, la tabla REPRRESENTANTES contiene valores NULL en sus columnas CUOTA y JEFE. Las siguiente consulta devuelve estos valores NULL en la segunda y tercera columna de los resultados de la consulta.

Listar los representantes, sus cuotas y sus jefes.

SELECT NOMBRE, CUOTA, JEFE
FROM REPRESENTANTES

NOMBRE                                       CUOTA                            JEFE

————————————-  —————————  ———————————-

Bruno  Arteaga                            350.000,00                           104

Maria Jiménez                             300.000,00                           106

Susana Santos                            350.000,00                           108

Samuel Clavel                             275.000,00                          NULL

Bernardo Sánchez                      200.000,00                            106

Daniel Ruidrobo                          300.000,00                            104

Tomas Saz                                           NULL                            101

León Freire                                 350.000,00                             106

Pablo Cruz                                  275.000,00                             104

Neus Azcarate                            300.000,00                             108

El hecho de que una consulta SQL produzca siempre una tabla es importante. Significa que los resultados de la consulta se pueden almacenar como una tabla en la base de datos. Significa que el resultado de dos consultas similares se pueden combinar para formar una tabla mayor de resultados. Finalmente, significa que los resultados de una consulta puede ser el objetivo de otras consultas posteriores. Una estructura tabular de una base de datos relacional tiene, por tanto, una relación sinérgica con las capacidades de las consultas relacionales de SQL. Las tablas se pueden consultar y las consultas producen tablas.

SQL Manual de Referencia
Anuncios
comentarios
  1. zegnhabi dice:

    Excelente me sentí en una clase del lic gama… ñ_ñ

  2. Jose Luis Barrientos Teran dice:

    xD esas meras son xD

  3. Erick P dice:

    siii, muy bien explicado.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s