jueves, 12 de abril de 2012

Practia 6

ACTIVIDAD POR PAREJAS

1. Escribir las sentencias SQL para las siguientes consultas (hacer uso de subconsultas):

a) Mostrar el nombre de la población donde vive Ana

b) Mostrar los nombres de las poblaciones pertenecientes al Estado de México

c) Mostrar los nombres de las personas que viven en DF y Estado de Mexico

2. ¿Cual sería la respectiva representación mediante álgebra relacional de cada consulta?

Consultas de Selección


Consultas de Selección


Las consultas de selección se utilizan para indicar al motor de datos que devuelva información de las bases de datos, esta información es devuelta en forma de conjunto de registros.

Consultas básicas

La sintaxis básica de una consulta
de selección es la siguiente:


SELECT Campos FROM Tabla; 

En donde campos es la lista de campos
que se deseen recuperar y tabla es el origen de los mismos, por ejemplo:


SELECT Nombre, Telefono FROM Clientes;

La cláusula WHERE


La cláusula WHERE puede usarse para determinar qué registros de las tablas enumeradas en la cláusula FROM aparecerán en los resultados de la instrucción SELECT.

Si no se emplea esta cláusula,la consulta devolverá todas las filas de la tabla. WHEREes opcional, pero cuando aparece debe ir a continuación de FROM.


SELECT Apellidos, Salario FROM Empleados
WHERE Salario > 21000;
SELECT Id_Producto, Existencias FROM Productos
WHERE Existencias <= Nuevo_Pedido;
SELECT * FROM Pedidos WHERE Fecha_Envio = #5/10/94#;
SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos = 'King';
SELECT Apellidos, Nombre FROM Empleados WHERE Apellidos Like 'S*';
SELECT Apellidos, Salario FROM Empleados WHERE Salario Between 200 And
300;
SELECT Apellidos, Salario FROM Empl WHERE Apellidos Between 'Lon' And
'Tol';
SELECT Id_Pedido, Fecha_Pedido FROM Pedidos WHERE Fecha_Pedido
Between #1-1-94# And #30-6-94#;
SELECT Apellidos, Nombre, Ciudad FROM Empleados WHERE Ciudad
In ('Sevilla', 'Los Angeles', 'Barcelona');

Ordenar los registros

Se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la claúsula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar.

Ejemplo:


SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY Nombre;

Se pueden ordenar los registros por mas de un campo, como por ejemplo:

SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY
CodigoPostal, Nombre;

Incluso se puede especificar el orden de los registros: ascendente mediante la claúsula (ASC -se toma este valor por defecto) ó descendente (DESC)

SELECT CodigoPostal, Nombre, Telefono
FROM Clientes ORDER BY
CodigoPostal DESC , Nombre ASC;

Consultas con Predicado

El predicado se incluye entre la claúsula
y el primer nombre del campo a recuperar, los posibles predicados son:


Predicado
Descripción
ALL
Devuelve todos
los campos de la tabla
TOP
Devuelve un determinado número
de registros de la tabla
DISTINCT
Omite los registros cuyos
campos seleccionados coincidan totalmente
DISTINCROW
Omite los registros duplicados
basandose en la totalidad del registro y no sólo en los campos
seleccionados.

ALL:

Si no se incluye ninguno de los predicados se asume ALL.
El Motor de base de datos selecciona todos los registros que cumplen las condiciones de la instrucción SQL. No se conveniente abusar de este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho más rápido indicar
el listado de campos deseados.


SELECT ALL FROM Empleados;
SELECT * FROM Empleados;

TOP:

Devuelve un cierto número de registros que entran entre al principio
o al final de un rango especificado por una cláusula ORDER BY. Supongamos que queremos recuperar los nombres de los 25 primeros estudiantes del curso 1994:


SELECT TOP 25 Nombre, Apellido FROM
Estudiantes
ORDER BY Nota DESC;

Si no se incluye la cláusula ORDER BY, la consulta devolverá un conjunto arbitrario de 25 registros de la tabla Estudiantes .El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la nota media número
25 y la 26 son iguales, la consulta devolverá 26 registros.


DISTINCT:

Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos.

Por ejemplo, varios empleados listados en la tabla Empleados pueden tener el mismo apellido. Si dos registros contienen López en el campo Apellido, la siguiente instrucción SQL devuelve un único registro:

SELECT DISTINCT Apellido FROM Empleados;
    

Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la cláusula SELECT posean un contenido diferente.

DISTINCTROW:

Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que sólo se fijaba en el contenido de los campos seleccionados, éste lo hace en el contenido del registro completo independientemente de los campo indicados en la cláusula SELECT.

SELECT DISTINCTROW Apellido FROM Empleados;

Si la tabla empleados contiene dos registros: Antonio López y Marta López el ejemplo del predicado DISTINCT devuleve un único registro con el valor López en el campo Apellido ya que busca no duplicados en dicho campo. Este último ejemplo devuelve dos registros con el valor López en el apellido ya que se buscan no duplicados en el registro completo.

Alias

En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto. Para ello tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos a la columna deseada. Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse apellido (igual que el campo devuelto) se llame Empleado. En este caso procederíamos de la siguiente forma:

SELECT DISTINCTROW Apellido AS Empleado
FROM Empleados;

HAVING Sum(Stock) > 100 AND NombreProducto Like BOS*;

AVG

Calcula la media aritmética de un conjunto de valores contenidos en un campo
especificado de una consulta. Su sintaxis es la siguiente


Avg(expr)

En donde expr representa el campo que contiene los datos numéricos para los que se desea calcular la media o una expresión que realiza un cálculo utilizando los datos de dicho campo. La media calculada por Avg es la media aritmética (la suma de los valores dividido por el número de valores). La función Avg no incluye ningún campo Null en el cálculo.

SELECT Avg(Gastos) AS Promedio FROM
Pedidos WHERE Gastos > 100;

Count


Calcula el número de registros devueltos por una consulta. Su sintaxis es la
siguiente


Count(expr)

En donde expr contiene el nombre del campo que desea contar. Aunque expr
puede realizar un cálculo sobre un campo, Count simplemente cuenta el número de registros sin tener en cuenta qué valores se almacenan en los registros. La función Count no cuenta los registros que tienen campos null a menos que expr sea el carácter comodín asterisco (*).
Si utiliza un asterisco, Count calcula el número total de registros, incluyendo aquellos que contienen campos null. Count(*) es considerablemente
más rápida que Count(Campo).
No se debe poner el asterisco entre dobles comillas (‘*’).


SELECT Count(*) AS Total FROM Pedidos;

Max, Min

Devuelven
el mínimo o el máximo de un conjunto de valores contenidos en
un campo especifico de una consulta. Su sintaxis es:


Min(expr)

Max(expr)

En donde expr es el campo sobre el que se desea realizar el cálculo.

SELECT Min(Gastos) AS ElMin FROM Pedidos
WHERE Pais = 'España';
SELECT Max(Gastos) AS ElMax FROM Pedidos WHERE Pais = 'España';

SELECT StDevP(Gastos) AS Desviacion FROM Pedidos WHERE Pais= 'España';

Sum


Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta.

Su sintaxis es:


SumP(expr)

En donde expr representa el nombre del campo que contiene los datos que desean sumarse o una expresión que realiza un cálculo utilizando los datos de dichos campos.

SELECT Sum(PrecioUnidad * Cantidad)
AS Total FROM DetallePedido;

Pedidos WHERE Pais = 'España';
SELECT VarP(Gastos) AS Varianza FROM Pedidos WHERE Pais = 'España';
Operadores Lógicos

Algunos de los operadores lógicos soportados por SQL son:
AND
,
OR, XOR
,
Is y Not. A excepción
de los dos últimos todos poseen la siguiente sintaxis:


<expresión1> operador
< expresión2>


En donde expresión1 y expresión2 son las condiciones a evaluar, el resultado de la operación varía en función del operador lógico. La tabla adjunta muestra los diferentes posibles resultados:

<expresión1>
Operador
<expresión2>
Resultado
Verdad
AND
Falso
Falso
Verdad
AND
Verdad
Verdad
Falso
AND
Verdad
Falso
Falso
AND
Falso
Falso
Verdad
OR
Falso
Verdad
Verdad
OR
Verdad
Verdad
Falso
OR
Verdad
Verdad
Falso
OR
Falso
Falso
Verdad
XOR
Verdad
Falso
Verdad
XOR
Falso
Verdad
Falso
XOR
Verdad
Verdad
Falso
XOR
Falso
Falso
Verdad
Eqv
Verdad
Verdad
Verdad
Eqv
Falso
Falso
Falso
Eqv
Verdad
Falso
Falso
Eqv
Falso
Verdad
Verdad
Imp
Verdad
Verdad
Verdad
Imp
Falso
Falso
Verdad
Imp
Null
Null
Falso
Imp
Verdad
Verdad
Falso
Imp
Falso
Verdad
Falso
Imp
Null
Verdad
Null
Imp
Verdad
Verdad
Null
Imp
Falso
Null
Null
Imp
Null
Null

Si a cualquiera de las anteriores condiciones
le anteponemos el operador NOT el resultado de la operación será el contrario al devuelto sin
el operador NOT.


El último operador denominado Is se emplea para comparar dos variables de tipo objeto <Objeto1> Is <Objeto2>. Este operador devuelve verdad
si los dos objetos son iguales.


Intervalos de Valores

Para indicar que deseamos recuperar los registros según el intervalo de valores de un campo emplearemos el operador Between cuya sintaxis es:

(campo [Not] Between valor1 And valor2 (la condición Not es opcional)

En este caso la consulta devolvería los registros que contengan en "campo"
un valor incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condición Not devolverá aquellos valores no incluidos en el intervalo.


SELECT * FROM Pedidos WHERE CodPostal Between 28000 And 28999;
(Devuelve los pedidos realizados en la provincia de Madrid) 
 
SELECT IIf(CodPostal Between 28000 And 28999, 'Provincial', 'Nacional') FROM Editores;
(Devuelve el valor 'Provincial' si el código postal se encuentra en el intervalo,
'Nacional' en caso contrario)

El Operador Like

Se utiliza para comparar una expresión de cadena con un modelo en una expresión SQL. Su sintaxis es:

expresión Like modelo

En donde expresión es una cadena modelo o campo contra el que se compara expresión. Se puede utilizar el operador Like para encontrar valores en los campos que coincidan con el modelo especificado. Por modelo puede especificar un valor completo (Ana María), o se pueden utilizar caracteres comodín como los reconocidos por el sistema operativo para encontrar un rango de valores (Like An*).

El operador Like se puede utilizar en una expresión para comparar un valor de un campo con una expresión de cadena. Por ejemplo, si introduce Like
C*
en una consulta SQL, la consulta devuelve todos los valores de campo que comiencen por la letra C.


En una consulta con parámetros, puede hacer que el usuario escriba el
modelo que se va a utilizar.


El ejemplo siguiente devuelve los datos que comienzan con la letra P seguido de
cualquier letra entre A y F y de tres dígitos:


Like ‘P[A-F]###’

Este ejemplo devuelve los campos cuyo contenido empiece con una letra de la A a la D seguidas de cualquier cadena.

Like ‘[A-D]*’

En la tabla siguiente se muestra cómo utilizar el operador Like para
comprobar expresiones con diferentes modelos.


Tipo
de coincidencia
Modelo
Planteado
Coincide
No
Coincide
Varios caracteres
‘a*a’
‘aa’, ‘aBa’, ‘aBBBa’
‘aBC’
Carácter especial
’a[*]a’
‘a*a’
‘aaa’
Varios caracteres
‘ab*’
‘abcdefg’, ‘abc’
‘cab’, ‘aab’
Un solo carácter
‘a?a’
‘aaa’, ‘a3a’, ‘aBa’
‘aBBBa’
Un solo dígito
‘a#a’
‘a0a’, ‘a1a’, ‘a2a’
‘aaa’, ‘a10a’
Rango de caracteres
‘[a-z]‘
‘f’, ‘p’, ‘j’
’2′, ‘&’
Fuera de un rango
‘[!a-z]‘
’9′, ‘&’, ‘%’
‘b’, ‘a’
Distinto de un dígito
‘[!0-9]‘
‘A’, ‘a’, ‘&’, ‘~’
’0′, ’1′, ’9′
Combinada
‘a[!b-m]#’
‘An9′, ‘az0′, ‘a99′
‘abc’, ‘aj0′
El Operador In

Este operador devuelve aquellos registros
cuyo campo indicado coincide con alguno de los indicados en una lista. Su sintaxis
es:


expresión
[Not] In(valor1, valor2, . . .)


SELECT * FROM Pedidos WHERE Provincia
In ('Madrid', 'Barcelona', 'Sevilla');