UTNianos

Versión completa: [APORTE]Final Gestión de Datos 14/07/2015
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Hola, les paso el final de gestión de datos del día 14/07/2015

Para aprobar se deberá sumar una cantidad de 6 puntos y tener un ejercicio práctico bien hecho, en caso de tener que escribir código T-SQL/PL-SQL deberá especificar qué motor está usando.
Puntajes:
-1.a) y 1.b) Un punto si esta bien y resta un punto si está mal
-Todos los demás valen dos puntos

Verdadero o Falso:
1.a) Un ABB siempre está completo
1.b) El algoritmo Heapsort siempre tiene la misma complejidad computacional para cualquier orden en el que ingresan los datos

Teoría (contestar en no más de 15 renglones):
2.a) Explicar qué objetos de base de datos utilizaría para la seguridad de la misma
2.b) Explicar las reglas de la integridad relacional

Práctica:
3) Dada la siguiente tabla de N registros y con N > 10:

Table Secuencia (
int clave Primary Key,
varchar(10) valor not null
)

3.a) Se quiere ejecutar la siguiente consulta:



select top 1 clave + 1 as queEs
from Secuencia S1
where clave < (select max(S2.clave) from Secuencia S2) and
not exists (select 1 from Secuencia S2 where S1.clave + 1 = S2.clave)
order by 1



Decir si la consulta posee errores, en caso de poseerlos indicar cuáles son, en caso de no tener errores informar que es lo que retorna y bajo qué condiciones no devolvería filas.

3.b) Definir una sentencia DML que elimine los resultados duplicados de la segunda columna de la tabla Secuancia y luego agregar las restriciones necesarias para que no puedan volver a introducirse resultados duplicados en esa columna.


Ese fue el final, espero les ayude.
Saludos.
te hago una consulta: respecto al ejercicio de SQL , no habras copiado mal en la parte done dice "not exists (..............)" lo que esta dentro de este parentesis pusiste S1.valor+1=S2.valor y valor es un varchar pero me dijeron que ahi decia S1.clave+1= S2.clave puede ser ?
Respondo el 3a (tal cual esta ahi con S1.valor + 1 = S2.valor)
Da error, ya que no se le puede sumar un Int a un Varchar. Solo existe una excepción, de que el Varchar solo tenga valores numericos.

Respondo el 3a (con S1.clave+1= S2.clave)
Devuelve la primer primary key que falta.
Es decir, si tenemos los siguientes pk cargadas:
1,2,5,6,9 . Devuelve el 3. Sin el TOP 1 devolveria el 3 y 7

Si lo quieren probar:



create table #Secuencia
(
clave int Primary Key,
valor varchar(10) not null
)

insert into #Secuencia
values
(1,'1'),
(2,'2'),
(5,'3'),
(6,'4'),
(9,'5')

