{"id":15949,"date":"2024-07-22T21:26:37","date_gmt":"2024-07-22T17:56:37","guid":{"rendered":"https:\/\/www.itpiran.net\/blog\/?p=15949"},"modified":"2024-08-14T20:32:31","modified_gmt":"2024-08-14T17:02:31","slug":"how-to-use-joins-in-sql","status":"publish","type":"post","link":"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-joins-in-sql\/","title":{"rendered":"C\u00f3mo usar uniones en SQL"},"content":{"rendered":"<h2 id=\"%d9%85%d9%82%d8%af%d9%85%d9%87\">Introducci\u00f3n<\/h2>\n<p>Muchos dise\u00f1os de bases de datos separan la informaci\u00f3n en diferentes tablas seg\u00fan las relaciones entre puntos de datos espec\u00edficos. Incluso en casos como este, es probable que alguien quiera recuperar informaci\u00f3n de m\u00e1s de una tabla a la vez.<\/p>\n<p>Una forma com\u00fan de acceder a datos de varias tablas en una operaci\u00f3n de Lenguaje de Consulta Estructurado (SQL) es combinar tablas con una cl\u00e1usula JOIN. Bas\u00e1ndose en la operaci\u00f3n de uni\u00f3n del \u00e1lgebra relacional, una cl\u00e1usula JOIN combina tablas independientes haciendo coincidir las filas de cada tabla que est\u00e9n relacionadas entre s\u00ed. Normalmente, esta relaci\u00f3n se basa en un par de columnas (una de cada tabla) que comparten valores, como la clave externa de una tabla y la clave principal de otra tabla a la que hace referencia la clave externa.<\/p>\n<p>Esta gu\u00eda explica c\u00f3mo crear diversas consultas SQL que incluyen una cl\u00e1usula JOIN. Tambi\u00e9n muestra los diferentes tipos de cl\u00e1usulas JOIN, c\u00f3mo combinar datos de varias tablas y c\u00f3mo crear alias en columnas para simplificar la escritura de operaciones JOIN.<\/p>\n<h5 id=\"%d9%be%db%8c%d8%b4-%d9%86%db%8c%d8%a7%d8%b2%d9%87%d8%a7\">Requisitos previos<\/h5>\n<p>Para seguir esta gu\u00eda, necesitar\u00e1 una computadora con alg\u00fan tipo de sistema de gesti\u00f3n de bases de datos relacionales (SGBDR) que utilice SQL. Las instrucciones y ejemplos de esta gu\u00eda se han verificado en el siguiente entorno:<\/p>\n<ul>\n<li>Un servidor que ejecuta Ubuntu 20.04, con un usuario no root con privilegios administrativos y un firewall configurado con UFW<\/li>\n<li>MySQL est\u00e1 instalado y protegido en el servidor.<\/li>\n<li>Tambi\u00e9n necesitar\u00e1 una base de datos con algunas tablas cargadas con datos de ejemplo que pueda usar para practicar las operaciones JOIN. Le recomendamos consultar la secci\u00f3n &quot;Conectarse a MySQL y configurar una base de datos de ejemplo&quot; a continuaci\u00f3n para obtener m\u00e1s informaci\u00f3n sobre c\u00f3mo conectarse al servidor MySQL y crear la base de datos de prueba utilizada en los ejemplos de esta gu\u00eda.<\/li>\n<\/ul>\n<h5 id=\"%d8%a7%d8%aa%d8%b5%d8%a7%d9%84-%d8%a8%d9%87-mysql-%d9%88-%d8%b1%d8%a7%d9%87-%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c-%db%8c%da%a9-%d9%be%d8%a7%db%8c%da%af%d8%a7%d9%87-%d8%af%d8%a7%d8%af%d9%87-%d9%86%d9%85\">Conexi\u00f3n a MySQL y configuraci\u00f3n de una base de datos de ejemplo<\/h5>\n<p>Si su sistema de base de datos SQL se ejecuta en un servidor remoto, con\u00e9ctese a su servidor mediante SSH desde su m\u00e1quina local:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>ssh sammy@your_server_ip\r\n<\/code><\/pre>\n<\/div>\n<p>A continuaci\u00f3n, abre la consola del servidor MySQL y sustituye Sami por tu nombre de usuario de MySQL:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>mysql -u sammy -p\r\n<\/code><\/pre>\n<\/div>\n<p>Crea una base de datos llamada joinsDB:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE DATABASE joinsDB;\r\n<\/code><\/pre>\n<\/div>\n<p>Si la base de datos se crea correctamente, recibir\u00e1 el siguiente resultado:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nQuery OK, 1 row affected (0.01 sec)<\/code><\/pre>\n<\/div>\n<p>Para seleccionar la base de datos joinsDB, ejecute la siguiente declaraci\u00f3n USE:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>USE joinsDB;<\/code><\/pre>\n<\/div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\nDatabase changed<\/code><\/pre>\n<\/div>\n<p>Tras seleccionar joinsDB, cree varias tablas dentro de ella. Para los ejemplos de esta gu\u00eda, imagine que dirige una f\u00e1brica y ha decidido registrar la informaci\u00f3n sobre su l\u00ednea de producci\u00f3n, el equipo de ventas y las ventas de su empresa en una base de datos SQL. Comenzar\u00e1 con tres tablas, la primera de las cuales almacenar\u00e1 informaci\u00f3n sobre sus productos. Decide que esta primera tabla necesita tres columnas:<\/p>\n<ul>\n<li>ID de producto: El n\u00famero de identificaci\u00f3n de cada producto, expresado con el tipo de dato int. Esta columna act\u00faa como clave principal de la tabla, lo que significa que cada valor act\u00faa como un identificador \u00fanico para la fila correspondiente. Dado que cada valor de una clave principal debe ser \u00fanico, esta columna tambi\u00e9n tiene aplicada la restricci\u00f3n UNIQUE.<\/li>\n<li>productName: El nombre de cada producto se expresa utilizando el tipo de datos varchar con un m\u00e1ximo de 20 caracteres.<\/li>\n<li>Precio: El precio de cada producto, expresado en decimal. Esto especifica que cada valor de esta columna tiene un l\u00edmite m\u00e1ximo de cuatro d\u00edgitos, dos de los cuales se ubican a la derecha de la coma decimal. Por lo tanto, el rango de valores permitidos en esta columna es de -99,99 a 99,99.<\/li>\n<\/ul>\n<p>Cree una tabla llamada productos que tenga estas tres columnas:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE TABLE products (\r\nproductID int UNIQUE,\r\nproductName varchar(20),\r\nprice decimal (4,2),\r\nPRIMARY KEY (productID)\r\n);<\/code><\/pre>\n<\/div>\n<p>La segunda tabla almacena informaci\u00f3n sobre los empleados del equipo de ventas de su empresa. Usted decide que esta tabla tambi\u00e9n necesita tres columnas:<\/p>\n<ul>\n<li>empID: Similar a la columna productID, esta columna contiene un n\u00famero de identificaci\u00f3n \u00fanico para cada empleado del equipo de ventas, expresado como un tipo de dato int. Por lo tanto, esta columna tendr\u00e1 una restricci\u00f3n UNIQUE y actuar\u00e1 como clave principal de la tabla team.<\/li>\n<li>empName: El nombre de cada vendedor expresado utilizando el tipo de datos varchar con un m\u00e1ximo de 20 caracteres.<\/li>\n<li>ProductSpecialty: A cada miembro de tu equipo de ventas se le asigna un producto como especialidad. Pueden vender cualquier producto de tu empresa, pero su enfoque principal se centra en el producto en el que se especializan. Para representar esto en la tabla, crea esta columna que contiene el valor de productID de cada producto en el que se especializa cada empleado.<\/li>\n<\/ul>\n<p>Para garantizar que la columna productSpecialty contenga \u00fanicamente valores que representen n\u00fameros de ID de producto v\u00e1lidos, decide aplicar una restricci\u00f3n de clave externa a la columna que hace referencia a la columna productID de la tabla Products. Una restricci\u00f3n de clave externa es una forma de expresar una relaci\u00f3n entre dos tablas que exige que los valores de la columna a la que se aplica existan en la columna a la que hace referencia. En la siguiente instrucci\u00f3n CREATE TABLE, la restricci\u00f3n FOREIGN KEY exige que cualquier valor a\u00f1adido a la columna productSpecialty de la tabla team exista en la columna productID de la tabla Products.<\/p>\n<p>Crea una tabla llamada Equipo con estas tres columnas:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE TABLE team (\r\nempID int UNIQUE,\r\nempName varchar(20),\r\nproductSpecialty int,\r\nPRIMARY KEY (empID),\r\nFOREIGN KEY (productSpecialty) REFERENCES products (productID)\r\n);\r\n<\/code><\/pre>\n<\/div>\n<p>La \u00faltima tabla que cree contendr\u00e1 los registros de ventas de la empresa. Esta tabla tendr\u00e1 cuatro columnas:<\/p>\n<ul>\n<li>ID de venta: Al igual que las columnas ID de producto y ID de emp, esta columna contiene un n\u00famero de identificaci\u00f3n \u00fanico para cada venta, expresado como un tipo de dato entero. Esta columna tambi\u00e9n tiene una restricci\u00f3n UNIQUE para que pueda actuar como clave principal de la tabla de ventas.<\/li>\n<li>Cantidad: El n\u00famero de unidades vendidas de cada producto se expresa con el tipo de dato int.<\/li>\n<li>ID del producto: El n\u00famero de identificaci\u00f3n del producto vendido, expresado como un int.<\/li>\n<li>Vendedor: N\u00famero de identificaci\u00f3n del empleado que realiz\u00f3 la venta.<\/li>\n<\/ul>\n<p>Al igual que con la columna productSpecialty de la tabla team, decide aplicar restricciones FOREIGN KEY a las columnas productID y salesperson. Esto garantiza que estas columnas solo contengan valores presentes en las columnas productID de la tabla products y empID de la tabla team, respectivamente.<\/p>\n<p>Crea una tabla llamada Ventas con estas cuatro columnas:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>CREATE TABLE sales (\r\nsaleID int UNIQUE,\r\nquantity int,\r\nproductID int,\r\nsalesperson int,\r\nPRIMARY KEY (saleID),\r\nFOREIGN KEY (productID) REFERENCES products (productID),\r\nFOREIGN KEY (salesperson) REFERENCES team (empID)\r\n);<\/code><\/pre>\n<\/div>\n<p>Luego, cargue la tabla Productos con datos de muestra ejecutando la siguiente operaci\u00f3n INSERT INTO:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO products\r\nVALUES\r\n(1, 'widget', 18.99),\r\n(2, 'gizmo', 14.49),\r\n(3, 'thingamajig', 39.99),\r\n(4, 'doodad', 11.50),\r\n(5, 'whatzit', 29.99);<\/code><\/pre>\n<\/div>\n<p>A continuaci\u00f3n, cargue la tabla del equipo con datos de muestra:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO team\r\nVALUES\r\n(1, 'Florence', 1),\r\n(2, 'Mary', 4),\r\n(3, 'Diana', 3),\r\n(4, 'Betty', 2);<\/code><\/pre>\n<\/div>\n<p>Cargue tambi\u00e9n la tabla de ventas con datos de muestra:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO sales\r\nVALUES\r\n(1, 7, 1, 1),\r\n(2, 10, 5, 4),\r\n(3, 8, 2, 4),\r\n(4, 1, 3, 3),\r\n(5, 5, 1, 3);<\/code><\/pre>\n<\/div>\n<p>Finalmente, imagine que su empresa realiza algunas ventas sin la intervenci\u00f3n de ning\u00fan miembro del equipo de ventas. Para registrarlas, ejecute la siguiente operaci\u00f3n para agregar tres filas a la tabla Ventas que no tengan un valor en la columna Vendedor:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>INSERT INTO sales (saleID, quantity, productID)\r\nVALUES\r\n(6, 1, 5),\r\n(7, 3, 1),\r\n(8, 4, 5);<\/code><\/pre>\n<\/div>\n<p>Una vez hecho esto, estar\u00e1 listo para seguir el resto de la gu\u00eda y comenzar a aprender c\u00f3mo unir tablas en SQL.<\/p>\n<h5 id=\"%d8%af%d8%b1%da%a9-%d9%86%d8%ad%d9%88-%d8%b9%d9%85%d9%84%db%8c%d8%a7%d8%aa-join\">Comprender la sintaxis de la operaci\u00f3n JOIN<\/h5>\n<p>Las cl\u00e1usulas JOIN se pueden usar en diversas sentencias SQL, incluyendo operaciones UPDATE y DELETE. Sin embargo, a modo de ejemplo, los ejemplos de esta gu\u00eda utilizan consultas SELECT para demostrar su funcionamiento.<\/p>\n<p>El siguiente ejemplo muestra la sintaxis general de una declaraci\u00f3n SELECT que incluye una cl\u00e1usula JOIN:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT table1.column1, table2.column2\r\nFROM table1 JOIN table2\r\nON search_condition;<\/code><\/pre>\n<\/div>\n<p>Esta sintaxis comienza con una instrucci\u00f3n SELECT que devuelve dos columnas de dos tablas distintas. Tenga en cuenta que, dado que las cl\u00e1usulas JOIN comparan el contenido de m\u00e1s de una tabla, esta sintaxis de ejemplo especifica de qu\u00e9 tabla se seleccionar\u00e1 cada columna, precediendo el nombre de la columna con el nombre de la tabla y un punto. Esto se conoce como una referencia de columna completa.<\/p>\n<p>Puede usar referencias de columna completas como estas en cualquier operaci\u00f3n, pero t\u00e9cnicamente solo es necesario en operaciones donde dos columnas de tablas diferentes tienen el mismo nombre. Sin embargo, es recomendable usarlas al trabajar con varias tablas, ya que pueden facilitar la lectura y la comprensi\u00f3n de las operaciones JOIN.<\/p>\n<p>Despu\u00e9s de SELECT viene la cl\u00e1usula FROM. En cualquier consulta, la cl\u00e1usula FROM define el conjunto de datos que se debe buscar para obtener los datos deseados. La \u00fanica diferencia es que la cl\u00e1usula FROM consta de dos tablas separadas por la palabra clave JOIN. Una forma \u00fatil de planificar las consultas es recordar seleccionar las columnas que se devolver\u00e1n de la tabla que se desea consultar.<\/p>\n<p>Luego, existe una cl\u00e1usula ON que explica c\u00f3mo la consulta debe unir las dos tablas mediante la definici\u00f3n de una condici\u00f3n de b\u00fasqueda. Una condici\u00f3n de b\u00fasqueda es un conjunto de una o m\u00e1s declaraciones o expresiones que pueden evaluarse como &quot;verdadero&quot;, &quot;falso&quot; o &quot;desconocido&quot; para una condici\u00f3n espec\u00edfica. Puede ser \u00fatil considerar la operaci\u00f3n JOIN como la combinaci\u00f3n de todas las filas de ambas tablas y la devoluci\u00f3n de todas las filas para las que la condici\u00f3n de b\u00fasqueda de la cl\u00e1usula ON se eval\u00faa como &quot;verdadero&quot;.<\/p>\n<p>En una cl\u00e1usula ON, suele ser conveniente incluir una condici\u00f3n de b\u00fasqueda que compruebe si dos columnas relacionadas (como la clave externa de una tabla y la clave principal de otra tabla a la que hace referencia la clave externa) tienen valores iguales. Esto se conoce a veces como una uni\u00f3n equitativa.<\/p>\n<p>Como ejemplo de c\u00f3mo equi puede unir datos coincidentes de varias tablas, ejecute la siguiente consulta con los datos de ejemplo que agreg\u00f3 anteriormente. Esto une las tablas Productos y Equipo con una condici\u00f3n de b\u00fasqueda que busca valores coincidentes en sus respectivas columnas ID de producto y Especialidad de producto. A continuaci\u00f3n, devuelve el nombre de cada miembro del equipo de ventas, el nombre de cada producto en el que se especializa y el precio de dichos productos:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT team.empName, products.productName, products.price\r\nFROM products JOIN team\r\nON products.productID = team.productSpecialty<\/code><\/pre>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u0646\u062a\u0627\u06cc\u062c \u0627\u06cc\u0646 \u067e\u0631\u0633 \u0648 \u062c\u0648 \u0627\u0633\u062a:<\/p>\n<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+----------+-------------+-------+\r\n| empName | productName | price |\r\n+----------+-------------+-------+\r\n| Florence | widget | 18.99 |\r\n| Mary | doodad | 11.50 |\r\n| Diana | thingamajig | 39.99 |\r\n| Betty | gizmo | 14.49 |\r\n+----------+-------------+-------+\r\n4 rows in set (0.00 sec)<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Para ilustrar c\u00f3mo SQL combina estas tablas para formar este conjunto de resultados, analicemos el proceso con m\u00e1s detalle. Para ser claros, lo siguiente no explica exactamente c\u00f3mo un sistema de gesti\u00f3n de bases de datos unir\u00eda dos tablas, pero puede ser \u00fatil considerar la operaci\u00f3n JOIN como un procedimiento.<\/p>\n<p>En primer lugar, la consulta imprime los productos de cada fila y columna de la primera tabla en la cl\u00e1usula FROM:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>JOIN Process Example\r\n+-----------+-------------+-------+\r\n| productID | productName | price |\r\n+-----------+-------------+-------+\r\n| 1 | widget | 18.99 |\r\n| 2 | gizmo | 14.49 |\r\n| 3 | thingamajig | 39.99 |\r\n| 4 | doodad | 11.50 |\r\n| 5 | whatzit | 29.99 |\r\n+-----------+-------------+-------+<\/code><\/pre>\n<div>\u0633\u067e\u0633\u060c \u0628\u0647 \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u062f\u06cc\u0641\u200c\u0647\u0627 \u0646\u06af\u0627\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0628\u0627 \u0647\u0631 \u0631\u062f\u06cc\u0641\u06cc \u0627\u0632 \u062c\u062f\u0648\u0644 \u062a\u06cc\u0645 \u06a9\u0647 productSpecialty \u0622\u0646 \u0628\u0631\u0627\u0628\u0631 \u0628\u0627 \u0645\u0642\u062f\u0627\u0631 productID \u062f\u0631 \u0622\u0646 \u0633\u0637\u0631 \u0627\u0633\u062a\u060c \u0645\u0637\u0627\u0628\u0642\u062a \u0645\u06cc\u200c\u062f\u0647\u062f:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>JOIN Process Example\r\n+-----------+-------------+-------+-------+----------+------------------+\r\n| productID | productName | price | empID | empName | productSpecialty |\r\n+-----------+-------------+-------+-------+----------+------------------+\r\n| 1 | widget | 18.99 | 1 | Florence | 1 |\r\n| 2 | gizmo | 14.49 | 4 | Betty | 2 |\r\n| 3 | thingamajig | 39.99 | 3 | Diana | 3 |\r\n| 4 | doodad | 11.50 | 2 | Mary | 4 |\r\n| 5 | whatzit | 29.99 | | | |\r\n+-----------+-------------+-------+-------+----------+------------------+<\/code><\/pre>\n<div>\u0633\u067e\u0633\u060c \u0633\u0637\u0631\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0637\u0627\u0628\u0642\u062a \u0646\u062f\u0627\u0631\u0646\u062f \u0631\u0627 \u0628\u0631\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f \u0648 \u0633\u062a\u0648\u0646\u200c\u0647\u0627 \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u062a\u0631\u062a\u06cc\u0628 \u0622\u0646\u0647\u0627 \u062f\u0631 \u0639\u0628\u0627\u0631\u062a SELECT \u0645\u0631\u062a\u0628 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0633\u062a\u0648\u0646\u200c\u0647\u0627\u06cc\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u0634\u062e\u0635 \u0646\u0634\u062f\u0647 \u0628\u0648\u062f\u0646\u062f \u062d\u0630\u0641 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u0631\u062f\u06cc\u0641\u200c\u0647\u0627 \u0631\u0627 \u0645\u062a\u0648\u0633\u0644 \u0645\u06cc\u200c\u06a9\u0646\u062f \u0648 \u0645\u062c\u0645\u0648\u0639\u0647 \u0646\u062a\u0627\u06cc\u062c \u0646\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f:<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>JOIN Process Example\r\n+----------+-------------+-------+\r\n| empName | productName | price |\r\n+----------+-------------+-------+\r\n| Florence | widget | 18.99 |\r\n| Mary | doodad | 11.50 |\r\n| Diana | thingamajig | 39.99 |\r\n| Betty | gizmo | 14.49 |\r\n+----------+-------------+-------+\r\n4 rows in set (0.00 sec)<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Usar uniones equi es la forma m\u00e1s com\u00fan de unir tablas, pero otros operadores SQL como &lt;, &gt;, LIKE, NOT LIKE o incluso BETWEEN pueden usarse en la condici\u00f3n de b\u00fasqueda de la cl\u00e1usula ON. Sin embargo, tenga en cuenta que usar condiciones de b\u00fasqueda m\u00e1s complejas puede dificultar la predicci\u00f3n de los datos que aparecer\u00e1n en el conjunto de resultados.<\/p>\n<p>En la mayor\u00eda de las implementaciones, se pueden unir tablas mediante cualquier conjunto de columnas que tengan lo que el est\u00e1ndar SQL denomina un tipo de datos &quot;JOIN calificado&quot;. Esto significa que, en general, se puede unir una columna que contenga datos num\u00e9ricos con cualquier otra columna que contenga datos num\u00e9ricos, independientemente de los tipos de datos correspondientes. De igual forma, se puede unir cualquier columna que contenga valores de caracteres con cualquier otra columna que contenga datos de caracteres. Como se mencion\u00f3 anteriormente, las columnas que se combinan para unir dos tablas suelen ser columnas que representan una relaci\u00f3n entre ellas, como una clave externa y la clave principal de otra tabla a la que hace referencia.<\/p>\n<p>Muchas implementaciones de SQL permiten unir columnas con el mismo nombre mediante la palabra clave USING en lugar de ON. La sintaxis para esta operaci\u00f3n podr\u00eda ser:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT table1.column1, table2.column2\r\nFROM table1 JOIN table2\r\nUSING (related_column);<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>En esta sintaxis de ejemplo, la instrucci\u00f3n USING es equivalente a ON table1.related_column = table2.related_column;.<\/p>\n<p>Dado que las ventas y los productos tienen una columna llamada productID, puede unirlas mediante la palabra clave USING. La siguiente instrucci\u00f3n realiza esto y devuelve el saleID de cada venta, el n\u00famero de unidades vendidas, el nombre de cada producto vendido y su precio. Adem\u00e1s, ordena el conjunto de resultados seg\u00fan el valor de saleID en orden ascendente:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>SELECT sales.saleID, sales.quantity, products.productName, products.price\r\nFROM sales JOIN products\r\nUSING (productID)\r\nORDER BY saleID;<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+--------+----------+-------------+-------+\r\n| saleID | quantity | productName | price |\r\n+--------+----------+-------------+-------+\r\n| 1 | 7 | widget | 18.99 |\r\n| 2 | 10 | whatzit | 29.99 |\r\n| 3 | 8 | gizmo | 14.49 |\r\n| 4 | 1 | thingamajig | 39.99 |\r\n| 5 | 5 | widget | 18.99 |\r\n| 6 | 1 | whatzit | 29.99 |\r\n| 7 | 3 | widget | 18.99 |\r\n| 8 | 4 | whatzit | 29.99 |\r\n+--------+----------+-------------+-------+\r\n8 rows in set (0.00 sec)<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Al unir tablas, el sistema de base de datos a veces organiza las filas de maneras dif\u00edciles de predecir. Incluir una cl\u00e1usula ORDER BY como esta puede ayudar a que los conjuntos de resultados sean m\u00e1s coherentes y legibles.<\/p>\n<h5 id=\"%d9%be%db%8c%d9%88%d8%b3%d8%aa%d9%86-%d8%a8%d9%87-%d8%a8%db%8c%d8%b4-%d8%a7%d8%b2-%d8%af%d9%88-%d8%ac%d8%af%d9%88%d9%84\">Unir m\u00e1s de dos mesas<\/h5>\n<p>Puede que en ocasiones necesite combinar datos de m\u00e1s de dos tablas. Puede unir cualquier n\u00famero de tablas anidando cl\u00e1usulas JOIN dentro de otras cl\u00e1usulas JOIN. La siguiente sintaxis es un ejemplo de c\u00f3mo se ver\u00eda al unir tres tablas:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT table1.column1, table2.column2, table3.column3\r\nFROM table1 JOIN table2\r\nON table1.related_column = table2.related_column\r\nJOIN table3\r\nON table3.related_column = table1_or_2.related_column;<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>La cl\u00e1usula FROM en esta declaraci\u00f3n de ejemplo comienza uniendo la tabla 1 a la tabla 2. Despu\u00e9s de esta cl\u00e1usula ON, comienza una segunda JOIN que combina el conjunto inicial de tablas unidas con la tabla 3. Tenga en cuenta que la tercera tabla se puede unir a una columna de la primera o la segunda tabla.<\/p>\n<p>Por ejemplo, imagine que desea saber cu\u00e1nto generaron las ventas de su empleado, pero solo le interesan los registros de ventas que incluyen las ventas de un producto en el que el empleado se especializa.<\/p>\n<p>Para obtener esta informaci\u00f3n, puede ejecutar la siguiente consulta. Esta consulta comienza uniendo las tablas Productos y Ventas mediante la coincidencia de sus respectivas columnas productID. A continuaci\u00f3n, une la tabla Equipo con las dos primeras tablas haciendo coincidir cada fila del JOIN inicial con su columna productSpecialty. La consulta filtra los resultados con una cl\u00e1usula WHERE para devolver solo las filas donde el empleado coincidente sea tambi\u00e9n la persona que realiz\u00f3 la venta. La consulta tambi\u00e9n incluye una cl\u00e1usula ORDER BY que ordena los resultados finales en orden ascendente seg\u00fan el valor de la columna saleID:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT sales.saleID,\r\nteam.empName,\r\nproducts.productName,\r\n(sales.quantity * products.price)\r\nFROM products JOIN sales\r\nUSING (productID)\r\nJOIN team\r\nON team.productSpecialty = sales.productID\r\nWHERE team.empID = sales.salesperson\r\nORDER BY sales.saleID;\r\n<\/code><\/pre>\n<\/div>\n<\/div>\n<div>Observe que entre las columnas de la instrucci\u00f3n SELECT hay una que multiplica los valores de la columna Valor de la tabla Ventas por los valores de Precio de la tabla Productos. Productos devuelve estos valores en las filas correspondientes:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+--------+----------+-------------+-----------------------------------+\r\n| saleID | empName | productName | (sales.quantity * products.price) |\r\n+--------+----------+-------------+-----------------------------------+\r\n| 1 | Florence | widget | 132.93 |\r\n| 3 | Betty | gizmo | 115.92 |\r\n| 4 | Diana | thingamajig | 39.99 |\r\n+--------+----------+-------------+-----------------------------------+\r\n3 rows in set (0.00 sec)<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Hasta ahora, todos los ejemplos ten\u00edan un tipo de expresi\u00f3n JOIN: una uni\u00f3n interna. Contin\u00fae leyendo la siguiente secci\u00f3n para obtener una descripci\u00f3n general de las uniones internas, las uniones externas y sus diferencias.<\/p>\n<h2 id=\"%d8%b9%d9%85%d9%84%db%8c%d8%a7%d8%aa-join-%d8%af%d8%a7%d8%ae%d9%84%db%8c-%d8%af%d8%b1-%d9%85%d9%82%d8%a7%d8%a8%d9%84-%d8%a8%db%8c%d8%b1%d9%88%d9%86%db%8c\">Operaciones JOIN internas y externas<\/h2>\n<p>Existen dos tipos principales de instrucciones JOIN: uniones internas y externas. La diferencia entre estos dos tipos de uniones radica en los datos que devuelven. Las uniones internas devuelven solo las filas coincidentes de cada tabla unida, mientras que las uniones externas devuelven tanto las filas coincidentes como las no coincidentes.<\/p>\n<p>La sintaxis y las consultas de ejemplo de las secciones anteriores utilizan sentencias INNER JOIN, aunque ninguna incluye la palabra clave INNER. La mayor\u00eda de las implementaciones de SQL tratan cada sentencia JOIN como una uni\u00f3n INNER, a menos que se indique expl\u00edcitamente lo contrario.<\/p>\n<p>Las consultas que especifican una uni\u00f3n externa combinan varias tablas y devuelven tanto las filas coincidentes como las no coincidentes. Esto puede ser \u00fatil para encontrar filas con valores faltantes o en casos donde se acepta una coincidencia parcial.<\/p>\n<p>Las operaciones de uni\u00f3n externa se pueden dividir en tres tipos: uniones EXTERIORES IZQUIERDAS, uniones EXTERIORES DERECHAS y uniones EXTERIORES COMPLETAS. Las uniones EXTERIORES IZQUIERDAS, o simplemente uniones izquierdas, devuelven todas las filas coincidentes de las dos tablas unidas, as\u00ed como todas las filas no coincidentes de la tabla &quot;izquierda&quot;. En el contexto de una operaci\u00f3n JOIN, la tabla &quot;izquierda&quot; siempre es la primera tabla especificada inmediatamente despu\u00e9s de la palabra clave FROM y a la izquierda de la palabra clave JOIN. De manera similar, la tabla &quot;derecha&quot; es la segunda tabla, o la tabla que viene inmediatamente despu\u00e9s de JOIN, y una uni\u00f3n EXTERIOR DERECHA devuelve todas las filas coincidentes de las tablas unidas, junto con todas las filas no coincidentes de la tabla &quot;derecha&quot;. FULL OUTER JOIN devuelve todas las filas de ambas tablas, incluidas las filas de cualquiera de las tablas que no coinciden.<\/p>\n<p>Para demostrar c\u00f3mo estos diferentes tipos de cl\u00e1usulas JOIN devuelven datos, ejecute las siguientes consultas de ejemplo en las tablas creadas en la secci\u00f3n anterior &quot;Conexi\u00f3n y configuraci\u00f3n de una base de datos de ejemplo&quot;. Estas consultas son id\u00e9nticas, salvo que cada una especifica un tipo diferente de cl\u00e1usula JOIN.<\/p>\n<p>Este primer ejemplo utiliza una uni\u00f3n interna para combinar las tablas de ventas y equipo mediante la coincidencia de las columnas de vendedor y empID correspondientes. De nuevo, la palabra clave INNER est\u00e1 impl\u00edcita, aunque no se incluya expl\u00edcitamente:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT sales.saleID, sales.quantity, sales.salesperson, team.empName \r\nFROM sales JOIN team\r\nON sales.salesperson = team.empID;<\/code><\/pre>\n<\/div>\n<\/div>\n<div>Debido a que esta consulta utiliza una cl\u00e1usula JOIN interna, solo devuelve filas coincidentes de ambas tablas:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\">Output\r\n+--------+----------+-------------+----------+\r\n| saleID | quantity | salesperson | empName |\r\n+--------+----------+-------------+----------+\r\n| 1 | 7 | 1 | Florence |\r\n| 4 | 1 | 3 | Diana |\r\n| 5 | 5 | 3 | Diana |\r\n| 2 | 10 | 4 | Betty |\r\n| 3 | 8 | 4 | Betty |\r\n+--------+----------+-------------+----------+\r\n5 rows in set (0.00 sec)<\/pre>\n<\/div>\n<\/div>\n<div>Esta versi\u00f3n de la consulta utiliza una cl\u00e1usula LEFT OUTER JOIN en su lugar:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT sales.saleID, sales.quantity, sales.salesperson, team.empName\r\nFROM sales LEFT OUTER JOIN team\r\nON sales.salesperson = team.empID;<\/code><\/pre>\n<\/div>\n<\/div>\n<div>Al igual que la consulta anterior, esta devuelve cualquier valor coincidente de ambas tablas. Sin embargo, devuelve cualquier valor de la tabla izquierda (en este caso, Ventas) que no coincida con la tabla derecha (Equipo). Dado que estas filas de la tabla izquierda no coinciden con la derecha, los valores no coincidentes se devuelven como NULL:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+--------+----------+-------------+----------+\r\n| saleID | quantity | salesperson | empName |\r\n+--------+----------+-------------+----------+\r\n| 1 | 7 | 1 | Florence |\r\n| 2 | 10 | 4 | Betty |\r\n| 3 | 8 | 4 | Betty |\r\n| 4 | 1 | 3 | Diana |\r\n| 5 | 5 | 3 | Diana |\r\n| 6 | 1 | NULL | NULL |\r\n| 7 | 3 | NULL | NULL |\r\n| 8 | 4 | NULL | NULL |\r\n+--------+----------+-------------+----------+\r\n8 rows in set (0.00 sec)<\/code><\/pre>\n<\/div>\n<\/div>\n<div>Esta pr\u00f3xima versi\u00f3n de la consulta utiliza una cl\u00e1usula RIGHT JOIN en su lugar:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT sales.saleID, sales.quantity, sales.salesperson, team.empName\r\nFROM sales RIGHT JOIN team\r\nON sales.salesperson = team.empID;<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Tenga en cuenta que la cl\u00e1usula JOIN de esta consulta indica &quot;RIGHT JOIN&quot; en lugar de &quot;RIGHT OUTER JOIN&quot;. As\u00ed como la palabra clave INNER no es necesaria para especificar una cl\u00e1usula INNER JOIN, OUTER se implica al escribir &quot;LEFT JOIN&quot; o &quot;RIGHT JOIN&quot;.<\/p>\n<p>El resultado de esta consulta es el opuesto al anterior, ya que devuelve todas las filas de ambas tablas, pero solo filas \u00fanicas de la tabla \u201ccorrecta\u201d:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+--------+----------+-------------+----------+\r\n| saleID | quantity | salesperson | empName |\r\n+--------+----------+-------------+----------+\r\n| 1 | 7 | 1 | Florence |\r\n| NULL | NULL | NULL | Mary |\r\n| 4 | 1 | 3 | Diana |\r\n| 5 | 5 | 3 | Diana |\r\n| 2 | 10 | 4 | Betty |\r\n| 3 | 8 | 4 | Betty |\r\n+--------+----------+-------------+----------+\r\n6 rows in set (0.00 sec)<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Alias de tablas y columnas en cl\u00e1usulas JOIN<\/p>\n<p>Al unir tablas con nombres largos o muy descriptivos, escribir m\u00faltiples referencias de columna completas puede resultar tedioso. Para evitarlo, a veces resulta \u00fatil proporcionar un alias m\u00e1s corto para el nombre de la tabla o columna.<\/p>\n<p>Puede hacer esto en SQL siguiendo cada definici\u00f3n de tabla en la cl\u00e1usula FROM con la palabra clave AS y luego con el alias de su elecci\u00f3n:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT t1.column1, t2.column2\r\nFROM table1 AS t1 JOIN table2 AS t2\r\nON t1.related_column = t2.related_column;<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Esta sintaxis de ejemplo utiliza alias en la cl\u00e1usula SELECT, aunque no est\u00e9n definidos antes de la cl\u00e1usula FROM. Esto es posible porque, en las consultas SQL, el orden de ejecuci\u00f3n comienza con la cl\u00e1usula FROM. Esto puede resultar confuso, pero conviene recordarlo y considerar los alias antes de empezar a escribir la consulta.<\/p>\n<p>Por ejemplo, ejecute la siguiente consulta que une las tablas Ventas y Productos, proporcion\u00e1ndoles los alias S y P, respectivamente:<\/p>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT S.saleID, S.quantity,\r\nP.productName,\r\n(P.price * S.quantity) AS revenue \r\nFROM sales AS S JOIN products AS P\r\nUSING (productID);<\/code><\/pre>\n<\/div>\n<\/div>\n<div>Tenga en cuenta que este ejemplo crea un tercer alias, Ingresos, para el producto de los valores de la columna Importe de la tabla Ventas y sus valores correspondientes de la columna Precio de la tabla Productos. Esto solo es evidente en el nombre de la columna en el conjunto de resultados, pero proporcionar un alias como este puede ser \u00fatil para transmitir el significado o la intenci\u00f3n de los resultados de la consulta:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-plain\" data-lang=\"Plain Text\"><code>Output\r\n+--------+----------+-------------+---------+\r\n| saleID | quantity | productName | revenue |\r\n+--------+----------+-------------+---------+\r\n| 1 | 7 | widget | 132.93 |\r\n| 2 | 10 | whatzit | 299.90 |\r\n| 3 | 8 | gizmo | 115.92 |\r\n| 4 | 1 | thingamajig | 39.99 |\r\n| 5 | 5 | widget | 94.95 |\r\n| 6 | 1 | whatzit | 29.99 |\r\n| 7 | 3 | widget | 56.97 |\r\n| 8 | 4 | whatzit | 119.96 |\r\n+--------+----------+-------------+---------+\r\n8 rows in set (0.00 sec)<\/code><\/pre>\n<\/div>\n<\/div>\n<div>Tenga en cuenta que la palabra clave AS es t\u00e9cnicamente opcional al definir un alias. El ejemplo anterior tambi\u00e9n podr\u00eda escribirse as\u00ed:<\/div>\n<div>\n<div class=\"hcb_wrap\" data-no-translation=\"\" data-no-auto-translation=\"\">\n<pre class=\"prism line-numbers lang-sql\" data-lang=\"SQL\"><code>SELECT S.saleID, S.quantity, P.productName, (P.price * S.quantity) revenue \r\nFROM sales S JOIN products P\r\nUSING (productID);<\/code><\/pre>\n<\/div>\n<\/div>\n<div>\n<p>Aunque la palabra clave AS no es necesaria para definir un alias, se recomienda incluirla. Esto ayuda a mantener clara la intenci\u00f3n de la consulta y a mejorar su legibilidad.<\/p>\n<h2 id=\"%d9%86%d8%aa%db%8c%d8%ac%d9%87\">Resultado<\/h2>\n<p>Al leer esta gu\u00eda, aprendi\u00f3 a usar la operaci\u00f3n JOIN para combinar tablas independientes en un conjunto de resultados de consulta. Si bien los comandos que se muestran aqu\u00ed deber\u00edan funcionar en la mayor\u00eda de las bases de datos relacionales, tenga en cuenta que cada base de datos SQL utiliza su propia implementaci\u00f3n del lenguaje. Consulte la documentaci\u00f3n de su sistema de gesti\u00f3n de bases de datos (SGBD) para obtener una explicaci\u00f3n m\u00e1s completa de cada comando y sus opciones.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"Introducci\u00f3n Muchos dise\u00f1os de bases de datos organizan la informaci\u00f3n en tablas seg\u00fan las relaciones entre puntos de datos espec\u00edficos.","protected":false},"author":1,"featured_media":16027,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL","_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_yoast_wpseo_focuskeywords":"","_yoast_wpseo_primary_category":"193","footnotes":""},"categories":[193,349],"tags":[403,391],"class_list":{"0":"post-15949","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tutorials","8":"category-database","9":"tag-data-base","10":"tag-mysql"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-joins-in-sql\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"og:description\" content=\"\u0645\u0642\u062f\u0645\u0647 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0637\u0631\u0627\u062d\u06cc \u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0631\u0648\u0627\u0628\u0637 \u0628\u06cc\u0646 \u0646\u0642\u0627\u0637 \u062f\u0627\u062f\u0647 \u062e\u0627\u0635\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0627 \u0628\u0647 \u062c\u062f\u0627\u0648\u0644&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-joins-in-sql\/\" \/>\n<meta property=\"og:site_name\" content=\"\u0628\u0644\u0627\u06af ITPiran\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-22T17:56:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-14T17:02:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.itpiran.net\/2024\/07\/14203156\/joins-sql.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1793\" \/>\n\t<meta property=\"og:image:height\" content=\"1110\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\"},\"headline\":\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL\",\"datePublished\":\"2024-07-22T17:56:37+00:00\",\"dateModified\":\"2024-08-14T17:02:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/\"},\"wordCount\":213,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/14203156\\\/joins-sql.jpg\",\"keywords\":[\"data base\",\"MySQL\"],\"articleSection\":[\"\u0622\u0645\u0648\u0632\u0634\u06cc\",\"\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/\",\"name\":\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/14203156\\\/joins-sql.jpg\",\"datePublished\":\"2024-07-22T17:56:37+00:00\",\"dateModified\":\"2024-08-14T17:02:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/14203156\\\/joins-sql.jpg\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2024\\\/07\\\/14203156\\\/joins-sql.jpg\",\"width\":1793,\"height\":1110},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/tutorials\\\/how-to-use-joins-in-sql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0622\u0645\u0648\u0632\u0634\u06cc\",\"item\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/category\\\/tutorials\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"name\":\"\u0628\u0644\u0627\u06af ITPiran\",\"description\":\"\u0627\u062e\u0628\u0627\u0631 \u0648 \u0645\u0642\u0627\u0644\u0627\u062a \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#organization\",\"name\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\",\"alternateName\":\"ITPIran Blog\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"contentUrl\":\"https:\\\/\\\/cdn.itpiran.net\\\/2023\\\/12\\\/27150508\\\/cropped-ITPIRAN-BLOG-LOGO-2.png\",\"width\":512,\"height\":512,\"caption\":\"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646\"},\"image\":{\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/#\\\/schema\\\/person\\\/04ed27b919baca468a2273f8e4318f81\",\"name\":\"admin\",\"url\":\"https:\\\/\\\/www.itpiran.net\\\/blog\\\/es\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"C\u00f3mo usar uniones en SQL - Blog de ITPiran","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-joins-in-sql\/","og_locale":"es_ES","og_type":"article","og_title":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL - \u0628\u0644\u0627\u06af ITPiran","og_description":"\u0645\u0642\u062f\u0645\u0647 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0637\u0631\u0627\u062d\u06cc \u0647\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0631\u0648\u0627\u0628\u0637 \u0628\u06cc\u0646 \u0646\u0642\u0627\u0637 \u062f\u0627\u062f\u0647 \u062e\u0627\u0635\u060c \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0627 \u0628\u0647 \u062c\u062f\u0627\u0648\u0644&hellip;","og_url":"https:\/\/www.itpiran.net\/blog\/es\/tutorials\/how-to-use-joins-in-sql\/","og_site_name":"\u0628\u0644\u0627\u06af ITPiran","article_published_time":"2024-07-22T17:56:37+00:00","article_modified_time":"2024-08-14T17:02:31+00:00","og_image":[{"width":1793,"height":1110,"url":"https:\/\/cdn.itpiran.net\/2024\/07\/14203156\/joins-sql.jpg","type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"admin","Tiempo de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#article","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/"},"author":{"name":"admin","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81"},"headline":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL","datePublished":"2024-07-22T17:56:37+00:00","dateModified":"2024-08-14T17:02:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/"},"wordCount":213,"commentCount":0,"publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2024\/07\/14203156\/joins-sql.jpg","keywords":["data base","MySQL"],"articleSection":["\u0622\u0645\u0648\u0632\u0634\u06cc","\u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/","url":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/","name":"C\u00f3mo usar uniones en SQL - Blog de ITPiran","isPartOf":{"@id":"https:\/\/www.itpiran.net\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#primaryimage"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.itpiran.net\/2024\/07\/14203156\/joins-sql.jpg","datePublished":"2024-07-22T17:56:37+00:00","dateModified":"2024-08-14T17:02:31+00:00","breadcrumb":{"@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#primaryimage","url":"https:\/\/cdn.itpiran.net\/2024\/07\/14203156\/joins-sql.jpg","contentUrl":"https:\/\/cdn.itpiran.net\/2024\/07\/14203156\/joins-sql.jpg","width":1793,"height":1110},{"@type":"BreadcrumbList","@id":"https:\/\/www.itpiran.net\/blog\/tutorials\/how-to-use-joins-in-sql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.itpiran.net\/blog\/"},{"@type":"ListItem","position":2,"name":"\u0622\u0645\u0648\u0632\u0634\u06cc","item":"https:\/\/www.itpiran.net\/blog\/category\/tutorials\/"},{"@type":"ListItem","position":3,"name":"\u0646\u062d\u0648\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Joins \u062f\u0631 SQL"}]},{"@type":"WebSite","@id":"https:\/\/www.itpiran.net\/blog\/#website","url":"https:\/\/www.itpiran.net\/blog\/","name":"Blog de ITPiran","description":"Noticias y art\u00edculos sobre comercio sostenible en Ir\u00e1n","publisher":{"@id":"https:\/\/www.itpiran.net\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.itpiran.net\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.itpiran.net\/blog\/#organization","name":"Blog sobre negocios iran\u00edes sostenibles","alternateName":"ITPIran Blog","url":"https:\/\/www.itpiran.net\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","contentUrl":"https:\/\/cdn.itpiran.net\/2023\/12\/27150508\/cropped-ITPIRAN-BLOG-LOGO-2.png","width":512,"height":512,"caption":"\u0628\u0644\u0627\u06af \u062a\u062c\u0627\u0631\u062a \u067e\u0627\u06cc\u062f\u0627\u0631 \u0627\u06cc\u0631\u0627\u0646\u06cc\u0627\u0646"},"image":{"@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.itpiran.net\/blog\/#\/schema\/person\/04ed27b919baca468a2273f8e4318f81","name":"administraci\u00f3n","url":"https:\/\/www.itpiran.net\/blog\/es\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15949","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/comments?post=15949"}],"version-history":[{"count":4,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15949\/revisions"}],"predecessor-version":[{"id":16028,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/posts\/15949\/revisions\/16028"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/media\/16027"}],"wp:attachment":[{"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/media?parent=15949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/categories?post=15949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itpiran.net\/blog\/es\/wp-json\/wp\/v2\/tags?post=15949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}