88 - Subconsultas any - some - all |
Trabajamos con las tablas "libros" y "editoriales" de una librería.
Las borramos si existen y luego las creamos:
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) );
Ingresamos algunos registros:
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',4,18);
insert into libros(titulo,autor,codigoeditorial,precio) values('Puente al infinito','Richard Bach',2,20);
insert into libros(titulo,autor,codigoeditorial,precio) values('Aprenda PHP','Mario Molina',4,40);
insert into libros(titulo,autor,codigoeditorial,precio) values('El aleph','Borges',2,10);
insert into libros(titulo,autor,codigoeditorial,precio) values('Antología','Borges',1,20);
insert into libros(titulo,autor,codigoeditorial,precio) values('Cervantes y el quijote','Borges',3,25);
Mostramos los títulos de los libros de "Borges" de editoriales que han publicado también libros de "Richard Bach":
select titulo
from libros
where autor like '%Borges%' and
codigoeditorial = any
(select e.codigo
from editoriales as e
join libros as l
on codigoeditorial=e.codigo
where l.autor like '%Bach%');
Realizamos la misma consulta pero empleando "all" en lugar de "any":
select titulo
from libros
where autor like '%Borges%' and
codigoeditorial = all
(select e.codigo
from editoriales as e
join libros as l
on codigoeditorial=e.codigo
where l.autor like '%Bach%');
Mostramos los títulos y precios de los libros "Borges" cuyo precio supera a ALGUN precio de los libros de "Richard Bach":
select titulo,precio
from libros
where autor like '%Borges%' and
precio > any
(select precio
from libros
where autor like '%Bach%');
Veamos la diferencia si empleamos "all" en lugar de "any":
select titulo,precio
from libros
where autor like '%Borges%' and
precio > all
(select precio
from libros
where autor like '%Bach%');