92 - Subconsultas como expresión |
Un profesor almacena el documento, nombre y la nota final de cada alumno de su clase en una tabla llamada "alumnos". 1- Elimine la tabla, si existe: if object_id('alumnos') is not null drop table alumnos; 2- Créela con los campos necesarios. Agregue una restricción "primary key" para el campo "documento" y una "check" para validar que el campo "nota" se encuentre entre los valores 0 y 10: create table alumnos( documento char(8), nombre varchar(30), nota decimal(4,2), primary key(documento), constraint CK_alumnos_nota_valores check (nota>=0 and nota <=10), ); 3-Ingrese algunos registros: insert into alumnos values('30111111','Ana Algarbe',5.1); insert into alumnos values('30222222','Bernardo Bustamante',3.2); insert into alumnos values('30333333','Carolina Conte',4.5); insert into alumnos values('30444444','Diana Dominguez',9.7); insert into alumnos values('30555555','Fabian Fuentes',8.5); insert into alumnos values('30666666','Gaston Gonzalez',9.70); 4- Obtenga todos los datos de los alumnos con la nota más alta, empleando subconsulta. 2 registros. 5- realice la misma consulta anterior pero intente que la consulta interna retorne, además del máximo valor de precio, el título: select titulo,autor, precio from libros where precio= (select titulo, max(precio) from libros); Mensaje de error, porque la lista de selección de una subconsulta que va luego de un operador de comparación puede incluir sólo un campo o expresión (excepto si se emplea "exists" o "in"). 6- Muestre los alumnos que tienen una nota menor al promedio, su nota, y la diferencia con el promedio. 3 registros. 7- Cambie la nota del alumno que tiene la menor nota por 4. 1 registro modificado. 8- Elimine los alumnos cuya nota es menor al promedio. 3 registros eliminados.Ver solución
if object_id('alumnos') is not null drop table alumnos; create table alumnos( documento char(8), nombre varchar(30), nota decimal(4,2), primary key(documento), constraint CK_alumnos_nota_valores check (nota>=0 and nota <=10), ); insert into alumnos values('30111111','Ana Algarbe',5.1); insert into alumnos values('30222222','Bernardo Bustamante',3.2); insert into alumnos values('30333333','Carolina Conte',4.5); insert into alumnos values('30444444','Diana Dominguez',9.7); insert into alumnos values('30555555','Fabian Fuentes',8.5); insert into alumnos values('30666666','Gaston Gonzalez',9.70); select alumnos.* from alumnos where nota= (select max(nota) from alumnos); select titulo,autor, precio from libros where precio= (select titulo, max(precio) from libros); select alumnos.*, (select avg(nota) from alumnos)-nota as diferencia from alumnos where nota< (select avg(nota) from alumnos); update alumnos set nota=4 where nota= (select min(nota) from alumnos); delete from alumnos where nota< (select avg(nota) from alumnos);