14. Consultas múltiples y FullText en MySQL

Veamos la sintaxis para realizar consultas múltiples. Se recomienda crear un Alias a la tabla para crear un código más legible.

Ejm1

SELECT * FROM table1 AS t1
   INNER JOIN table2 AS t2;

Ejm2

SELECT * FROM table1 AS t1
   INNER JOIN table2 AS t2
   ON t1.a_field = t2.a_field

Ejm3

SELECT t1.field1, t1.field2, t1.field3, t2.fiel1, t2.field2
   FROM table1 AS t1
   INNER JOIN table2 AS t2
   ON t1.field1 = t2.field5
   WHERE t1.field1 = 'a_value'
   ORDER BY t1.field3 DESC;

La claúsula INNER JOIN nos permite unir tablas. Si utilizamos el primer ejm, MySQL va a unir todos los campos de esas dos tablas, pudiendo duplicar los mismos, ya que no estamos especificando ninguna condición.

Veamos un ejm utilizando nuestra base de datos.

Ejm

SELECT * FROM movies AS m INNER JOIN status AS s;

Esta sentencia duplicaría contenido ya que no le estamos poniendo ninguna restricción, para que únicamente crease un valor tenemos que escribir lo siguiente.

Ejm

SELECT * FROM movies AS m INNER JOIN status AS s ON m.status = s.status_id;

Cuando unimos dos tablas mediante los JOINS tenemos que utilizar la sintaxis tabla.registro.

Ejm

SELECT * FROM movies AS m INNER JOIN status AS s ON m.status = s.status_id WHERE s.status = 'Canceled' ORDER BY m.premiere;

FullText Key

En este caso la sintaxis es la siguiente.

Ejm

SELECT * FROM movies
   WHERE MATCH(title, author, actors, genres)
   AGAINST('ET' IN BOOLEAN MODE);

La función MATCH() en MySQL lo que hace es unir en que campos queremos buscar, en nuestro ejm, los campos en los que queremos buscar es en title, author, actors y genres, y la claúsula AGAINST hay que pasarle entre comillas el valor que estamos buscando, y las palabras reservadas IN BOOLEAN MODE.

También se pueden hacer consultas múltiples FullText Key, la sintaxis sería la siguiente.

SELECT t1.field1, t1.field2, t2.field1, t2.field2
   FROM table1 AS t1
   INNER JOIN table2 AS t2
   ON t1.field1 = t2.field2
   WHERE MATCH(t1.field1, t1.field2, t2.field1, t2.field2)
   AGAINST('a_search' IN BOOLEAN MODE);

Como vemos, en el WHERE MATCH() ponemos los campos que necesitamos, utilizando nuestro JOIN.

Ejm

SELECT m.title, m.category, m.country, m.genres, m.premiere, s.status
   FROM movies AS m
   INNER JOIN status AS s
   ON m.status = s.status_id
   WHERE MATCH(m.title, m.author, m.actors, m.genres, s.status)
   AGAINST('drama' IN BOOLEAN MODE)
   ORDER BY m.premierre;
Scroll al inicio