Listado completo de tutoriales

93 - Subconsulta (update - delete)


Ver video

La sintaxis básica para realizar actualizaciones con subconsulta es la siguiente:

 update TABLA set CAMPO=NUEVOVALOR
  where CAMPO = (SUBCONSULTA);

Actualizamos el precio de todos los libros de la editorial "Emece":

 update libros set precio=precio+(precio*0.1)
  where codigoeditorial=
   (select codigo
     from editoriales
     where nombre='Emece');

La subconsulta retorna un único valor. También podemos hacerlo con un join.

La sintaxis básica para realizar eliminaciones con subconsulta es la siguiente:

 delete from TABLA
  where CAMPO = (SUBCONSULTA);

Eliminamos todos los libros de la editorial "Planeta":

 delete from libros
  where codigoeditorial =
   (select e.codigo
       from editoriales as e
       where nombre='Planeta');

Servidor de MySQL instalado en forma local.

Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:

 drop table if exists editoriales;
 drop table if exists libros;
 
 create table editoriales(
  codigo int auto_increment,
  nombre varchar(30),
  primary key (codigo)
 );
 
 create table libros (
  codigo int auto_increment,
  titulo varchar(40),
  autor varchar(30),
  codigoeditorial smallint,
  precio decimal(5,2),
  primary key(codigo)
 );

 insert into editoriales(nombre) values('Planeta');
 insert into editoriales(nombre) values('Emece');
 insert into editoriales(nombre) values('Paidos');
 insert into editoriales(nombre) values('Siglo XXI');

 insert into libros(titulo,autor,codigoeditorial,precio) 
   values('Uno','Richard Bach',1,15);
 insert into libros(titulo,autor,codigoeditorial,precio)
   values('Ilusiones','Richard Bach',2,20);
 insert into libros(titulo,autor,codigoeditorial,precio)
   values('El aleph','Borges',3,10);
 insert into libros(titulo,autor,codigoeditorial,precio)
   values('Aprenda PHP','Mario Molina',4,40);
 insert into libros(titulo,autor,codigoeditorial,precio)
   values('Poemas','Juan Perez',1,20);
 insert into libros(titulo,autor,codigoeditorial,precio)
   values('Cuentos','Juan Perez',3,25);
 insert into libros(titulo,autor,codigoeditorial,precio)
   values('Java en 10 minutos','Marcelo Perez',2,30);

 select titulo,autor,nombre,precio from libros as l
   inner join editoriales as e on e.codigo=l.codigoeditorial; 

 update libros set precio=precio+(precio*0.1)
  where codigoeditorial=
   (select codigo
     from editoriales
     where nombre='Emece');

 select titulo,autor,nombre,precio from libros as l
   inner join editoriales as e on e.codigo=l.codigoeditorial; 

 delete from libros
  where codigoeditorial =
   (select e.codigo
       from editoriales as e
       where nombre='Planeta');
 
 select titulo,autor,nombre,precio from libros as l
   inner join editoriales as e on e.codigo=l.codigoeditorial; 

Genera una salida similar a esta:

MySQL subconsultas en delete update

Retornar