Listado completo de tutoriales
93 - Subconsulta (update - delete) |
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');
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:
