0% encontró este documento útil (0 votos)
30 vistas

SQL02

Este documento describe consultas simples en SQL que involucran una sola tabla. Explica las cláusulas SELECT, FROM y WHERE, y cómo se usan para seleccionar filas y columnas específicas de una tabla. También cubre temas como filas duplicadas, selección de todas las columnas y condiciones de búsqueda.

Cargado por

rauljrz146
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
30 vistas

SQL02

Este documento describe consultas simples en SQL que involucran una sola tabla. Explica las cláusulas SELECT, FROM y WHERE, y cómo se usan para seleccionar filas y columnas específicas de una tabla. También cubre temas como filas duplicadas, selección de todas las columnas y condiciones de búsqueda.

Cargado por

rauljrz146
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 11

Conferencia # 2:

CONSULTAS SIMPLES

INTRODUCCIÓN

Recordar los aspectos más importantes de la clase anterior:


- uso del SQL,
- forma general de sus instrucciones,
- tipos de datos,
- nombres
Insistir sobre el ejemplo que se utilizará.

DESARROLLO
Comenzaremos el estudio de consultas simples a una Base de Datos, en estas
consultas participará solamente una tabla.
Para la realización de consultas se utiliza la sentencia SELECT, la cual recupera
datos de una BD y los devuelve en forma de resultados de la consulta.
Para consultas sencillas, la petición en lenguaje inglés y la sentencia SELECT son
muy similares.
La sentencia SELECT tiene el siguiente formato:

SELECT ítem-seleccionado
ALL ,
DISTINCT *

FROM especificación de tabla


,

WHERE condición de búsqueda

GROUP BY columna de agrupación


,

HAVING condición de búsqueda

ORDER BY especificación de ordenación


,

1
Como se puede apreciar la sentencia SELECT consiste de seis cláusulas. Las
cláusulas SELECT y FROM necesarias, las otras cuatro son opcionales. Aunque lo
veremos después con más detenimiento resumiremos el uso de cada una de las
cláusulas:
Ø La cláusula SELECT lista los datos a recuperar por la sentencia. Los ítems
pueden ser columnas de la BD o columnas a calcular por SQL.
Ø La cláusula FROM lista las tablas que contienen los datos a recuperar la
consulta.
Ø La cláusula WHERE dice a SQL que incluya sólo ciertas filas de datos en los
resultados de la consulta, precisamente los que satisfacen la condición de
búsqueda que se especifica.
Ø La cláusula GROUP BY especifica una consulta resumen. Agrupa todas las
filas similares y produce una fila resumen.
Ø La cláusula HAVING dice a SQL que incluya sólo ciertos grupos producidos
por la cláusula GROUP BY.
Ø La cláusula ORDER BY ordena los resultados de las consultas sobre la base de
los datos de una o más columnas.

Cláusula SELECT
La cláusula SELECT que empieza cada sentencia SELECT especifica los ítems de
datos a recuperar por la consulta. Un ítem puede ser:
- Un nombre de columna, identificando una columna de la tabla designada en la
cláusula FROM. Cuando un nombre de columna aparece en el SELECT, SQL
simplemente toma el valor de esa columna de cada fila de la tabla de la BD.
- Una constante, especificando que el mismo valor constante va a aparecer en
todas las filas de los resultados de la consulta.
- Una expresión SQL, indicado que SQL debe calcular el valor a colocar en los
resultados.

Cláusula FROM
Especifica las tablas que intervienen en la consulta. Estas tablas se llaman tablas
fuentes. Todas las consultas que veremos en esta clase tienen una única tabla fuente.

Resultados de consultas

El resultado de una consulta SQL es siempre una tabla de datos, semejante a


cualquier otra tabla. Si se trabaja con SQL interactivo será una tabla que se muestra
en la pantalla, si se trabaja desde un programa será una tabla que de alguna manera

2
ese programa deberá manipular. Las columnas de la tabla corresponden a los items
de la cláusula SELECT.
Es importante destacar que aún cuando la consulta devuelva un valor, este considera
una tabla de una fila y una columna.

Consultas Sencillas

Las consultas más sencillas solicitan columnas de datos de una única tabla en la BD.
Generalmente la sentencia SELECT incluye sólo las cláusulas SELECT y FROM y
conceptualmente SQL procesa la consulta recorriendo la tabla nominada en la
cláusula FROM, una fila cada vez. Por cada fila, SQL toma los valores de las
columnas solicitadas en la lista de selección y produce una única fila de resultados.
Los resultados contienen por tanto una fila de datos por cada fila de la tabla.
Ejemplo:
Listar la ciudad, región e importe de ventas de cada oficina
SELECT ciudad, region, ventas
FROM oficinas

Además de las columnas cuyos valores provienen directamente de la BD una


consulta SQL puede incluir columnas calculadas cuyos valores se calculan a partir
de los valores de los datos almacenados. Para solicitar una columna calculada se
especifica una expresión en la lista de selección.
Ejemplo
Listar la ciudad, la región y el importe por encima o por debajo del objetivo para
cada oficina.
SELECT ciudad, region, ventas-objetivo
FROM oficinas

(Lo que ha se ha señalado en negritas constituye la columna calculada.)

Listar el valor del inventario para cada producto.


SELECT id_fab, id_producto, descripcion, precio*existencias
FROM productos

Listar las ventas de cada oficina


SELECT oficina, ‘tiene ventas de ‘, ventas
FROM oficinas

3
(Los resultados de la consulta parecen consistir en una “frase” distinta por cada
oficina, pero realmente es una tabla de 3 columnas. La segunda columna contiene la
misma cadena de texto para cada una de las filas.)

Selección de todas las columnas (SELECT *)

A veces es conveniente visualizar el contenido de todas las columnas de una tabla.


SQL permite utilizar un * en lugar de la lista de selección como abreviatura de
“todas las columnas”.

Mostrar todos los datos de la tabla OFICINAS

SELECT *
FROM oficinas

Como se mostró en el diagrama sintáctico SQL estándar prohibe el uso de * junto a


una lista de ítems. Hay dialectos (como SQL Server) que si lo permite y por lo tanto
pudiera escribirse la siguiente consulta:
SELECT *, ventas-objetivo
FROM oficinas

Filas duplicadas (DISTINCT)

Si una consulta incluye la clave primaria de una tabla en su lista de selección


entonces cada fila de resultados será única. Si no se incluye la clave primaria en los
resultados pueden producirse filas duplicadas.

Por ejemplo:

Listar los números de empleados de todos los directores de oficina:

SELECT dir
FROM oficinas

Si un director dirige más de una oficina su número saldría tantas veces como oficina
dirija.
Para evitar esta repetición se inserta la palabra clave DISTINCT en la cláusula
SELECT justo antes de la lista de selección.
En nuestro caso queda la consulta de la siguiente manera:

SELECT DISTINCT dir


FROM oficinas

4
SQL efectúa esta consulta generando primero un conjunto completo de resultados y
eliminando luego las filas que son duplicados exactos de alguna otra para formar los
resultados finales.

Si no se especifica la palabra clave DISTINCT, SQL no elimina las filas duplicadas.


También se puede especificar la palabra ALL para indicar explícitamente que las
filas duplicadas sean incluidas, pero es innecesario ya que este es el comportamiento
por omisión.

Observar que hasta este momento todas las operaciones que hemos realizado sobre
las tablas corresponden a la operación de proyección del álgebra relacional.

Selección de filas (cláusula WHERE)

Las consultas SQL que recuperan todas las filas de una tabla no son frecuentes en
las aplicaciones. Generalmente se desea seleccionar parte de las filas de una tabla.
La cláusula WHERE se emplea para especificar las filas que se desean recuperar.
Esta cláusula consta de la palabra clave WHERE seguida de una condición de
búsqueda que especifica las filas a recuperar. Dicha condición en general es una
expresión lógica

Ejemplos:

Muestra todas las oficinas en donde las ventas excedan al objetivo.

SELECT ciudad, ventas, objetivo


FROM oficinas
WHERE ventas > objetivo

Muestra el nombre, las ventas y la cuota del empleado número 105.

SELECT nombre, ventas, cuota


FROM vendedores
WHERE num_empl=105

SQL recorre cada fila de la tabla, una a una, y aplica la condición. Se pueden
producir tres casos:
- Si la condición de búsqueda es TRUE (cierta), la fila en cuestión se incluye en
los resultados de la consulta.
- Si la condición de búsqueda es FALSE (falsa), la fila se excluye de los
resultados de la consulta.
- Si la condición de búsqueda tiene un valor NULL (desconocido), la fila se
excluye de los resultados de la consulta.

La condición de búsqueda actúa como un filtro para la tabla en cuestión. La cláusula


WHERE añade la operación de selección del álgebra relacional.

5
Condiciones de búsqueda

SQL ofrece un conjunto de condiciones de búsqueda. Se pueden agrupar en cinco


grupos (llamados predicados en el estándar).

a) Test de comparación

Es la búsqueda más utilizada, cuando se comparan los valores de dos


expresiones. Se pueden utilizar los operadores <, <=, >, >=, =, <>

Los ejemplos que vimos anteriormente son un ejemplo de este test.