select clave + 1 as queEs
from #Secuencia S1
where clave < (select max(S2.clave) from #Secuencia S2) and
not exists (select 1 from #Secuencia S2 where S1.clave + 1 = S2.clave)
order by 1


La sentencia del not exists era con el campo clave.
(15-07-2015 00:27)Chiaopi escribió: [ -> ]luego agregar las restriciones necesarias para que no puedan volver a introducirse resultados duplicados en esa columna.

En el 3.b puedo poner un add constraint a la tabla o sí o sí tengo que hacer un trigger? Si tengo que hacer sí o sí el trigger, tengo que ponerle un cursor adentro?
Muchas gracias por el aporte!
Consulta, dieron la opción de ver el final unos minutos y si no querías quedarte, irte con la libreta sana y salva?
(27-07-2015 01:56)mariano0 escribió: [ -> ]
(15-07-2015 00:27)Chiaopi escribió: [ -> ]luego agregar las restriciones necesarias para que no puedan volver a introducirse resultados duplicados en esa columna.

En el 3.b puedo poner un add constraint a la tabla o sí o sí tengo que hacer un trigger? Si tengo que hacer sí o sí el trigger, tengo que ponerle un cursor adentro?

En el parcial de Reinosa hizo algo parecido, y dijo que si modificabamos la estructura estaba mal. Asi que seguramente en el 3b se debia crear un trigger.
(27-07-2015 04:15)DarkCrazy escribió: [ -> ]Muchas gracias por el aporte!
Consulta, dieron la opción de ver el final unos minutos y si no querías quedarte, irte con la libreta sana y salva?

Me sumo a esa consulta!
(27-07-2015 10:20)H3rnst escribió: [ -> ]
(27-07-2015 04:15)DarkCrazy escribió: [ -> ]Muchas gracias por el aporte!
Consulta, dieron la opción de ver el final unos minutos y si no querías quedarte, irte con la libreta sana y salva?

Me sumo a esa consulta!

Yo fui 2 veces y en ambas me dejaban retirarme, que yo sepa no se cambió esa modalidad.
(27-07-2015 10:20)H3rnst escribió: [ -> ]
(27-07-2015 04:15)DarkCrazy escribió: [ -> ]Muchas gracias por el aporte!
Consulta, dieron la opción de ver el final unos minutos y si no querías quedarte, irte con la libreta sana y salva?

Me sumo a esa consulta!

Si, dieron 5 minutos para ver el final y retirarse.

(21-07-2015 14:17)roman1981 escribió: [ -> ]te hago una consulta: respecto al ejercicio de SQL , no habras copiado mal en la parte done dice "not exists (..............)" lo que esta dentro de este parentesis pusiste S1.valor+1=S2.valor y valor es un varchar pero me dijeron que ahi decia S1.clave+1= S2.clave puede ser ?

Si, tenés razón, me equivoqué, ya lo corregí.

(23-07-2015 20:34)Chocolito escribió: [ -> ]La sentencia del not exists era con el campo clave.

Si, tenés razón, ya lo corregí.

(27-07-2015 09:36)rod77 escribió: [ -> ]
(27-07-2015 01:56)mariano0 escribió: [ -> ]
(15-07-2015 00:27)Chiaopi escribió: [ -> ]luego agregar las restriciones necesarias para que no puedan volver a introducirse resultados duplicados en esa columna.

En el 3.b puedo poner un add constraint a la tabla o sí o sí tengo que hacer un trigger? Si tengo que hacer sí o sí el trigger, tengo que ponerle un cursor adentro?

En el parcial de Reinosa hizo algo parecido, y dijo que si modificabamos la estructura estaba mal. Asi que seguramente en el 3b se debia crear un trigger.

No, fíjense que el enunciado dice "una sentencia DML" o sea que se tiene que resolver haciendo un update de la tabla, y sí, hay que agregar una restricción del tipo Unique en el campo valor.


Off-topic:

Si hicieras un trigger no sería necesario ponerle un cursor adentro, sólo tenés que verificar si ya existe un registro con el valor del campo valor en la tabla, la consulta se haría con "exists".
(24-08-2015 20:33)Chiaopi escribió: [ -> ]
(27-07-2015 10:20)H3rnst escribió: [ -> ]
(27-07-2015 04:15)DarkCrazy escribió: [ -> ]Muchas gracias por el aporte!
Consulta, dieron la opción de ver el final unos minutos y si no querías quedarte, irte con la libreta sana y salva?

Me sumo a esa consulta!

Si, dieron 5 minutos para ver el final y retirarse.

(21-07-2015 14:17)roman1981 escribió: [ -> ]te hago una consulta: respecto al ejercicio de SQL , no habras copiado mal en la parte done dice "not exists (..............)" lo que esta dentro de este parentesis pusiste S1.valor+1=S2.valor y valor es un varchar pero me dijeron que ahi decia S1.clave+1= S2.clave puede ser ?

Si, tenés razón, me equivoqué, ya lo corregí.

(23-07-2015 20:34)Chocolito escribió: [ -> ]La sentencia del not exists era con el campo clave.

Si, tenés razón, ya lo corregí.

(27-07-2015 09:36)rod77 escribió: [ -> ]
(27-07-2015 01:56)mariano0 escribió: [ -> ]
(15-07-2015 00:27)Chiaopi escribió: [ -> ]luego agregar las restriciones necesarias para que no puedan volver a introducirse resultados duplicados en esa columna.

En el 3.b puedo poner un add constraint a la tabla o sí o sí tengo que hacer un trigger? Si tengo que hacer sí o sí el trigger, tengo que ponerle un cursor adentro?

En el parcial de Reinosa hizo algo parecido, y dijo que si modificabamos la estructura estaba mal. Asi que seguramente en el 3b se debia crear un trigger.

No, fíjense que el enunciado dice "una sentencia DML" o sea que se tiene que resolver haciendo un update de la tabla, y sí, hay que agregar una restricción del tipo Unique en el campo valor.


Off-topic:

Si hicieras un trigger no sería necesario ponerle un cursor adentro, sólo tenés que verificar si ya existe un registro con el valor del campo valor en la tabla, la consulta se haría con "exists".

Cómo agrego una constraint unique a una tabla ya creada?

alter table A add constraint B unique

Me tira error.
Bu.. Yo hice:

DELETE FROM Secuencia
WHERE s.valor=(SELECT Top 1 valor FROM Secuencia WHERE s.valor=valor AND count(valor)>1)

Que evidentemente está mal.. Confused

Como hago de una forma limpia borrar los duplicados (No en el select, sino en la tabla original)?
Pongo el codigo para eliminar duplicados:


DELETE Secuencia
WHERE Clave not in (SELECT MAX (Clave) FROM Secuencia GROUP BY Valor)


Saludos.
(24-05-2016 13:23)ramacal89 escribió: [ -> ]Pongo el codigo para eliminar duplicados:


DELETE Secuencia
WHERE Clave not in (SELECT MAX (Clave) FROM Secuencia GROUP BY Valor)


Saludos.

Ahi no te estas asegurando que no haya duplicados, tendria que ser algo asi:



DELETE FROM Secuencia WHERE clave IN (SELECT clave FROM Secuencia GROUP BY valor HAVING COUNT(*) > 1)



EDIT: entendi que pide de los duplicados eliminar uno de los dos valores, pero releyendo tambien se puede entender como que pide eliminar los dos valores en cuyo caso tu DELETE esta ok

EDIT de nuevo (estoy estudiando para el final de hoy y estoy medio a full jaja): mas alla de la interpretacion del enunciado, tu delete tambien borra no duplicados ese es el problema principal
Que haces idolo! yo tmb estoy para el final vamos a ver que onda,
fijate que le clavo el not in, enotnces te aseguras que borra todos los otros salvo la clave maxima.
En caso de que tengas uno solo, el maximo va a ser ese por ende no te lo borra.
Saludos.
Páginas: 1 2
URLs de referencia