Documente Academic
Documente Profesional
Documente Cultură
CONSULTAS AVANZADAS EN
BASE DE DATOS
INTEGRANTES:
Figuera Vanessa Cl. 25.678.911
Gonzlez Orianny Cl. 25.382.243
JULIO 2015
INTO tabtemp
FROM relSRight
GROUP
BY isourceid,
isourcekind,
iresourceId
HAVING COUNT(*) > 1
Con este query insertamos en una tabla temporal (tabtemp) los registros que estn
duplicados y la cantidad de repeticiones del mismo.
Ahora, lo que haremos es un cursor que ir analizando registro a registro de nuestra
tabla temporal y eliminar los registros duplicados para cada conjunto, pero siempre
dejando al menos un registro, es decir, si se encuentran 2 repeticiones de un registro
borrar solamente una, si se encuentran 4 repeticiones del mismo borrar 3, y as
sucesivamente.
DECLARE @isourceid int, @isourcekind int,@iresourceId int, @repeticiones int;
DECLARE @sqlexec
varchar(200)
DECLARE dup_cursor
CURSOR
FOR
SELECT isourceid,
isourcekind,
iresourceId,
repeticiones
FROM tabtemp
OPEN dup_cursor;
FETCH NEXT FROM dup_cursor INTO @isourceid, @isourcekind, @iresourceId,
@repeticiones;
WHILE @@FETCH_STATUS =
0
BEGIN
SET @sqlexec = set rowcount + CAST( (@repeticiones 1) AS VARCHAR(3)) +
delete
from
relSright
where
isourceid
=
+ CAST(
@isourceid AS VARCHAR(10))
+
and isourcekind = + CAST( @isourcekind AS VARCHAR(10)) +
and
iresourceId
=
+
CAST(@iresourceId AS VARCHAR(10))
EXEC(@sqlexec)
FETCH NEXT FROM dup_cursor INTO @isourceid, @isourcekind, @iresourceId,
@repeticiones;
END
CLOSE dup_cursor;
DEALLOCATE dup_cursor;
Y con esto tenemos eliminados todas las repeticiones de nuestros registros en una
tabla.
AGRUPACIONES Y AGREGACIONES EN SQL
Funciones de agregacin Las funciones de agregacin en SQL nos permiten efectuar
operaciones sobre un conjunto de resultados, pero devolviendo un nico valor
agregado para todos ellos. Es decir, nos permiten obtener medias, mximos, etc...
sobre un conjunto de valores.
Las funciones de agregacin bsicas que soportan todos los gestores de datos son las
siguientes:
o COUNT: devuelve el nmero total de filas seleccionadas por la
consulta.
De esta manera sabremos que existen en total 830 pedidos en la base de datos, 323
registros que tienen asignada una zona de entrega, la fecha del pedido ms antiguo (el
10 de julio de 1996), la fecha del pedido ms reciente (el 6 de mayo de 1998 los
datos de ejemplo son muy antiguos!), el total de peso enviado entre todos los pedidos
(64.942,69 Kg o sea, ms de 64 toneladas) y el peso promedio del los envos
(78,2442Kg). No est mal para una consulta tan simple.
Agrupando resultados
La clusula GROUP BY unida a un SELECT permite agrupar filas segn las
columnas que se indiquen como parmetros, y se suele utilizar en conjunto con las
funciones de agrupacin, para obtener datos resumidos y agrupados por las
columnas que se necesiten.
Hemos visto en el ejemplo anterior que obtenamos slo una fila con los datos
indicados correspondientes a toda la tabla. Ahora vamos a ver con otro ejemplo
cmo obtener datos correspondientes a diversos grupos de filas, concretamente
agrupados por cada empleado:
SELECT EmployeeID, COUNT(*) AS TotalPedidos, COUNT(ShipRegion) AS
FilasNoNulas,
MIN(ShippedDate) AS FechaMin, MAX(ShippedDate) AS FechaMax,
SUM(Freight) PesoTotal, AVG(Freight) PesoPromedio
FROM Orders
GROUP BY EmployeeID
En este caso obtenemos los mismos datos pero agrupndolos por empleado, de modo
que para cada empleado de la base de datos sabemos cuntos pedidos ha realizado,
cundo fue el primero y el ltimo, etc...:
De hecho nos resultara muy fcil cruzarla con la tabla de empleados, usando lo
aprendido sobre consultas multi-tabla, y que se devolvieran los mismos resultados
con el nombre y los apellidos de cada empleado:
En este caso fjate en cmo hemos usado la expresin Employees.FirstName + ' ' +
mayor existente+1 comenzando en 1. Para campos de tipo fecha y hora, el valor por
defecto es 0 (por ejemplo, en un campo "date" es "0000-00-00").
Para todos los tipos, excepto "blob", "text" y "auto_increment" se pueden explicitar
valores por defecto con la clusula "default"; tema que veremos ms adelante.
Un valor por defecto se inserta cuando no est presente al ingresar un registro y en
algunos casos en que el dato ingresado es invlido.
Los campos para los cuales no se ingresaron valores tomarn los valores por defecto
segn el tipo de dato del campo, en el campo "codigo" ingresar el siguiente valor de
la secuencia porque es "auto_increment"; en el campo "titulo", ingresar una cadena
vaca porque es "varchar not null"; en el campo "editorial" almacenar "null", porque
no est definido "not null"; en el campo "precio" guardar "null" porque es el valor
por defecto de los campos no definidos como "not null" y en el campo "cantidad"
ingresar 0 porque es el valor por defecto de los campos numricos que no admiten
valores nulos.
Tipo
Valor por defecto
Clusula
"default"
____________________________________________________________________
_________________
caracter not null
cadena vaca
permite
numerico not null
0
permite
fecha not null
0000-00-00
permite
hora not null
00:00:00
permite
auto_increment
siguiente de la sec., empieza en 1 no permite
carac.,numer.,fecha,hora null
null
permite
INDICES
Los ndices en las BBDD pretenden aligerar las consultas, a modo de simil
podramos verlos como un ndice de libro. Buscar un captulo en un libro sin un
ndice implicara recorrer el libro entero hasta que nos topemos con el mientras que
encontrarlo con un ndice supondra recorrer este ltimo y luego ir directamente a la
pgina en la que se encuentra lo que nos interesa.
El espacio en disco requerido para almacenar el ndice es tpicamente menor que el
espacio de almacenamiento de la tabla (puesto que los ndices generalmente
contienen solamente los campos clave de acuerdo con los que la tabla ser ordenada,
y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar
en memoria los ndices de tablas que no cabran en ella. En una base de datos
relacional un ndice es una copia de una parte de la tabla.
Algunas bases de datos amplan la potencia del indexado al permitir que los ndices
sean creados de funciones o expresiones. Por ejemplo, un ndice puede ser creado
sobre la funcin upper(apellido), que almacenara en el ndice solamente las versiones
maysculas del campo apellido. Otra opcin a veces soportada, es el uso de ndices
"filtrados", donde las entradas del ndice son creadas solamente para los registros que