112 - Variables de usuario


Primer problema:
Un profesor almacena el documento y nombre de sus alumnos en una tabla llamada "alumnos" y en otra 
tabla llamada "notas" almacena las notas de los mismos.
1- Elimine las tablas, si existen:
 if object_id('alumnos') is not null
  drop table alumnos;
 if object_id('notas') is not null
  drop table notas;

2- Créelas con los campos necesarios. Agregue una restricción "primary key" para el campo 
"documento" y una restricción "foreign key" para que en la tabla "notas" el documento del alumno 
haga referencia al documento de la tabla "alumnos":
 create table alumnos(
  documento char(8) not null
   constraint CK_alumnos_documento check (documento like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
  nombre varchar(30),
  constraint PK_alumnos
  primary key(documento)
 );

 create table notas(
  documento char(8) not null,
  nota decimal(4,2)
   constraint CK_notas_nota check (nota between 0 and 10),
  constraint FK_notas_documento
  foreign key(documento)
  references alumnos(documento)
  on update cascade
 );

3- Ingrese algunos registros:
 insert into alumnos values('30111111','Ana Algarbe');
 insert into alumnos values('30222222','Bernardo Bustamante');
 insert into alumnos values('30333333','Carolina Conte');
 insert into alumnos values('30444444','Diana Dominguez');
 insert into alumnos values('30555555','Fabian Fuentes');
 insert into alumnos values('30666666','Gaston Gonzalez');

 insert into notas values('30111111',5.1);
 insert into notas values('30222222',7.8);
 insert into notas values('30333333',4);
 insert into notas values('30444444',2.5);
 insert into notas values('30666666',9.9);
 insert into notas values('30111111',7.3);
 insert into notas values('30222222',8.9);
 insert into notas values('30444444',6);
 insert into notas values('30666666',8);

4- Declare una variable llamada "@documento" de tipo "char(8)" y vea su contenido:
 declare @documento char(8)
 select @documento;

5- Intente usar la variable "@documento" para almacenar el documento del alumno con la nota más alta:
 select @documento= documento from notas
  where nota=(select max(nota) from notas);
No se puede porque la variable fue declarada en otro lote de sentencias y no es reconocida.

6- Declare una variable llamada "@documento" de tipo "char(8)" y almacene en ella el documento del 
alumno con la nota más alta, luego recupere el nombre del alumno:
 declare @documento char(8)
 select @documento= documento from notas
  where nota=(select max(nota) from notas)
 select nombre from alumnos where documento=@documento;
Ver solución

 if object_id('alumnos') is not null
  drop table alumnos;
 if object_id('notas') is not null
  drop table notas;

 create table alumnos(
  documento char(8) not null
   constraint CK_alumnos_documento check (documento like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
  nombre varchar(30),
  constraint PK_alumnos
  primary key(documento)
 );

 create table notas(
  documento char(8) not null,
  nota decimal(4,2)
   constraint CK_notas_nota check (nota between 0 and 10),
  constraint FK_notas_documento
  foreign key(documento)
  references alumnos(documento)
  on update cascade
 );

 insert into alumnos values('30111111','Ana Algarbe');
 insert into alumnos values('30222222','Bernardo Bustamante');
 insert into alumnos values('30333333','Carolina Conte');
 insert into alumnos values('30444444','Diana Dominguez');
 insert into alumnos values('30555555','Fabian Fuentes');
 insert into alumnos values('30666666','Gaston Gonzalez');

 insert into notas values('30111111',5.1);
 insert into notas values('30222222',7.8);
 insert into notas values('30333333',4);
 insert into notas values('30444444',2.5);
 insert into notas values('30666666',9.9);
 insert into notas values('30111111',7.3);
 insert into notas values('30222222',8.9);
 insert into notas values('30444444',6);
 insert into notas values('30666666',8);

 declare @documento char(8)
 select @documento;

 select @documento= documento from notas
  where nota=(select max(nota) from notas);

 declare @documento char(8)
 select @documento= documento from notas
  where nota=(select max(nota) from notas)
 select nombre from alumnos where documento=@documento;



 

Retornar