En el caso que alguna de las dos expresiones sea NULL la comparación genera
un valor NULL. Observe que si es la única expresión en la cláusula WHERE esa
fila no se incluirá en el resultado.

b) Test de Rango

Comprueba si un valor de dato se encuentra entre dos valores especificados. Su


diagrama sintáctico es el siguiente:

expresión de test BETWEEN exp-inf. AND exp-sup


NOT

La primera expresión define el valor a comprobar, las expresiones segunda y


tercera definen los extremos inferior y superior del rango a comprobar. Los tipos
de datos de las tres expresiones deben ser comparables.

Ejemplo:

Listar los pedidos que se hayan hecho entre el 01-Oct-89 y en 31-Dic-89.

SELECT num_pedido, fecha_pedido, fab, producto, importe


FROM pedidos
WHERE fecha_pedido BETWEEN ’01-10-89’ AND ’31-12-89’

El test incluye los puntos extremos del rango, por lo que los pedidos remitidos el
1 de octubre o el 31 de diciembre se incluirán en los resultados de la consulta.

Listar los pedidos cuyo importe esté entre 20000 y 30000


SELECT num_pedido, importe
FROM pedidos
WHERE importe BETWEEN 20000 AND 30000

6
Listar los vendedores cuyas ventas no están entre el 80 y el 120 por ciento de su
cuota.

SELECT nombre, ventas, cuota


FROM vendedores
WHERE ventas NOT BETWEEN (0.8*cuota) AND (1.2*cuota)

Las expresiones especificadas en el test de rango pueden ser cualquier expresión


SQL válida. Se imponen las siguientes reglas para el manejo de los valores
nulos.
§ Si la expresión de test produce un valor NULL, o si ambas expresiones
del rango producen valores NULL, el test BETWEEN devuelve un
resultado NULL.
§ Si la expresión que define el extremo inferior del rango produce un valor
NULL, el test BETWEEN devuelve FALSE si el valor de test es superior
al límite superior, y NULL en caso contrario.
§ Si la expresión que define el extremo superior del rango produce un
valor NULL, el test BETWEEN devuelve FALSE si el valor de test es
menor que el límite inferior, y NULL en caso contrario.

c) Test de pertenencia a conjunto

Una prueba típica de consultas es determinar si un valor de dato coincide con


uno de una lista de valores objetivo. A este tipo de test se le llama test de
pertenencia a conjunto y su diagrama sintáctico se puede ver a continuación:

expresión de test IN ( constante )


NOT ,

Ejemplos:

Listar los vendedores que trabajan en las oficinas 11, 13 y 22.

SELECT nombre, cuota, ventas


FROM vendedores
WHERE oficina_vend IN (11, 13, 22)

Listar todos los pedidos remitidos un jueves en enero de 1990

SELECT num_pedido, fecha_pedido, importe


FROM pedidos
WHERE fecha_pedido IN (’04-01-90’, ’11-01-99’, ’18-01-99’, ’25-01-99’)

La expresión del test puede ser una expresión cualquiera. Todos los elementos
de la lista deben tener el mismo tipo de datos, y este debe coincidir con el tipo
de la expresión.

7
Si la expresión produce NULL, el test devuelve NULL.

d) Test de correspondencia con patrón

El test de correspondencia con patrón es utilizado para recuperar datos sobre la


base de una correspondencia parcial con los valores almacenados en la BD. Su
diagrama sintáctico se muestra a continuación:

nombre de columna LIKE patrón


NOT ESCAPE carácter escape

El test de correspondencia con patrón comprueba si el valor de dato de una


columna se ajusta a un patrón especificado. El patrón es una cadena que puede
incluir uno o más caracteres comodines. Estos caracteres se interpretan de una
manera especial.

Caracteres comodines:

% - Se interpreta como una secuencia de cero o más caracteres. (Equivalente al


* del MS-DOS)
_ - Se interpreta como un carácter. (Equivalente al ? de MS-DOS)

Ejemplos:

SELECT empresa, lim_credito


FROM clientes
WHERE empresa LIKE ‘Smith% Corp.’

Se busca en la tabla clientes aquellos cuyo nombre comience por Smith, luego
tengan una secuencia de caracteres y terminen en Corp.

SELECT empresa, lim_credito


FROM clientes
WHERE empresa LIKE ‘Smiths_n Corp.’

Esta consulta busca en la tabla clientes aquellos cuyos nombres comienzan con
Smiths, tiene un carácter luego y después n Corp.

El test LIKE debe aplicarse a columnas con tipo de dato cadenas. Si el valor de
dato en la columna es NULL, el test devuelve el valor NULL.

La cláusula ESCAPE se utiliza cuando se quiere utilizar uno de los comodines


