— ACTIVIDAD 9 —
A continuación vamos a ver la utilización del comando Join y otras variantes que tiene como son:
- LEFT JOIN
- RIGHT JOIN
- CROSS JOIN
- NATURAL JOIN
- STRAIGHT JOIN
- VARIABLES DE USUARIO
-----------------------------------------------------------------------------------------------------------
COMANDO LEFT JOIN
Un left join se usa para hacer coincidir registros en una tabla (izquierda) con otra tabla (derecha), se genera una fila extra (una por cada valor no encontrado) con todos los campos seteados a null.
Sintaxis:
Se nombran ambas tablas, una a la izquierda del join y la otra a la derecha, y la condición para enlazarlas.
Es importante la posición en que se colocan las tablas en un left join, la tabla de la izquierda es la que se usa para localizar registros en la tabla de la derecha, por lo tanto, estos join no son iguales.
Ejemplo:
Visualizar todos los libros que al menos tengan un editorial
Sintaxis:
- select e.nombre,l.titulo from editorial as e left join libro as l on e.codigo=l.codigoeditorial where l.codigoeditorial is not null;
También podemos mostrar las editoriales que no están presente en la tabla libro.
Sintaxis:
- select e.nombre,l.titulo from editorial as e left join libro as l on e.codigo=l.codigoeditorial where l.codigoeditorial is null;
COMANDO RIGHT JOIN
Opera del mismo modo que left join sólo que la búsqueda de coincidencia la realiza de modo inverso, es decir, los roles de las tablas se invierten.
BUSCA COINCIDENCIA DE VALORES DESDE LA TABLA DE LA DERECHA EN LA TABLA DE LA IZQUIERDA Y SI UN VALOR DE LA TABLA DE LA DERECHA NO ENCUENTRA COINCIDENCIA EN LA TABLA DE LA IZQUIERDA, SE GENERA UNA FILA EXTRA (una por cada valor no encontrado) con todos los campos seteados a null.
Ejemplo:
Sintaxis:
- select nombre,titulo from libro as l right join editorial as e on e.codigo=l.codigoeditorial;
COMANDO CROSS JOIN
Cross join retorna los registros de todas las tablas implicadas en la unión, devuelve el producto cartesiano. No es muy utilizado.
Ejemplo:
Sintaxis:
- select l.*,e.* from libro as l cross join editorial as e;
Sintaxis:
- select l.titulo,e.nombre, l.precio+l.precio as total from libro as l cross join editorial as e;
NATURAL JOIN
Se usa cuando los campos por los cuales se enlazan las tablas tienen el mismo nombre. Tenemos el ejemplo de libro y editorial. Como en ambas tablas, el código de la editorial se denomina 'codigoeditorial' podemos omitir la parte ON que indica los nombres de los campos por el cual se enlazan las tablas, empleando 'NATURAL JOIN', se unirán por el campo que tienen en común.
Ejemplo:
Sintaxis:
- select titulo,nombre from libro as l natural join editorial as e;
COMANDO STRAIGHT JOIN
Es igual a join, sólo que la tabla de la izquierda es leída siempre antes que la de la derecha.
Ejemplo:
Sintaxis:
- select nombre,titulo from editorial as e join libro as l on e.codigo=l.codigoeditorial;
VARIABLES DE USUARIO
Cuando buscamos un valor con las funciones de agrupamiento, por ejemplo min(), la consulta nos devuelve el mínimo valor de un campo de una tabla, pero no nos muestra los valores de otros campos del mismo registro.
Ejemplo:
Vamos a revisar cual es el mejor precio de un libro,
Sintaxis:
- select min(precio) from libro;
Para obtener todos los datos del libro podemos emplear una variable para almacenar el precio más bajo.
Sintaxis:
- select @menorprecio:=min(precio) from libro;
Y luego mostrar todos los datos de dicho libro empleando la variable anterior:
Sintaxis:
- select * from libro where precio=@menorprecio;
Es decir, guardamos en la variable el precio más bajo y luego, en otra sentencia, mostramos los datos de todos los libros cuyo precio es igual al valor de la variable.
Almacenamos el valor y lo recuperamos más adelante, con el fin de poderlos usar en otras sentencias.
Sintaxis:
- select @editorial:=e.nombre from libro as l join editorial as e on l.codigoeditorial=e.codigo where precio=@menorprecio;
Se anexa BD donde se realizaron las practicas: