Combinar taules - Subconsultes
Combinar taules-Subconsultes 

 

 

 

Les subconsultes, introduïdes en la versió 5 del mySQL, ens permeten combinar dades de taules diferents en una consulta determinada. Les subconsultes les delimitem entre parèntesis i les podem utilitzar en moltes clàusules (SELECT, WHERE, SET ...).

Taula de contingut

 

 

 

Subconsultes amb un resultat

Anem a veure un exemple senzill de subconsulta en què suposem les següents taules:
 


Donades aquestes taules, farem una consulta que seleccioni els despatxos amb el nombre d'empleats en cada despatx.
 

000 SELECT despatxos.*,  (SELECT count(*)FROM empleats WHERE empleats.despatxos_id = despatxos.id) es empleats FROM despatxos


També podríem seleccionar els despatxos que tenen més de 5 empleats posant la subconsulta al WHERE:

000 SELECT despatxos. * FROM despatxos WHERE (SELECT count(*)FROM empleats WHERE empleats.despatxo_id =despatxos.id)>5


Una consideració a tenir en compte i es compleix en els exemples anteriors és que la subconsulta ha d'estar dissenyada perquè sempre retorni un únic resultat i que aquest resultat tingui una única columna. En cas contrari obtindrem un error mySQL
 


La subconsulta només pot retornar una fila i una columna

 

 

 

 

Subconsultes amb resultat array

Acabem d'explicar que una subconsulta només pot tenir un resultat (una fila i una columna). Això és així perquè en assignar un nom de columna '(subconsulta) les empleats' o utilitzar l'operador '(subconsulta)> 5' tenim un operador que espera un únic paràmetre. En alguns casos podem voler una subconsulta que ens retorni més d'un resultat, per exemple imaginem que tenim la taula despatxos anterior i aquesta:


 


I volem obtenir totes els despatxos en una planta dirigida per Josep Maria'.

000 SELECT * DES despatxos ON planta IN(SELECT ID DE Plantes ON director='Josep Maria')


Suposant que hi ha 2 plantes dirigides per Josep Maria 'amb id 1 i 3, el resultat de la subconsulta seria:

Amb el que la consulta seria equivalent a:

000 SELECT * DES despatxos ON planta IN(1,3)