en el marco de la cadena que se quiere comparar. Por ejemplo si se quiere
encontrar los productos cuyos identificadores comiencen con ‘A%BC’. Si
escribimos LIKE ‘A%BC’, el % se interpretara como un comodín. Se utiliza
entonces un carácter llamado escape, cuando el se encuentra en la cadena el
carácter que le sigue no se trata como comodín.

8
Nuestro ejemplo quedaría:
SELECT num_pedido, producto
FROM pedidos
WHERE producto LIKE ‘A$%BC%’ ESCAPE ‘$’

El primer signo de por ciento en el patrón, que sigue al carácter de escape, es


tratado como un literal no como un comodín, el segundo, sin embargo, funciona
como comodín.

Observar que el carácter de escape se puede elegir en cada instrucción de forma


distinta.

e) Test de valor nulo

A veces es útil comprobar explícitamente los valores nulos en una condición de


búsqueda y gestionarlos directamente. SQL proporciona un test especial de valor
nulo (NULL), cuyo diagrama sintáctico se muestra a continuación.

nombre de columna IS NULL

NOT

Hallar el vendedor que aún no tiene asignada una oficina

SELECT nombres
FROM vededores
WHERE oficina_vend IS NULL

A diferencia de otros test este nunca producirá un valor NULL.

Condiciones de búsqueda compuestas (and, or y not)

Las condiciones de búsqueda simples, descritas anteriormente devuelven un valor


TRUE, FALSE o NULL cuando se aplican a una fila de datos. Utilizando las reglas
de la lógica se pueden combinar estar condiciones de búsquedas simples para
formar otras más complejas. El diagrama sintáctico se muestra a continuación

WHERE condición de búsqueda


NOT

AND

OR

Ejemplo:

9
Hallar los vendedores que están por debajo de la cuota o con ventas inferiores a
30000.
SELECT nombre, cuota, ventas
FROM vendedores
WHERE (ventas < cuota) OR (ventas < 30000)

Los paréntesis en este caso son opcionales, solo se han puesto para claridad de la
expresión.
El estándar especifica que estos operadores tienen la siguiente prioridad: NOT,
AND y OR.

Las tablas de verdad, incluyendo los valores nulos, se muestran en las siguientes
tablas:

NOT
TRUE FALSE
FALSE TRUE
NULL NULL

AND TRUE FALSE NULL


TRUE TRUE FALSE NULL
FALSE FALSE FALSE NULL
NULL NULL NULL NULL

OR TRUE FALSE NULL


TRUE TRUE TRUE TRUE
FALSE TRUE FALSE NULL
NULL TRUE NULL NULL

Las posiciones que están en negritas serían las operaciones donde participan
valores nulos.

10
CONCLUSIONES

Insistir en los aspectos más importantes de la clase:

Sentencia SELECT

SELECT ítems a seleccionar


FROM tabla
WHERE condición de búsqueda

Condiciones de búsqueda:
Test de comparación
Test de rango
Test de pertenencia a conjuntos
Test de concordancia con patrón
Test de valores nulos

Utilización de expresiones complejas a partir de los operadores NOT, AND,


OR.

Bibliografía:
Del Texto señalado: Capítulo 6 (página 83 – 112).

Ejercicios:
1. Listar las oficinas de ventas con sus objetivos y ventas reales.
2. Listar las oficinas de ventas de la región Este con sus objetivos y ventas.
3. Listar las oficinas de ventas de la región Este cuyas ventas exceden a sus objetivos.
4. Listar los nombres, oficinas y fechas de contrato de todos los vendedores.
5. ¿Cuál es el nombre, cuota y ventas del empleado número 107?
6. Listar el nombre y fecha de contrato de cualquier vendedor cuyas ventas sean
superiores a 500 000.
7. Listar todos los nombres de los vendedores, sus cuotas y directores.
8. Mostrar que sucederá si se eleva la cuota de cada vendedor en un 3% de sus ventas
anuales
9. Muestra los empleados dirigidos por Bob Smith (empleado 104).
10. Halla los vendedores contratados antes de 1988.
11. Listar las oficinas cuyas ventas están por debajo del 80% del objetivo.
12. ¿Cuál es el nombre y el límite de crédito del cliente número 2107?
13. Listar los pedidos cuyos importes están entre 30000 y 40000.
14. Listar los pedidos obtenidos por los vendedores 107, 109, 101 y 103.
15. Listar todos lo vendedores cuyos nombres comience con B.
16. Listar todos los productos del fabricante QSA cuyo identificador comience por XK.
17. Listar los vendedores a los que se ha asignado oficina.
18. Hallar todos los vendedores que están pro debajo de la cuota, pero cuyas ventas no
son inferiores a 150000.

11

También podría gustarte