La Importancia de la Universidad como Institución Social.pdf
Manipulación avanzada de datos con sql parte1
1. 20/05/2010
1
UNIDAD 1.- PARTE 1
MANIPULACIÓN AVANZADA DE DATOS CON SQL.
BASES DE DATOS PARA APLICACIONES
Xochitl Clemente Parra
Armando Méndez Morales
Práctica preliminar
Crear la siguiente base de datos de prácticas en SQL Server.
2. 20/05/2010
2
Estructura básica de las consultas
La estructura básica de una consulta consiste
en 3 clausulas:
Select: corresponde a la operación proyección del
algebra relacional. Se utiliza para listar los atributos
deseados del resultado de una consulta.
From: corresponde a la operación producto
cartesiano del algebra relacional. Lista las relaciones
que deben ser analizadas en la evaluación de la
expresión
Where: engloba los atributos de las relaciones que
aparecen en la clausula from.
Distinct
SQL permite duplicados en la relaciones, pero si se
quiere eliminar duplicados, se emplea la palabra clave
distinct después del select.
Id Nombre Direccion Telefono
1 Juan Perez Calle 3 No. 34 938-2343-322
2 Juan Lopez 2 pte nte 98 765-8356-224
3 Rosa Gómez 13 sur ote 383 675-4567-211
4 Juan Lopez Calle Amapolas 10 978-5976-435
Select distinct nombre from Datos Select nombre from Datos
3. 20/05/2010
3
All
También se puede emplear la palabra all para especificar
explícitamente que no se eliminan duplicados.
Id Nombre Direccion Telefono
1 Juan Perez Calle 3 No. 34 938-2343-322
2 Juan Lopez 2 pte nte 98 765-8356-224
3 Rosa Gómez 13 sur ote 383 675-4567-211
4 Juan Lopez Calle Amapolas 10 978-5976-435
Select all nombre from Datos
* y operadores
El símbolo * se puede utilizar para denotar todos los atributos.
también puede contener expresiones aritméticas que contengan
los operadores +, -, * y / operando sobre constantes o atributos de
las tuplas.
Id Nombre Dirección Teléfono Salario
1 Juan Perez Calle 3 No. 34 938-2343-322 4,500
2 Juan Lopez 2 pte nte 98 765-8356-224 6,500
3 Rosa Gómez 13 sur ote 383 675-4567-211 13,200
4 Juan Lopez Calle Amapolas 10 978-5976-435 12,100
Select salario * 0.15 from Datos
4. 20/05/2010
4
Prácticas
Escriba las siguiente consultas:
Seleccionar a los alumnos que se encuentren inscritos
en el segundo ciclo.
Seleccionar el nombre y dirección de los alumnos,
concatenando la direccion con el siguiente formato:
direccion , Poblacion.
Seleccionar nombre y numero de hermanos de los
alumnos, agregando después del numero del campo,
la palabra hermano(s).
Seleccione el tipo de materia, de la tabla materias,
mostrando únicamente los valores únicos.
where
Especifica una condición de búsqueda para restringir el número de filas
devueltas.
Restringe el número de filas devueltas en el conjunto de resultados
mediante el uso de predicados.
Puede utilizar las conectivas and, or y not. Las expresiones que
contengan pueden tener operadores de comparación.
También se puede emplear el operador de comparación between para
simplificarlas clausulas where
select nombre,salario from Datos where
salario between 4000 and 6000
5. 20/05/2010
5
Renombramiento
SQL proporciona un mecanismo para renombrar
tanto relaciones como atributos. Para ello utiliza la
clausula as
La clausula as puede aparecer tanto en el select
como en el from
select salario * 0.10 as ISR from Datos
select salario * 0.10 as ISR from Datos as
datitoswhere datitos.salario>6000
Operaciones sobre cadenas
SQL especifica las cadenas encerrándolas entre comilla simple.
La operación mas empleada sobre cadenas es el encaje de patrones, para el que
se usa el operador like. Para la descripción de patrones, se utilizan los 2
caracteres especiales:
% : encaja con cualquier subcadena
_ : encaja con cualquier carácter
select nombre from Datos where
nombre like 'Juan%'
select nombre from Datos where nombre like 'J_'
6. 20/05/2010
6
Orden de la presentación de tuplas
SQL ofrece control sobre el orden en que se presentan las
tuplas de una relación utilizando la clausula order by.
Para especificar el tipo de ordenación se puede incluir la
clausula desc para orden descendente y asc para
ascendente.
Además, se puede ordenar con respecto a mas de un
atributo.
select nombre, salario from Datos where
nombre like 'J%' order by nombre desc
select nombre, salario from Datos where
nombre like 'J%' order by nombre desc,salario
desc
Prácticas
Seleccionar a los alumnos que tengan hermanos
Seleccionar a los alumnos que tengan hermanos y se encuentren en el primer
ciclo
Seleccionar a los alumnos que este cursando la materia de Dibujo.
Seleccionar las materias que sean de modalidad u optativas.
Seleccionar a los alumnos que no se encuentren en primer nivel
Seleccionar a los alumnos que tengan de 1 a 2 hermanos cursando el segundo
ciclo.
Seleccionar a los alumnos que tengan como apellido GARCÍA y que estén en el
nivel 1 del primer ciclo.
Mostrar a los alumnos del ejercicio anterior ordenados por población de
forma descendente.
Seleccionar a los alumnos cuyo primer apellido comience con M del segundo
ciclo y que no tengan hermanos.
Seleccionar las materias optativas ordenadas de forma ascendente, indicando
el nombre de los alumnos inscritos.
7. 20/05/2010
7
Operaciones sobre conjuntos
Las operaciones de SQL union, intersect y except
operan sobre relaciones y se corresponden con las
operaciones del algebra relacional.
Al igual que la unión, intersección y la diferencia
del algebra relacional, las relaciones que participan
han de ser compatibles, es decir, deben tener el
mismo conjunto de atributos.
union
Nos permite unir los resultados de
varias consultas.
Elimina los valores duplicados.
Si se desean conservar todos los
duplicados, es necesario escribir union
all
select nombre from
datos
union
select nombre from
datosexternos
select nombre from
datos
union all
select nombre from
datosexternos
8. 20/05/2010
8
intersect
Muestra los valores que se
encuentran en ambos lados de la
consulta.
select nombre from datos
intersect
select nombre from datosexternos
except
Muestra los valores que se
encuentran en la primera
consulta, pero no están en
la segunda.
select nombre from datos
Except
select nombre from
datosexternos
9. 20/05/2010
9
Funciones de agregación
Son funciones que toman una colección (un conjunto o
multiconjunto) de valores de entrada y devuelven un
solo valor. Las 5 funciones de agregación son:
Promedio (avg): aplicable a valores numéricos, calcula el promedio
de los valores obtenidos
Mínimo (min): retorna el menor elemento no nulo dentro de las
tuplas para ese atributo
Máximo (max): retorna el mayor elemento no nulo dentro de las
tuplas para ese atributo
Total (sum): aplicable a valores numéricos, realiza la suma
matemática
Cuenta (count): cuenta las tuplas resultantes.
Avg,min,max
select avg(salario) from datos where salario>5000
select min(salario) from datos where salario>5000
select max(salario) from datos where salario>5000
10. 20/05/2010
10
Sum, count
select sum(datos.salario)+sum(datosexternos.salario)
from datos,datosexternos
where datos.nombre like 'Juan%' and datos.nombre=datosexternos.nombre
select nombre,count(salario)as NoSalarios
from datos
group by nombre
Group by, having
La clausula group by nos sirve para formar grupos de tuplas con el mismo valor.
Para establecer condiciones a las agrupaciones creadas con group by, utilizamos la clausula
having.
Si en la misma consulta aparecen where y having, primero se aplica el criterio de where y
sobre esas tuplas, se aplica el criterio de having.
select datos.nombre,sum(datos.salario)+sum(datosexternos.salario)
from datos,datosexternos
where datos.nombrelike 'Juan%' and datos.nombre=datosexternos.nombre
group by datos.nombre
select D.nombre, sum(D.salario)+sum(DE.salario)
from Datos as D, DatosExternosas DE
where D.nombre=DE.nombre
group by D.nombre
having D.nombre not like '%Juan%'
11. 20/05/2010
11
Valores nulos
SQL permite el uso de valores
nulos para indicar la ausencia
de valor.
Para hacer esto, emplea la
palabra null. El predicado is not
null comprueba la ausencia de
valores nulos.
select nombre, direccion
from Datos
where telefono is null
select nombre, salario
from Datos
where direccion is not null and salario<5000
Prácticas I
Seleccionar a todos los alumnos de primer ciclo y calcular el
promedio de cada uno de todas las materias.
Contar el numero de alumnos que hay inscritos por materia
Buscar a los alumnos que tienen mas materias cursadas.
Sumar el numero de hermanos que tienen todos los alumnos
Buscar al alumno con al más bajo promedio del segundo ciclo
Buscar al alumno con el promedio mas alto de toda la
institución.
Buscar a los alumnos con los promedios mas altos de cada nivel
Contar el numero de materias por tipo.
Listar los promedios de los alumnos del segundo ciclo del
promedio mas alto al mas bajo
Contar a los alumnos con la misma calificación en informática
12. 20/05/2010
12
Prácticas II
Contar al numero de alumnos por turno
Promediar las calificaciones de los alumnos por turno
Listar los alumnos con promedio aprobatorio del nivel 2 en orden descendente
Contar a los alumnos reprobados y aprobados del nivel 3
Unir con una consulta a los alumnos de primer ciclo nivel 1, con los alumnos de
primer ciclo nivel2.
Seleccionar a los alumnos del primer ciclo que no estén cursando lenguas.
Contar a los alumnos que cursan dibujo, pero no cursan informática.
Contar cuantos alumnos sin hermanos hay en toda la institución, agrupándolos
por nivel.
Contar a los alumnos por población de origen. Incluir el calculo de su promedio.
Calcular el promedio de los alumnos que tengan como en algún apellido García.
Subconsultas anidadas
Una sub consulta es una sentencia SELECT que es
incrustada en una cláusula de otra sentencia SQL,
llamada sentencia padre.
La sub consulta (consulta interna) obtiene un valor
que es usado por la sentencia padre. Usar una sub
consulta anidada es equivalente a ejecutar dos
consultas secuenciales y utilizar el resultado de la
consulta interna como valor de búsqueda en la
consulta externa (consulta principal).
13. 20/05/2010
13
Subconsultas anidadas
Las sub consultas pueden ser usadas para los siguientes propósitos:
Proveer valores para condiciones en cláusulas WHERE, HAVING y
START WITH de sentencias SELECT
Definir el conjunto de filas a ser insertadas en una tabla de una
sentencia INSERT o CREATE TABLE
Definir el conjunto de filas a ser incluidas en una vista o snapshot en
una sentencia CREATE VIEW o CREATE SNAPSHOT
Definir uno o más valores para ser asignados a filas existentes en una
sentencia UPDATE
Definir una tabla para ser operada por el contenido de una consulta.
(Esto se hace colocando la sub consulta en la cláusula FROM. Esto
puede hacerse también en sentencias INSERT, UPDATE y DELETE.
Nota: Una sub consulta es evaluada en una ocasión para toda la
sentencia Padre.
Subconsultas anidadas
Se pueden construir sentencias poderosas utilizando sub consultas. Las sub
consultas pueden ser muy útiles cuando necesites seleccionar filas de una
tabla con una condición que dependa de los datos de la misma u otra tabla.
Las sub consultas son muy útiles para escribir sentencias SQL que necesiten
valores de un o más valores condicionales desconocidos.
Donde:
operator incluye un operadorde comparación como >, = o IN
Nota: los operadores de comparación se encuentran en dos clases:
operadores de fila única (>, =, >=, <, <>, <=) y operadores de múltiples filas
(IN, ANY, ALL)
Las sub consultas son a menudo referidas como sentencias SELECT anidadas,
sub-SELECT, o SELECT internos.
Las consultas internas y externas pueden recuperar datos de la misma tabla o
de tablas diferentes.
14. 20/05/2010
14
Ejemplo de una subconsulta sencilla
select nombre,salario
from Datos
where salario>(select min(salario)
from DatosExternos)
Datos Datos Externos
Subconsultas de múltiples columnas
El ejemplo anterior nos muestra una sub consultas de filas únicas
donde solo una columna es obtenida por la sentencia SELECT
interna y estas son usadas para evaluar la expresión en la
sentencia SELECT padre.
Si quieres comparar dos o más columnas, debemos escribir una
cláusula WHERE compuesta usando operadores lógicos. El uso de
subconsultas de múltiples columnas, puede combinar condiciones
WHERE duplicadas en una simple cláusula WHERE.
15. 20/05/2010
15
Subconsultas de múltiples columnas
select nombre,direccion
from Datos
where nombre IN (select nombre
from DatosExternos
where nombre like '%J%')
Datos Datos Externos
Subconsultas con ANY, SOME,ALL
Los operadores de comparación que presentan una subconsulta se
pueden modificar mediante las palabras clave ALL o ANY. SOME es un
equivalente del estándar de SQL-92 de ANY.
Las subconsultas presentadas con un operador de comparación
modificado devuelven una lista de cero o más valores. Pueden incluir
GROUP BY o HAVING.
Para que una fila de una subconsulta con >ALL satisfaga la condición
especificada en la consulta externa, el valor de la columna que presenta
la subconsulta debe ser mayor que cada valor de la lista de los valores
devueltos por la subconsulta.
De forma parecida, >ANY significa que, para que una fila satisfaga la
condición especificada en la consulta externa, el valor de la columna que
presenta la subconsulta debe ser mayor que, como mínimo, uno de los
valores de la lista devuelta por la subconsulta.
16. 20/05/2010
16
Ejemplo
select nombre,salario
from datos
where id =any (select idusuario
from contactos
where origenusuario=0)
Ejemplo
select Nombre,salario
from Datos
where salario >all(select salario
from DatosExternos
where salario<10000 )
Datos Datos Externos
17. 20/05/2010
17
Subconsultas con EXISTS o NOT EXISTS
Cuando una subconsulta se especifica con la palabra
clave EXISTS, funciona como una prueba de existencia.
La cláusula WHERE de la consulta externa comprueba
la existencia de las filas devueltas por la subconsulta.
En realidad, la subconsulta no produce ningún dato,
devuelve el valor TRUE o FALSE.
Una subconsulta que se especifica con EXISTS tiene la
sintaxis siguiente:
WHERE [NOT] EXISTS (subquery)
Ejemplo
select nombre from Datos
where exists (select contactos.idusuario
from Contactos,datos
where contactos.idusuario=3
and contactos.idusuario=datos.id)
select nombre from Datos
where exists (select
contactos.idusuario
from Contactos,datos
where contactos.idusuario=2
and contactos.idusuario=datos.id)
18. 20/05/2010
18
Subconsultas usadas en lugar de una
expresión
En Transact-SQL, una subconsulta se
puede usar allí donde se pueda usar una
expresión en las instrucciones SELECT,
UPDATE, INSERT y DELETE, excepto en
una lista ORDER BY.
Ejemplo
select datos.nombre,salario - (select min(salario) from datosexternos)
as difSalarioMasPequeño
from datos
Datos Datos Externos