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: