MySQL JOIN: descripción, ejemplo de uso del comando y recomendaciones. Ejemplos simples de UNIRSE

JavaScript está bloqueado en su navegador. ¡Habilite JavaScript para que el sitio funcione!

Trabajar con formularios

Los formularios HTML se utilizan para transferir datos del usuario de una página web al servidor. PHP proporciona una serie de herramientas especiales para trabajar con formularios.

Variables predefinidas

PHP tiene una serie de variables predefinidas que no cambian en todas las aplicaciones que se ejecutan en un entorno particular. También se les llama variables de entorno o variables de entorno. Reflejan la configuración del entorno del servidor web Apache, así como también solicitan información para ese navegador. Es posible obtener los valores de la URL, cadena de consulta y otros elementos de la solicitud HTTP.

Todas las variables predefinidas están contenidas en la matriz asociativa $GLOBALS. Además de las variables de entorno, esta matriz también contiene variables globales definidas en el programa.

Ejemplo 1 Ver matriz $GLOBALS

Como resultado, aparecerá en la pantalla una lista de todas las variables globales, incluidas las variables de entorno. Los más utilizados son:

Variable Descripción Contenido
$_SERVER["HTTP_USER_AGENT"]Nombre y versión del clienteMozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
$_SERVER["REMOTE_ADDR"]dirección IP144.76.78.3
getenv("HTTP_X_FORWARDED_FOR")Dirección IP interna del cliente
$_SERVER["REQUEST_METHOD"]Método de solicitud (GET o POST)CONSEGUIR
$_SERVER["QUERY_STRING"]En una solicitud GET, los datos codificados enviados junto con la URL
$_SERVER["REQUEST_URL"]Dirección completa del cliente, incluida la cadena de consulta
$_SERVER["HTTP_REFERER"]URL de la página desde la que se realizó la solicitud
$_SERVER["PHP_SELF"]Ruta al programa que se está ejecutando./index.php
$_SERVER["SERVER_NAME"]Dominiositio web
$_SERVER["REQUEST_URI"]Camino/php/php_form.php
Manejo de la entrada del usuario

El programa de procesamiento de entrada PHP se puede separar del texto HTML que contiene los formularios de entrada o se puede colocar en una página.

Ejemplo 2 Ejemplo de procesamiento de entrada

Para obtener los datos del formulario, se utiliza la variable global $_POST. Representa una matriz asociativa de datos enviados mediante el método POST. Usando las claves podemos obtener los valores enviados. Las claves de esta matriz son los valores de los atributos de nombre de los campos de entrada del formulario.

Dado que el atributo de nombre del campo de entrada de inicio de sesión tiene el valor login(), en la matriz $_POST el valor de este campo representará la clave de "iniciar sesión": $_POST["login"]

Y dado que puede haber situaciones en las que el campo de entrada no se configurará, por ejemplo, al acceder directamente al script: http://localhost:8080/login.php. En este caso, es aconsejable comprobar la disponibilidad de los datos utilizando la función isset() antes de procesarlos. Y si la variable está configurada, entonces la función isset() devolverá verdadero.

Ahora podemos acceder al formulario:

Y cuando se presiona el botón, los datos ingresados ​​se enviarán al script mediante el método POST. iniciar sesión.php:

No es necesario enviar los datos del formulario a otro script; puede procesar los datos del formulario en el mismo archivo de formulario. Para hacer esto, cambiemos el archivo. formulario.php como sigue:

Iniciar sesión en el sitio Iniciar sesión:

Contraseña:

Seguridad de datos

La seguridad de los datos es de gran importancia en PHP. Veamos algunos mecanismos simples que pueden mejorar la seguridad de nuestro sitio web.

Pero primero, tomemos el formulario del tema anterior e intentemos ingresar algunos datos en él. Por ejemplo, ingresemos "alerta (hola);" en el campo de inicio de sesión y "contraseña" en el campo de contraseña:

Después de enviar los datos al marcado html, se inyectará el código javascript, que muestra una ventana con un mensaje.

Para evitar este tipo de problemas de seguridad, debería utilizar la función htmlentities():

If(isset($_POST["iniciar sesión"]) && isset($_POST["contraseña"]))( $iniciar sesión=htmlentities($_POST["iniciar sesión"]); $contraseña = htmlentities($_POST["contraseña" ]); echo "Su inicio de sesión: $iniciar sesión
Su contraseña: $contraseña"; )

E incluso después de ingresar el código html o javascript, se escaparán todas las etiquetas y obtendremos el siguiente resultado:

Otra función: la función strip_tags() le permite excluir completamente las etiquetas html:

If(isset($_POST["iniciar sesión"]) && isset($_POST["contraseña"]))( $iniciar sesión=strip_tags($_POST["iniciar sesión"]); $contraseña = strip_tags($_POST["contraseña" ]); echo "Su inicio de sesión: $iniciar sesión
Su contraseña: $contraseña"; )

El resultado de su operación con la misma entrada será la siguiente salida.

El operador SQL JOIN está diseñado para unir dos o más tablas de bases de datos según condiciones coincidentes. Este operador existe sólo en bases de datos relacionales. Es gracias a JOIN que las bases de datos relacionales tienen una funcionalidad tan poderosa que permite no solo almacenar datos, sino también su análisis, al menos el más simple, mediante consultas. Consideremos los principales matices de escribir consultas SQL con el operador JOIN, que son comunes a todos los DBMS (sistemas de gestión de bases de datos). Para unir dos tablas, la instrucción SQL JOIN tiene la siguiente sintaxis:

SELECCIONE COLUMN_NAMES (1..N) DE TABLE_NAME_1 ÚNASE A TABLE_NAME_2 EN CONDICIÓN

Uno o más enlaces con el operador JOIN pueden ir seguidos de una sección opcional WHERE o HAVING, en la que, al igual que en una consulta SELECT simple, se especifica la condición de selección. Lo común a todos los DBMS es que en esta construcción, en lugar de JOIN, se puede especificar INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, CROSS JOIN (o, alternativamente, una coma).

UNIÓN INTERNA

Una consulta con el operador INNER JOIN está diseñada para unir tablas y mostrar la tabla resultante en la que los datos se cruzan completamente de acuerdo con la condición especificada después de ON.

Una simple UNIÓN hace lo mismo. Por tanto, la palabra INTERIOR es opcional.

Ejemplo 1. Existe una base de datos de un portal de publicidad. Contiene una tabla de Categorías (categorías de anuncios) y Partes (partes o, de lo contrario, títulos que pertenecen a categorías). Por ejemplo, las piezas Apartamentos y Casas rurales pertenecen a la categoría Bienes raíces, y las piezas Coches y Motos pertenecen a la categoría Transporte. Estas tablas con datos completos se ven así:

Tabla de piezas:

Tenga en cuenta que en la tabla Piezas, los Libros tienen un Cat: un vínculo a una categoría, que no está en la tabla Categorías, y en la tabla Categorías, el Equipo tiene un Cat_ID: una clave principal, cuyo vínculo no está en las Piezas. mesa. Es necesario combinar los datos de estas dos tablas para que la tabla resultante contenga los campos Pieza, Cat y Precio y para que los datos se superpongan completamente según la condición. La condición es una coincidencia entre el identificador de categoría en la tabla Categorías y el enlace a la categoría en la tabla Piezas. Para ello, escriba la siguiente solicitud:

SELECCIONE PIEZAS.Parte, CATEGORÍAS.Cat_ID COMO Gato, CATEGORÍAS.Precio DE LAS PIEZAS UNIR CATEGORÍAS INTERNAS EN PIEZAS.Cat = CATEGORIAS.Cat_ID

ParteGatoPrecio
Apartamentos505 210,00
Coches205 160,00
tableros10 105,00
Armarios30 77,00

No hay Libros en la tabla resultante porque este registro hace referencia a una categoría que no está en la tabla Categorías y Equipo porque este registro tiene una clave externa en la tabla Categorías a la que no se hace referencia en la tabla Piezas.

Existe una base de datos "Teatro". La tabla Play contiene datos sobre producciones. Mesa de equipo: sobre los roles de los actores. La tabla de actores trata sobre actores. Mesa de directores: sobre directores. Los campos de la tabla y las claves primarias y externas se pueden ver en la siguiente figura (haga clic con el botón izquierdo para ampliar).


Ejemplo 2. Determine el actor más popular en los últimos 5 años.

El operador JOIN se puede utilizar 2 veces. Utilice RECUENTO, FECHA ACTUAL, solo las primeras 1 filas.

Ejemplo 3. Imprima una lista de actores que desempeñan más de un papel en una actuación y el número de sus papeles.

Utilice el operador JOIN 1 vez. Utilice TENER, AGRUPAR POR.

Clave. El operador HAVING se aplica al número de roles contados por la función agregada COUNT.

UNIÓN EXTERIOR IZQUIERDA

Una consulta con el operador LEFT OUTER JOIN está diseñada para unir tablas y mostrar una tabla resultante en la que los datos se cruzan completamente con la condición especificada después de ON y se complementa con registros de la primera tabla (izquierda), incluso si no lo hacen. cumplir con la condición. Los registros de la tabla de la izquierda que no cumplan la condición tendrán un valor de columna de la tabla de la derecha que será NULL (indefinido).

Ejemplo 4. La base de datos y las tablas son las mismas que en el ejemplo 1.

Para obtener una tabla resultante en la que los datos de dos tablas se cruzan completamente por condición y se complementan con todos los datos de la tabla Partes que no cumplen la condición, escriba la siguiente consulta:

SELECCIONE PIEZAS.Parte, CATEGORÍAS.Cat_ID COMO Gato, CATEGORÍAS.Precio DE LAS PIEZAS IZQUIERDAS UNIR CATEGORÍAS EXTERNAS EN PIEZAS.Cat = CATEGORIAS.Cat_ID

El resultado de la consulta será la siguiente tabla:

ParteGatoPrecio
Apartamentos505 210,00
Coches205 160,00
tableros10 105,00
Armarios30 77,00
Libros160 NULO

En la tabla resultante, a diferencia de la tabla del ejemplo 1, hay Libros, pero el valor de la columna Precio es NULL, ya que este registro tiene un identificador de categoría que no está en la tabla Categorías.

UNIÓN EXTERIOR DERECHA

Una consulta con el operador RIGHT OUTER JOIN está diseñada para unir tablas y mostrar una tabla resultante en la que los datos se cruzan completamente con la condición especificada después de ON y se complementa con registros de la segunda tabla (derecha), incluso si no lo hacen. cumplir con la condición. Los registros de la tabla de la derecha que no cumplan la condición tendrán un valor de columna de la tabla de la izquierda que será NULL (indefinido).

Ejemplo 5.

Para obtener la tabla resultante, en la que los datos de dos tablas se cruzan completamente según la condición y se complementan con todos los datos de la tabla Categorías que no cumplen la condición, escriba la siguiente consulta:

SELECCIONE PIEZAS.Parte, CATEGORÍAS.Cat_ID COMO Gato, CATEGORÍAS.Precio DE LAS PIEZAS EXTERIOR DERECHA UNIR CATEGORÍAS EN PIEZAS.Cat = CATEGORIAS.Cat_ID

El resultado de la consulta será la siguiente tabla:

ParteGatoPrecio
Apartamentos505 210,00
Coches205 160,00
tableros10 105,00
Armarios30 77,00
NULO45 65,00

En la tabla resultante, a diferencia de la tabla del ejemplo 1, hay un registro con categoría 45 y precio 65.00, pero el valor de la columna Pieza es NULL, ya que este registro tiene un identificador de categoría al que no se hace referencia en la tabla Piezas.

UNIÓN EXTERIOR COMPLETA (unión exterior completa)

Una consulta con el operador FULL OUTER JOIN está diseñada para unir tablas y generar una tabla resultante en la que los datos se cruzan completamente con la condición especificada después de ON y se complementa con registros de la primera (izquierda) y segunda (derecha) tablas. incluso si no cumplen con la condición. Los registros que no cumplan la condición tendrán columnas de la otra tabla que serán NULL (indefinidas).

Ejemplo 6. La base de datos y las tablas son las mismas que en los ejemplos anteriores.

Para obtener la tabla resultante, en la que los datos de las dos tablas se cruzan completamente por condición y se complementan con todos los datos tanto de la tabla Piezas como de la tabla Categorías que no cumplen la condición, escriba la siguiente consulta:

SELECCIONE PIEZAS.Parte, CATEGORÍAS.Cat_ID COMO Cat, CATEGORÍAS.Precio DE PIEZAS CATEGORÍAS DE UNIÓN EXTERIOR COMPLETA EN PIEZAS.Cat = CATEGORIAS.Cat_ID

El resultado de la consulta será la siguiente tabla:

ParteGatoPrecio
Apartamentos505 210,00
Coches205 160,00
tableros10 105,00
Armarios30 77,00
Libros160 NULO
NULO45 65,00

La tabla resultante contiene registros de Libros (de la tabla de la izquierda) y con categoría 45 (de la tabla de la derecha), y el primero de ellos tiene un precio indefinido (columna de la tabla de la derecha), y el segundo tiene una parte indefinida (columna de la tabla de la izquierda).

Alias ​​para tablas unidas

En consultas anteriores, indicamos los nombres completos de estas tablas con los nombres de las columnas extraídas de diferentes tablas. Este tipo de consultas parecen engorrosas: la misma palabra se repite varias veces. ¿Es posible simplificar de alguna manera el diseño? Resulta que es posible. Para hacer esto, use alias de tablas, sus nombres abreviados. Un apodo también puede constar de una letra. Es posible cualquier número de letras en un alias, lo principal es que la solicitud después de la abreviatura le resulte comprensible. La regla general es que en la sección de unión de la consulta, es decir, alrededor de la palabra JOIN, debe especificar los nombres completos de las tablas y cada nombre debe ir seguido de un alias de tabla.

Ejemplo 7: reescriba la consulta del Ejemplo 1 usando alias para las tablas unidas.

La solicitud será la siguiente:

SELECCIONE P.Parte, C.Cat_ID COMO Cat, C.Price DE LAS PIEZAS P CATEGORÍAS DE UNIÓN INTERNA C EN P.Cat = C.Cat_ID

La consulta devolverá lo mismo que la consulta del ejemplo 1, pero es mucho más compacta.

ÚNETE y unirte a más de dos mesas

Las bases de datos relacionales deben cumplir con los requisitos de integridad y no redundancia de los datos y, por lo tanto, los datos sobre un proceso de negocio pueden estar contenidos no solo en una, dos, sino también en tres o más tablas. En estos casos, se utilizan cadenas de tablas conectadas para analizar datos: por ejemplo, una (primera) tabla contiene un determinado indicador cuantitativo, la segunda tabla está conectada a la primera y tercera mediante claves externas: los datos se cruzan, pero solo la tercera La tabla contiene una condición, dependiendo de cuál puede ser el indicador cuantitativo que se deriva de la primera tabla. Y puede que haya incluso más mesas. Con el operador SQL JOIN, puede unir una gran cantidad de tablas en una sola consulta. En tales consultas, una sección de unión va seguida de otra, y cada JOIN posterior une a la siguiente tabla la tabla que era la segunda en el eslabón anterior de la cadena. Por tanto, la sintaxis de consulta SQL para unir más de dos tablas es la siguiente:

SELECCIONE COLUMNA_NOMBRES (1..N) DE TABLE_NAME_1 ÚNASE A TABLE_NAME_2 CONDICIÓN ÚNASE A TABLE_NAME_3 CON CONDICIÓN... ÚNETE A TABLE_NAME_M CONDICIÓN

Ejemplo 8. La base de datos es la misma que en los ejemplos anteriores. En este ejemplo, la tabla Anuncios se agregará a las tablas Categorías y Partes, que contienen datos sobre los anuncios publicados en el portal. A continuación se muestra un fragmento de la tabla Anuncios, en la que entre los registros se encuentran registros de aquellos anuncios cuyo periodo de publicación vence el 02/04/2018.

AyudaID_Partefecha_inicioFecha_finTexto
21 1 "2018-02-11" "2018-04-20" "Estoy vendiendo..."
22 1 "2018-02-11" "2018-05-12" "Estoy vendiendo..."
... ... ... ... ...
27 1 "2018-02-11" "2018-04-02" "Estoy vendiendo..."
28 2 "2018-02-11" "2018-04-21" "Estoy vendiendo..."
29 2 "2018-02-11" "2018-04-02" "Estoy vendiendo..."
30 3 "2018-02-11" "2018-04-22" "Estoy vendiendo..."
31 4 "2018-02-11" "2018-05-02" "Estoy vendiendo..."
32 4 "2018-02-11" "2018-04-13" "Estoy vendiendo..."
33 3 "2018-02-11" "2018-04-12" "Estoy vendiendo..."
34 4 "2018-02-11" "2018-04-23" "Estoy vendiendo..."

Imaginemos que hoy es "2018-04-02", es decir, este valor lo toma la función CURRENT_DATE - la fecha actual. Quieres saber a qué categorías pertenecen los anuncios cuyo plazo de publicación finaliza hoy. Los nombres de las categorías solo están en la tabla CATEGORÍAS y las fechas de vencimiento de los anuncios solo están en la tabla ADS. En la tabla PARTES: partes de categorías (o más simplemente, subcategorías) de anuncios publicados. Pero la clave externa Cat_ID vincula la tabla PARTS a la tabla CATEGORÍAS, y la tabla ADS vincula la clave externa Part_ID a la tabla PARTS. Por lo tanto, conectamos tres tablas en una consulta y esta consulta se puede llamar cadena con la máxima corrección.

La solicitud será la siguiente:

El resultado de la consulta es una tabla que contiene los nombres de dos categorías: "Bienes raíces" y "Transporte":

nombre_gato
Bienes raíces
Transporte
UNIÓN CRUZADA

El uso del operador SQL CROSS JOIN en su forma más simple, sin una condición de unión, implementa la operación del producto cartesiano en álgebra relacional. El resultado de dicha unión será la concatenación de cada fila de la primera tabla con cada fila de la segunda tabla. Las tablas se pueden escribir en una consulta mediante un operador CROSS JOIN o separadas por una coma.

Ejemplo 9. La base de datos sigue siendo la misma, las tablas son Categorías y Partes. Implemente la operación del producto cartesiano de estas dos tablas.

La solicitud será la siguiente:

SELECCIONAR (*) Categorías UNIÓN CRUZADA Piezas

O sin especificar explícitamente CROSS JOIN - separado por comas:

SELECCIONAR (*) Categorías, Piezas

La consulta devolverá una tabla de 5 * 5 = 25 filas, un fragmento de la cual se muestra a continuación:

ID_gatonombre_gatoPrecioID_ParteParteGato
10 Materiales de construcción105,00 1 Apartamentos505
10 Materiales de construcción105,00 2 Coches205
10 Materiales de construcción105,00 3 tableros10
10 Materiales de construcción105,00 4 Armarios30
10 Materiales de construcción105,00 5 Libros160
... ... ... ... ... ...
45 Técnica65,00 1 Apartamentos505
45 Técnica65,00 2 Coches205
45 Técnica65,00 3 tableros10
45 Técnica65,00 4 Armarios30
45 Técnica65,00 5 Libros160

Como puede verse en el ejemplo, si el resultado de dicha solicitud tiene algún valor, entonces quizás sea un valor visual en algunos casos en los que no es necesario mostrar información estructurada, especialmente incluso la muestra analítica más simple. Por cierto, puede especificar las columnas que se mostrarán en cada tabla, pero aun así el valor de la información de dicha consulta no aumentará.

¡Pero para CROSS JOIN puedes establecer una condición de unión! El resultado será completamente diferente. Cuando se utiliza el operador de coma en lugar de especificar explícitamente CROSS JOIN, la condición de unión no se especifica mediante la palabra ON, sino mediante la palabra WHERE.

Ejemplo 10. La misma base de datos del portal de publicidad, tablas de Categorías y Partes. Usando una unión cruzada, conecte tablas para que los datos se superpongan completamente según la condición. La condición es una coincidencia entre el identificador de categoría en la tabla Categorías y el enlace a la categoría en la tabla Piezas.

La solicitud será la siguiente:

La consulta devolverá lo mismo que la consulta del ejemplo 1:

ParteGatoPrecio
Apartamentos505 210,00
Coches205 160,00
tableros10 105,00
Armarios30 77,00

Y esta coincidencia no es casual. Una consulta con unión cruzada según la condición de unión es completamente similar a una consulta con unión interna - INNER JOIN - o, dado que la palabra INNER es opcional, simplemente JOIN.

Por lo tanto, qué variante de consulta utilizar es una cuestión de estilo o incluso de hábito del especialista en bases de datos. Quizás una unión cruzada con una condición en dos mesas pueda ser más compacta. Pero el beneficio de una unión cruzada para más de dos tablas (esto también es posible) es muy discutible. En este caso, las condiciones WHERE de la intersección se enumeran mediante la palabra AND. Este diseño puede resultar engorroso y difícil de leer si también hay una cláusula WHERE al final de la consulta con condiciones de recuperación.

Otros temas en el bloque "Bases de datos relacionales"




Arriba