Manipulación avanzada de datos con sql

19
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.

Transcript of Manipulación avanzada de datos con sql

Page 1: Manipulación avanzada de datos con sql

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.

Page 2: Manipulación avanzada de datos con sql

20/05/2010

2

Estructura básica de las consultas

La estructura básica de una consulta consisteen 3 clausulas: Select: corresponde a la operación proyección del

algebra relacional. Se utiliza para listar los atributosdeseados del resultado de una consulta.

From: corresponde a la operación productocartesiano del algebra relacional. Lista las relacionesque deben ser analizadas en la evaluación de laexpresión

Where: engloba los atributos de las relaciones queaparecen en la clausula from.

Distinct

SQL permite duplicados en la relaciones, pero si sequiere eliminar duplicados, se emplea la palabra clavedistinct 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

Page 3: Manipulación avanzada de datos con sql

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 contenganlos operadores +, -, * y / operando sobre constantes o atributos delas 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

Page 4: Manipulación avanzada de datos con sql

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 filasdevueltas.

Restringe el número de filas devueltas en el conjunto de resultadosmediante el uso de predicados.

Puede utilizar las conectivas and, or y not. Las expresiones quecontengan pueden tener operadores de comparación.

También se puede emplear el operador de comparación between parasimplificar las clausulas where

select nombre,salario from Datos where salario between 4000 and 6000

Page 5: Manipulación avanzada de datos con sql

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 selectcomo en el from

select salario * 0.10 as ISR from Datosselect salario * 0.10 as ISR from Datos as datitos where 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 wherenombre like 'Juan%'

select nombre from Datos where nombre like 'J_'

Page 6: Manipulación avanzada de datos con sql

20/05/2010

6

Orden de la presentación de tuplas

SQL ofrece control sobre el orden en que se presentan lastuplas de una relación utilizando la clausula order by.

Para especificar el tipo de ordenación se puede incluir laclausula desc para orden descendente y asc paraascendente.

Además, se puede ordenar con respecto a mas de unatributo.

select nombre, salario from Datos wherenombre like 'J%' order by nombre desc

select nombre, salario from Datos wherenombre like 'J%' order by nombre desc,salariodesc

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.

Page 7: Manipulación avanzada de datos con sql

20/05/2010

7

Operaciones sobre conjuntos

Las operaciones de SQL union, intersect y exceptoperan 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 unionall

select nombre fromdatosunionselect nombre fromdatosexternos

select nombre fromdatosunion allselect nombre fromdatosexternos

Page 8: Manipulación avanzada de datos con sql

20/05/2010

8

intersect

Muestra los valores que se encuentran en ambos lados de la consulta.

select nombre from datos intersectselect nombre from datosexternos

except

Muestra los valores que se encuentran en la primera consulta, pero no están en la segunda.

select nombre from datosExceptselect nombre fromdatosexternos

Page 9: Manipulación avanzada de datos con sql

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

Page 10: Manipulación avanzada de datos con sql

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 NoSalariosfrom 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 clausulahaving.

Si en la misma consulta aparecen where y having, primero se aplica el criterio de where ysobre esas tuplas, se aplica el criterio de having.

select datos.nombre,sum(datos.salario)+ sum(datosexternos.salario) from datos,datosexternoswhere datos.nombre like 'Juan%' and datos.nombre=datosexternos.nombregroup by datos.nombre

select D.nombre, sum(D.salario)+ sum(DE.salario) from Datos as D, DatosExternos as DEwhere D.nombre=DE.nombregroup by D.nombrehaving D.nombre not like '%Juan%'

Page 11: Manipulación avanzada de datos con sql

20/05/2010

11

Valores nulos

SQL permite el uso de valoresnulos para indicar la ausenciade valor.

Para hacer esto, emplea lapalabra null. El predicado is notnull comprueba la ausencia devalores nulos.

select nombre, direccionfrom Datoswhere telefono is null

select nombre, salariofrom Datoswhere 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

Page 12: Manipulación avanzada de datos con sql

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 esincrustada en una cláusula de otra sentencia SQL,llamada sentencia padre.

La sub consulta (consulta interna) obtiene un valorque es usado por la sentencia padre. Usar una subconsulta anidada es equivalente a ejecutar dosconsultas secuenciales y utilizar el resultado de laconsulta interna como valor de búsqueda en laconsulta externa (consulta principal).

Page 13: Manipulación avanzada de datos con sql

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 subconsultas pueden ser muy útiles cuando necesites seleccionar filas de unatabla 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 necesitenvalores de un o más valores condicionales desconocidos.

Donde:

operator incluye un operador de 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 ode tablas diferentes.

Page 14: Manipulación avanzada de datos con sql

20/05/2010

14

Ejemplo de una subconsulta sencilla

select nombre,salariofrom Datoswhere salario>(select min(salario)

from DatosExternos)

Datos Datos Externos

Subconsultas de múltiples columnas

El ejemplo anterior nos muestra una sub consultas de filas únicasdonde solo una columna es obtenida por la sentencia SELECTinterna y estas son usadas para evaluar la expresión en lasentencia SELECT padre.

Si quieres comparar dos o más columnas, debemos escribir unacláusula WHERE compuesta usando operadores lógicos. El uso desubconsultas de múltiples columnas, puede combinar condicionesWHERE duplicadas en una simple cláusula WHERE.

Page 15: Manipulación avanzada de datos con sql

20/05/2010

15

Subconsultas de múltiples columnas

select nombre,direccionfrom Datoswhere nombre IN (select nombre

from DatosExternoswhere nombre like '%J%')

Datos Datos Externos

Subconsultas con ANY, SOME,ALL

Los operadores de comparación que presentan una subconsulta sepueden modificar mediante las palabras clave ALL o ANY. SOME es unequivalente del estándar de SQL-92 de ANY.

Las subconsultas presentadas con un operador de comparaciónmodificado devuelven una lista de cero o más valores. Pueden incluirGROUP BY o HAVING.

Para que una fila de una subconsulta con >ALL satisfaga la condiciónespecificada en la consulta externa, el valor de la columna que presentala subconsulta debe ser mayor que cada valor de la lista de los valoresdevueltos por la subconsulta.

De forma parecida, >ANY significa que, para que una fila satisfaga lacondición especificada en la consulta externa, el valor de la columna quepresenta la subconsulta debe ser mayor que, como mínimo, uno de losvalores de la lista devuelta por la subconsulta.

Page 16: Manipulación avanzada de datos con sql

20/05/2010

16

Ejemplo

select nombre,salariofrom datoswhere id =any (select idusuario

from contactoswhere origenusuario=0)

Ejemplo

select Nombre,salariofrom Datoswhere salario >all(select salario

from DatosExternoswhere salario<10000 )

Datos Datos Externos

Page 17: Manipulación avanzada de datos con sql

20/05/2010

17

Subconsultas con EXISTS o NOT EXISTS

Cuando una subconsulta se especifica con la palabraclave EXISTS, funciona como una prueba de existencia.La cláusula WHERE de la consulta externa compruebala 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 lasintaxis 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 (selectcontactos.idusuario

from Contactos,datos

where contactos.idusuario=2 and contactos.idusuario=datos.id)

Page 18: Manipulación avanzada de datos con sql

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

Page 19: Manipulación avanzada de datos con sql

20/05/2010

19

Prácticas

Realice las prácticas de las diapositivas 22 y 23utilizando los diferentes tipos de subconsultasrevisados.