Estructuras y Programacion

6.3 Estructura Basica de Consulta

website translator plugin

La estructura básica de una expresión para consulta SQL consta de tres cláusulas:

SELECT

FROM

WHERE

 

La cláusula SELECT se usa para listar los atributos que se desean en el resultado de una consulta, es un modo literal de decir “seleccionar”

La cláusula FROM lista las relaciones que se van a examinar en la evaluación de la expresión es un modo literal de decir “de”

La cláusula WHERE costa de un predicado que implica atributos de las relaciones que aparecen en la cláusula FROM. Es un modo literal de decir “donde”

Una consulta básica en SQL tiene la forma: (seleccionar, de, donde)

SELECT A1, A2, A3

FROM r1,r2, r3

WHERE A1=’Federico’

;

Donde A1 = atributo o campo de la tabla, si se pone * o la palabra ALL se seleccionará todo.

r1 = relación ( Tabla )

A1=’Federico’ = predicado o condición

Ejemplo 2.1 : Seleccionar todos los nombres de las personas que tengan el apellido MARQUESI de la tabla persona

SELECT nombre

FROM persona

WHERE apellido = " MARQUESI";

NSWER

NOMBRE

1

MARTIN

2

PABLO

El resultado de una consulta es por supuesto otra relación. Si se omite la cláusula WHERE, el predicado P es verdadero. La lista A1, A2,..., An puede sustituirse por un asterisco (*) para seleccionar todos los atributos de todas las relaciones que aparecen en la cláusula FROM, aunque no es conveniente elegir esta ultima opción salvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo

Alias: Es posible renombrar los atributos y las relaciones, a veces por conveniencia y otras veces por ser necesario, para esto usamos la cláusula AS como en el siguiente ejemplo.

Ejemplo 2.2

SELECT P.nombre AS [PRIMER NOMBRE]

FROM persona P

WHERE apellido = "MARQUESI"

 

ANSWER

PRIMER NOMBRE

1

MARTIN

2

PABLO

En este ejemplo cabe destacar un par de cosas. Cuando nos referimos a un atributo como es el caso de nombre, podemos referirnos a este usando la relación ( o el alias en este ejemplo ) a la que pertenece el atributo seguido de un punto seguido del atributo <P.nombre>, a veces esta notación será necesaria para eliminar ambigüedades. Los corchetes los usamos cuando usamos espacios en blancos o el caratér (–) en el nombre de atributo o alias.

Usar alias en los atributos nos permite cambiar el nombre de los atributos de la respuesta a la consulta.

Cuando asociamos un alias con una relación decimos que creamos una variable de tupla. Estas variables de tuplas se definen en la cláusula FROM después del nombre de la relación.

En las consultas que contienen subconsultas, se aplica una regla de ámbito a las variables de tupla. En una subconsulta está permitido usar solo variables de tupla definidas en la misma subconsulta o en cualquier consulta que tenga la subconsulta.

 

Predicados y conectores

Los conectores lógicos en SQL son:

AND

OR

NOT

 

La lógica de estos conectores es igual que en cualquier lenguaje de programación y sirven para unir predicados.

Las operaciones aritméticas en SQL son:


+ ( Suma )

- ( Resta )

* ( Multiplicación )

/ ( División )

 

También incluye el operador de comparación BETWEEN, que se utiliza para valores comprendidos “entre”

Ejemplo: Encontrar todos los nombres y dni de las personas cuyos dni sea mayor que 26 millones y menor a 28 millones

SELECT nombre, dni

FROM persona

WHERE dni BETWEEN 26000000 and 28000000

 

Análogamente podemos usar el operador de comparación NOT BETWEEN.

SQL también incluye un operador de selección para comparaciones de cadena de caracteres. Los modelos se describen usando los caracteres especiales:

El carácter ( % ) es igual a cualquier subcadena

El operador ( _ ) es igual a cualquier carácter

Estos modelos se expresan usando el operador de comparación LIKE. Un error muy frecuente es tratar de utilizar los modelos mediante el operador de igualdad ( = ) lo cual es un error de sintaxis.

Ejemplo: encontrar los nombres que comiencen con la letra p o el nombre tenga exactamente 6 caracteres de la relación persona

SELECT nombre

FROM persona

WHERE (nombre LIKE "P%") OR (nombre LIKE "_ _ _ _ _ _")

 

SQL incluye las operaciones de conjuntos UNION, INTERSECT, MINUS, que operan sobre relaciones y corresponden a las operaciones del álgebra unión, intersección y resta de conjuntos respectivamente. Para realizar esta operación de conjuntos debemos tener sumo cuidado que las relaciones tengan las mismas estructuras.


Incorporemos ahora una nueva relación, llamada jugadores que representa las personas que juegan al fútbol, sus atributos serán DNI, puesto y nro_camiseta. Supongamos que esta nueva tabla está conformada de la siguiente manera

Ejempl: Obtener todos los nombres de la relación persona cuyos apellidos sean Marquesi o Serrat

SELECT nombre

FROM PERSONA

WHERE apellido = "MARQUESI"


UNION

SELECT nombre

FROM PERSONA

WHERE apellido = "SERRAT"

 

Obtener todos los DNI de los que juegan al fútbol y, además, están en la lista de la relación persona


SELECT dni

FROM persona

INTERSECT

SELECT dni

FROM jugadores

 

Por omisión, la operación de union elimina las tuplas duplicadas. Para retener duplicados se debe escribir UNION ALL en lugar de UNION.


El conector IN prueba si se es miembro de un conjunto, donde el conjunto es una colección de valores producidos en lo general por una cláusula SELECT. Análogamente el conector NOT IN prueba la no pertenencia al conjunto

Ejemplo: Encontrar los nombres de las personas que juegan al fútbol y, además, se encuentran en la relación persona


SELECT nombre, apellido

FROM persona

WHERE dni IN

(SELECT dni

FROM jugadores)

 

Es posible probar la pertenencia de una relación arbitraria SQL usa la notación de elementos <v1,v2,...,vn> para representar una tupla de elementos de n que contiene los valores v1,v2,...,vn.


Comparación de conjuntos

En conjuntos la frase << mayor que algún >> se representa en SQL por ( >SOME ), también podría entenderse esto como << mayor que el menor de >>, su sintaxis es igual que la del conector IN. SQL también permite las comparaciones ( >SOME ),( =SOME ) ( >=SOME ), ( <=SOME ) y ( <>SOME ).

También existe la construcción ( >ALL ), que corresponde a la frase << mayor que todos >>. Al igual que el operador SOME, puede escribirse ( >ALL ),( =ALL ) ( >=ALL ), ( <=ALL ) y ( <>ALL ).

En ocasiones podríamos querer comparar conjuntos para determinar si un conjunto contiene los miembros de algún otro conjunto. Tales comparaciones se hacen usando las construcciones CONTAINS y NOT CONTAINS