UTNianos

Versión completa: [APORTE] Final del 01/10/2014
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
V o F:

1a-> Si una palabras es capicua, su código en Huffman tambien lo es.

1b-> La siguientes consultas devuelven lo mismo sin importar el set de datos: select count(campo1) from tabla = select count(*) from tabla, la "tabla" sólo tiene la columna campo1

Teórico:

2a-> Explique el significado de JOIN y sus variantes

2b-> Mencione y explique una forma de representar un grafo irrestricto

Práctico:

3a-> Daban una tabla que tenía las siguientes columnas:
codigo_materia
detalle_materia
nombre_alumno
legajo_alumno
fecha
nota

Te decían que en esa tabla estaban todas veces que los alumnos rindieron alguna materia. Pedían un listado con:
nombre de alumno 1
nombre de alumno 2
fecha
detalle de materia

De todas las parejas de alumnos que dieron algún final juntos y lo aprobaron. No podíamos repertir la pareja en orden inverso. No dejaban usar subquieries en el FROM.

3b-> Había 2 transacciones con isolation level SERIALIZABLE. Ambas transacciones en el tiempo 4 hacian un Select de la tabla1 donde id = 1. Luego ambas en el tiempo 5 hacían un update de la tabla where id = 1. La transacción A quería ponerle el valor X y la transacción B quería ponerle el valor Y.
Preguntaban que pasaba. Las opciones eran:

a- El campo id termina con el valor X
b- El campo id termina con el valor Y
c- No se sabe el valor del campo id, pero la transacción A termina primero
d- No se sabe el valor del campo id, pero la transacción B termina primero
e- se produce un deadlock
f- ninguna de las anteriores



RESPUESTAS:

V o F
1a-> Falso
1b-> Falso

Práctico:
3b-> puse F

3a->

Select a.nombre_alumno, b.nombre_alumno, a.detalle_materia, a.fecha
from tabla1 a, tabla1 b
where a.codigo_materia = b.codigo_materia
and a.fecha = b.fecha
and a.nota >= 4 and b.nota >= 4
and a.legajo_alumno > b.legajo_alumno



Saqué 7 y no contesté el segundo VoF. Así que algún error debo tener en algún lado. Si lo ven, por favor aporten así queda corregido.
gracias! thumbup3
No entiendo el criterio de correccion de la gente de GDD la verdad... Con un compañero, alguno de los 2 no cumplia la condicion de minimo 2 puntos de la practica (ya que no teniamos la query del todo bien, y habiamos elegido opciones distintas en el choise)... y ambos 4... Igual, no me quejo, chochos ambos... simplemente no entiendo...
En el 3b- la opción correcta era la "e- se produce un deadlock"
Saludos
Hola

En el 3b, la opcion correcta entonces es la f ?? y podria justificarce como que el motor ante 2 operaciones concurrentes de escritura y con un nivel serializable resuelve sin deadlock pero no se sabe cual sera el resultado?? o entendi mal ?

Desde ya gracias!

Saludos
(08-10-2014 17:36)Fia escribió: [ -> ]En el 3b- la opción correcta era la "e- se produce un deadlock"
Saludos

Si nos atenemos a la definición de deadlock que nos dan en Sistemas Operativos, eso no es un deadlock, a lo sumo es un conflicto de pedidos.
Es un deadlock porque las dos transacciones pueden leer el dato, pero como es serializable lo bloquean ambas hasta que termina la transacción, entonces ninguna puede hacer el update hasta que la otra termine. Lo que produce un deadlock. Se puede probar en una base de datos haciendo "set transaction isolation level".
Saludos
Que tal,

Tengo una consulta respecto al 1.b, porque es Falso?
select count(*) te devuelve la cantidad de todos los registros de la tabla, y select count(campo_1) te devuelve todos los registros para los que campo_1 tenga valor distinto de null. Si campo_1 permite nulls, count(*) y count(campo_1) te pueden dar cantidades distintas

probé esto recien en mysql:


create table tab1 (campo1 int);

insert into tab1 values (null);
insert into tab1 values (1);
insert into tab1 values (null);
insert into tab1 values (2);

select count(*) from tab1;
-- devuelve 4
select count(campo1) from tab1;
-- devuelve 2


(14-12-2014 20:51)NaiaraAcosta escribió: [ -> ]Que tal,

Tengo una consulta respecto al 1.b, porque es Falso?
(14-12-2014 21:11)nanjiro escribió: [ -> ]select count(*) te devuelve la cantidad de todos los registros de la tabla, y select count(campo_1) te devuelve todos los registros para los que campo_1 tenga valor distinto de null. Si campo_1 permite nulls, count(*) y count(campo_1) te pueden dar cantidades distintas

probé esto recien en mysql:


create table tab1 (campo1 int);

insert into tab1 values (null);
insert into tab1 values (1);
insert into tab1 values (null);
insert into tab1 values (2);

select count(*) from tab1;
-- devuelve 4
select count(campo1) from tab1;
-- devuelve 2


(14-12-2014 20:51)NaiaraAcosta escribió: [ -> ]Que tal,

Tengo una consulta respecto al 1.b, porque es Falso?

Gracias!!!
Alguno podría justificar porque los VoF son falsos los dos? Sobre todo el segundo


No dije nada, ya encontre la justificación del segundo, es porque si alguno de los registros esta cargado con NULL cuando realiza el count(*) lo cuenta pero si se realizar count(campo1) no toma en cuenta las filas que esten en null. Por lo tanto es FALSA

Alguno me justifica la primera.
(25-02-2015 14:29)Nacho14 escribió: [ -> ]Alguno me justifica la primera.

Supongamos que una palabra se escribe:

a...a
y su código es
110...110) al darla vuelta ya te das cuenta que no va a ser capicúa porque la 1er y última letra no lo son cuando están codificadas.

Off-topic:
chicos les edité los mensajes que tenian código sql para poner el resaltador de sintaxis
no se olviden de usarlo asi es mucho mas facil de leerlo en un foro !!!
está para usar aca en donde estan escribiendo, ahi donde dice "código" =)
(08-10-2014 17:36)Fia escribió: [ -> ]En el 3b- la opción correcta era la "e- se produce un deadlock"
Saludos

Perdon pero creo que no seria deadlock. Las 2 lecturas se mandan al mismo tiempo, y las 2 van a bloquear el registro leido. La que entre primero por ende, va a bloquear el registro y va a dejar a la otra esperando. Cuando termine la transaccion, ese registro va a tener un valor X o Y, no se sabe cual. Ahi la otra transacccion va a intentar hacer un select que no va a devolver nada (porque el id ya no es 1, sino X o Y), y va a terminar exitosamente. Por ende, no se puede saber cual va a ser el valor, puesto que depende de que lectura entre primero (y dice q se mandan las 2 al mismo tiempo). Coincido en que es la opcion f.

Saludosthumbup3
Veo que nadie respondió la 3a, así que dejo una resolución:



SELECT t1.detalle_materia, t1.nombre_alumno as 'alumno 1', t2.nombre_alumno as 'alumno 2', t1.fecha
FROM tabla t1
JOIN tabla t2
ON (t1.codigo_materia = t2.codigo_materia
AND t1.fecha = t2.fecha)
WHERE t1.legajo_alumno > t2.legajo_alumno
AND t1.nota >= 4
AND t2.nota >= 4



Recuerden limitar los duplicados en los self-join filtrando por condición de ordenamiento (en este caso, > sobre legajo_alumno).

Saludos.
URLs de referencia