Contactos

MySQL conecta dos tablas

¿Qué se realiza antes - unirse o grupo por? Esta pregunta implícita no surgió de mí hasta que la respuesta a ella ha surgido en forma de datos erróneos devueltos por mi solicitud. Por supuesto, la única unión se realiza antes, también está escrito para agrupar en consultas. Pero, ¿qué pasa si necesito? ¿Combinar las tablas ya después de agrupar? Considere un ejemplo simple cuando puede ser necesario.

Imaginemos no demasiado convenientes, pero un sistema contable muy simple que consta de dos tablas: Ingreso. - Mesa de ingresos y Desembolso - Mesa de costo. En ambas tablas para 3 campos: identificación (En t), hora. (Fecha y hora), sUMA. (En t):

# Ingresos (ingresos) # desembolso (gastos) ID tiempo suma tiempo tiempo suma 1 2014-01-01 00:00:00 100 1 2014-01-02 00:00:00 100 2 2014-01-01 23:59: 59 100 2 2014-01-02 23:59:59 100 3 2014-01-02 00:00:00 500

Como puede ver, el 1 de enero, tuvimos dos ventas de 100 rublos, y la venta 2 de enero por 500 y dos gastos de 100 rublos.

Combinamos, agregados, grupo.

Imagina que facilitamos la tarea para llevar la tabla de ingresos diarios. Todo es simple, debemos plegar la cantidad realizando un grupo por fecha:

# Resumimos los ingresos y los agrupamos por fecha de selección (`ingresos". "Fecha", suma ('Ingresos'.`sum`) Fecha de ingreso'. 'rtime`); # Resultado de resultados: la cantidad de ingresos por fecha de día INSUM 2014-01-01 200 2014-01-02 500

Bueno, ahora delante de cada fecha que quería retirar la cantidad de gastos. Y eso es lo que yo, ingenuo, escribió:

# Combinamos la tabla de ingresos y gastos por fecha, resume los ingresos y gastos, agrupando por día #, por lo que no necesita escribir: seleccione la fecha (`ingresos". '' ') `Fecha", suma (`ingreso". 'Suma`) `INSUM', SUM ('DESMRIBUERO`sum`)` Outsum` Único de los ingresos del ingreso del`s` Únete'` Dembole de la izquierda` `.'Tiempo`) Grupo por fecha (`Ingresos". '' "; # ¡Palos de árboles! ¡Beneficio del 2 de enero aumentó 2 veces! Fecha Insume Outsum 2014-01-01 200 NULL 2014-01-02 1000 (!) 200

Como puede ver, un horror absoluto regresó en la respuesta: los ingresos para el 2 de enero aumentaron en 2 veces. Como ya se señaló al comienzo del artículo, Únete a corre a grupo por En consecuencia, debido al hecho de que el 2 de enero tuvimos dos artículos de gasto, los artículos de ingresos se duplicaron mediante la combinación de tablas, lo que llevó a la jurisdicción de los ingresos al sumar. La lógica sugiere que para corregir el problema debemos combinar tablas ya agrupadas. por fecha.

Agrupación temprana al combinar las tablas MySQL utilizando una solicitud invertida

Dentro de una solicitud, no podemos procesar primero, y luego atar las tablas, pero podemos implementar unión diferida con el resultado de la solicitud invertida, Y la agrupación se realiza de antemano. Esto se hace así:

# Datos de pre-grupo en la tabla de desembolso, luego realice una combinación con una tabla de fecha de selección de ingresos ('ingreso'.' '' 'Fecha ", suma (' ingreso'.`sum`)` INSUM`, 'Oroyaygroupped .`ussum` Desde el ingreso "Ingresos". Únase a la izquierda (# Nuestra agrupación de sumas selectas invertida ('Desembolso`sum`) `Outsum`, Fecha (` Dembolso ".' '' '' desactualizado 'de' Desmontaje` `Grupo por fecha ('Ostruction-time'))` OtoryGrouppiced 'en la fecha (`Ingresos'. ''. Otorygrouppiced`.AutDate` Grupo por fecha ('Ingresos'. ''); El beneficio es ciertamente menos que la última vez, pero los números son correctos :) Fecha Insume Outsum 2014-01-01 200 NULL 2014-01-02 500 200 200

Por lo general, tales problemas implícitos requieren como soluciones implícitas en dos casos, cuando la tarea no es del todo correcta o cuando la arquitectura del proyecto deja mucho que desear. En este caso, por supuesto, la estructura de la base de datos se siente atraída por los oídos por el ejemplo del ejemplo.

Bueno, no olvidemos que las solicitudes invertidas siempre no son buenas, porque se realizan por separado e independientemente de lo externo. Por lo tanto, trabajar con algunas estadísticas principales, no olvide optimizarlas y levantar los límites. Y aún mejor - piensa por tu cuenta :)

El operador de une SQL está diseñado para conectar dos o más tablas de base de datos sobre la condición de coincidencia. Este operador existe solo en bases de datos relacionales. Es gracias a unirse a las bases de datos relacionales que tengan una funcionalidad tan poderosa que le permita realizar no solo almacenamiento de datos, sino también, al menos el análisis más simple que usa las consultas. Analizaremos los principales matices de escribir consultas SQL con el operador de la unión, que son comunes a todos los DBMS (sistemas de administración de bases de datos). Para conectar las dos tablas, el operador de inscripción SQL tiene la siguiente sintaxis:

Seleccione Names_lbs (1..N) de Name_table_1. Únete a Name_Table_2 en la condición

Después de uno o más enlaces, el operador de unión puede seguir el opcional donde o tener sección, en la que, así como en una solicitud de selección simple, se establece la condición de la muestra. General para todos los DBMS es que, en este diseño, en lugar de unirse, se puede indicar unirse interno, Únase al exterior izquierdo, unirse al exterior, unirse al exterior, unirse a la cruz (o, como coma).

Unión interna (conexión interna)

La solicitud de unión interna está diseñada para conectar tablas y emitir la tabla resultante en la que los datos se intersecan completamente por la condición especificada después de encendida.

Lo mismo hace que sea solo unirse. Por lo tanto, la palabra interna no es obligatoria.

Ejemplo 1. Hay una base de datos del AD PORTLE. Cuenta con una tabla de categorías (categorías de publicidad) y partes (partes, o de lo contrario, rúbricas que se refieren a categorías). Por ejemplo, partes del apartamento, las casas de campo se refieren a la categoría de bienes raíces y partes de automóviles, motocicletas, a la categoría de transporte. Estas tablas con datos completados son las siguientes.

Piezas de la tabla:

Tenga en cuenta que en las libros de la tabla de piezas tiene un gato, un enlace a una categoría que no está en la tabla Categorías, y la tabla Categorías tiene un CAT_ID: la clave principal, que no está en la tabla de piezas. Debe conectar los datos de estas dos tablas de modo que en la tabla resultante hubo campos de campo (parte), gato (categoría) y anuncio de precio) y que los datos están completamente intersectados por condición. Condición: coincidencia de identificador de categoría en las categorías Tabla y enlaces a la categoría en la tabla de partes. Para hacer esto, escriba la siguiente consulta:

Seleccione Parts.Part, Categories.cat_id como gato, categorías.price de partes internas Categorías de unión en partes.cat \u003d Categors.cat_id

ParteGato.Precio
Apartamentos505 210,00
Automático205 160,00
Tableros10 105,00
Gabinetes30 77,00

No hay libros en la tabla resultante, ya que este registro se refiere a una categoría que no está en la tabla Categorías, y la tecnología, ya que esta entrada tiene una clave externa en la tabla Categorías, que no se hace referencia en la tabla de piezas.

En algunos casos, cuando las tablas están conectadas, es posible hacer solicitudes menos voluminosas utilizando existe predicado Y sin usar unirse.

Hay un "teatro" de la base de datos. La tabla de juegos contiene datos sobre la producción. Equipo de mesa - sobre los roles de los actores. Tabla del actor - Acerca de los actores. Tabla de director - Acerca de los directores. Los campos de tabla, las teclas primarias y externas se pueden ver en la siguiente figura (para ampliar para ampliar el botón izquierdo del ratón).


Ejemplo 3. Lista de actores que desempeñan más de un papel en una jugada y el número de sus roles.

Únase al operador para usar 1 vez. Usar Tener, grupo por .

Inmediato. El operador que tiene operador se aplica al número de roles contados por la función de agregado de conteo.

Únete externo izquierdo (conexión externa izquierda)

La solicitud con el operador de la unión exterior izquierdo está diseñado para conectar tablas y emitir la tabla resultante en la que los datos se intersecan completamente por la condición especificada después de encendida, y se complementan con entradas de la tabla primero a pedido (izquierda), incluso si No cumpla con la condición. Las entradas de la mesa izquierda, que no corresponden a la condición, el valor de la columna de la tabla derecha será nula (indefinible).

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 están cruzando completamente por condición y se complementan con todos los datos de la tabla de piezas, que no coinciden con la condición, escriba la siguiente consulta:

Seleccione Parts.Part, Categories.cat_id como gato, categorías.price de partes de las partes salidas de la unión exterior en las partes.cat \u003d Categors.cat_id

El resultado de la consulta será la siguiente tabla:

ParteGato.Precio
Apartamentos505 210,00
Automático205 160,00
Tableros10 105,00
Gabinetes30 77,00
Libros160 NULO

En la tabla resultante, a diferencia de la tabla del Ejemplo 1, hay libros, pero el valor de la columna de precios (precio) es nulo, ya que esta entrada tiene un identificador de categoría que no está en la tabla Categorías.

Unión exterior derecha (conexión externa derecha)

La solicitud con el operador de la unión exterior derecha está diseñado para conectar tablas y emitir la tabla resultante en la que los datos se intersecan completamente por la condición especificada después de encendida, y se complementan con entradas de la segunda tabla en orden (derecha), incluso si No cumpla con la condición. En las entradas de la tabla derecha, que no cumplen con la condición, el valor de la columna de la mesa izquierda será nula (indefinidamente).

Ejemplo 5.

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

Seleccione Parts.Part, Categories.cat_id como gato, categorías.price de partes de piezas derecha de unión de los cartorristas en partes.cat \u003d categorías.cat_id

El resultado de la consulta será la siguiente tabla:

ParteGato.Precio
Apartamentos505 210,00
Automático205 160,00
Tableros10 105,00
Gabinetes30 77,00
NULO45 65,00

En la tabla resultante, en contraste con la tabla del Ejemplo 1, hay una entrada con una categoría 45 y el precio de 65.00, pero el valor de la columna de la Parte (Parte) tiene NULL, ya que esta entrada tiene un identificador de categoría en que no hay enlaces en la tabla de partes.

Únete externo completo (conexión externa completa)

Una solicitud al operador de unión exterior total está diseñada para conectar tablas y enviar la tabla resultante en la que los datos se intersecan completamente por la condición especificada después de encendida, y se complementan con entradas de las primeras tablas (izquierda) y segunda (derecha), Incluso si no cumplen con la condición. Los registros que no cumplen con la condición, el valor de las columnas de otra tabla será nula (indefinible).

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

Para obtener una tabla resultante en la que los datos de las dos tablas se intersecan completamente bajo la condición y se complementan con todos los datos de la tabla de piezas y de la tabla Categorías, que no coinciden con la condición, escriba la siguiente consulta:

Seleccione Parts.Part, Categories.cat_id como gato, categorías.price desde piezas Categorías de ínteres exteriores completas en Parts.cat \u003d Categors.cat_id

El resultado de la consulta será la siguiente tabla:

ParteGato.Precio
Apartamentos505 210,00
Automático205 160,00
Tableros10 105,00
Gabinetes30 77,00
Libros160 NULO
NULO45 65,00

La tabla resultante tiene registros de libros (desde la mesa izquierda) y con la categoría 45 (desde la mesa derecha), y la primera de ellos es un precio indefinido (columna desde la tabla derecha), y la segunda es una parte indefinida (columna de la mesa izquierda).

Seudónimos de tablas conectables

En consultas anteriores, indicamos los nombres de las columnas recuperables de diferentes tablas, los nombres completos de estas tablas. Tales solicitudes parecen engorracas: la misma palabra se repite varias veces. ¿Es posible simplificar de alguna manera el diseño? Resulta, es posible. Para hacer esto, use los pseudónimos de la tabla, sus nombres abreviados. El alias puede constar de una letra. Quizás cualquier número de letras en el seudónimo, lo principal es que la solicitud después de la reducción sea comprensible para usted. La regla general: en la sección de consulta que determina la conexión, es decir, alrededor de la palabra unirse, debe especificar los nombres completos de las tablas, y cada nombre debe seguir el alias de la tabla.

Ejemplo 7. Reescribe una solicitud del Ejemplo 1 usando los alias de las tablas conectadas.

La solicitud será la siguiente:

Seleccione P.PART, C.CAT_ID como CAT, C.PRICE de PIEZAS P INTERNET Categorías C en P.CAT \u003d C.CAT_ID

La solicitud devolverá lo mismo que la solicitud en el Ejemplo 1, pero es mucho más compacto.

Unirse y conexión de más de dos tablas.

Las bases de datos relacionales deben cumplir con los requisitos de la integridad y desventaja de los datos, y por lo tanto los datos sobre un proceso de negocio pueden estar contenidos no solo en uno, dos, sino también en tres o más tablas. En estos casos, las cadenas de las tablas conectadas se utilizan para analizar los datos: por ejemplo, en una (primera) tabla contiene un indicador cuantitativo, la segunda tabla con la primera y tercera enlaza las teclas externas: los datos se intersecnan, pero solo La tercera tabla contiene una condición, dependiendo de la cual puede ser derivado el indicador cuantitativo de la primera tabla. Y las mesas pueden ser aún más. Uso del operador de Único SQL, se puede conectar una gran cantidad de tablas en una sola solicitud. En tales solicitudes, una sección de la conexión sigue a la otra, y cada una de las próximas unirse conecta la tabla con la siguiente tabla, que fue la segunda en el enlace de la cadena anterior. Por lo tanto, la sintaxis de la consulta de SQL para conectar más de dos tablas es la siguiente:

Seleccione Names_Stolbtsy (1..N) de Name_Table_1 Únete a NOMBRE_TABLE_2 en la condición Unirse NAME_TABLE_3 EN CONDICIÓN ... Únete a NOMBRE_TABLE_M EN CONDICIÓN

Ejemplo 8. La base de datos es la misma que en los ejemplos anteriores. Las categorías y tablas de piezas en este ejemplo agregan una tabla de anuncios que contiene datos sobre anuncios publicados en el portal. Damos un fragmento de la tabla de anuncios, en la que hay registros sobre esos anuncios, cuyo período de publicación caduca 2018-04-02.

AYUDAPart_id.Date_start.Date_end.TEXTO.
21 1 "2018-02-11" "2018-04-20" "Yo vendo ..."
22 1 "2018-02-11" "2018-05-12" "Yo vendo ..."
... ... ... ... ...
27 1 "2018-02-11" "2018-04-02" "Yo vendo ..."
28 2 "2018-02-11" "2018-04-21" "Yo vendo ..."
29 2 "2018-02-11" "2018-04-02" "Yo vendo ..."
30 3 "2018-02-11" "2018-04-22" "Yo vendo ..."
31 4 "2018-02-11" "2018-05-02" "Yo vendo ..."
32 4 "2018-02-11" "2018-04-13" "Yo vendo ..."
33 3 "2018-02-11" "2018-04-12" "Yo vendo ..."
34 4 "2018-02-11" "2018-04-23" "Yo vendo ..."

Imagina que hoy "2018-04-02", es decir, este valor toma función Curdate () - Fecha actual . Se requiere saber qué categorías poseen anuncios, cuyo período de publicación vence hoy. Los nombres de las categorías están solo en la tabla de categorías, y la fecha de vencimiento de la publicación de los anuncios está solo en la tabla de anuncios. En las partes de la tabla, parte de las categorías (o más fácil, subcategorías) de anuncios publicados. Pero las piezas de tabla CAT_ID de teclas externas se asocian con la tabla Categorías, y la tabla de anuncios está conectada por la tecla externa Part_ID con la tabla de piezas. Por lo tanto, conectamos tres tablas en una consulta y esta solicitud se puede llamar una cadena con la máxima corrección.

La solicitud será la siguiente:

Resultado de Solicitud: una tabla que contiene los nombres de dos categorías - "Bienes Raíces" y "Transporte":

CAT_NAME.
La propiedad
Transporte

Únete cruzada (conexión cruzada)

Uso del operador de une de SQL Cross en el formulario más simple: sin condición de conexión: implementa la operación decartova trabaja en Álgebra relacional. . El resultado de tal conexión será la adherencia de cada línea de la primera tabla con cada fila de la segunda tabla. Las tablas se pueden grabar en la consulta a través del operador de la unión cruzada, o a través de la coma entre ellos.

Ejemplo 9. Base de datos: la misma, tablas - Categorías y piezas. Implementar la operación del trabajo de Decartian de estas dos tablas.

La solicitud será la siguiente:

Seleccione (*) Categorías Cruce las piezas de unión

O sin especificar explícitamente la unión cruzada, a través de comas:

Seleccione (*) Categorías, Partes

La consulta devolverá la tabla de 5 * 5 \u003d 25 líneas, cuyo fragmento se muestra a continuación:

Cat_id.CAT_NAME.PrecioPart_id.ParteGato.
10 Materiales de construcción105,00 1 Apartamentos505
10 Materiales de construcción105,00 2 Automático205
10 Materiales de construcción105,00 3 Tableros10
10 Materiales de construcción105,00 4 Gabinetes30
10 Materiales de construcción105,00 5 Libros160
... ... ... ... ... ...
45 Técnica65,00 1 Apartamentos505
45 Técnica65,00 2 Automático205
45 Técnica65,00 3 Tableros10
45 Técnica65,00 4 Gabinetes30
45 Técnica65,00 5 Libros160

Como se puede ver en el ejemplo, si el resultado de una solicitud de este tipo tiene algún valor, entonces puede tener un valor visual en algunos casos cuando no es necesario generar información estructurada, especialmente, incluso la muestra analítica más simple. Por cierto, puede especificar las columnas de salida de cada tabla, pero luego el valor de información de dicha consulta no aumentará.

¡Pero para una unión cruzada, puede configurar la condición de conexión! El resultado será completamente diferente. Cuando se utiliza el operador "coma", en lugar de una unión cruzada explícitamente especificada, la condición de conexión no se establece en la palabra, pero en la palabra donde.

Ejemplo 10. La misma base de datos de anuncios, categorías y tablas de piezas. Uso de la junta cruzada, conecte las tablas para que los datos sean completamente intersectados por condición. Condición: coincidencia de identificador de categoría en las categorías Tabla y enlaces a la categoría en la tabla de partes.

La solicitud será la siguiente:

La solicitud devolverá lo mismo que la solicitud en el Ejemplo 1:

ParteGato.Precio
Apartamentos505 210,00
Automático205 160,00
Tableros10 105,00
Gabinetes30 77,00

Y esta coincidencia no es accidental. La solicitud de conexión cruzada por la condición de conexión es completamente similar a la consulta con la conexión interna, una unión interna, o, dado que la palabra interno no es obligatoria, solo unirse.

Por lo tanto, qué tipo de opción de consulta es usar: una pregunta de estilo o incluso un hábito especializado en la base de datos. Tal vez una conexión cruzada con una condición para dos tablas puede ser más compacta. Pero la ventaja de la junta cruzada por más de dos tablas (también es posible) muy controvertida. En este caso, donde las condiciones de intersección se enumeran a través de la palabra y. Este diseño puede ser incómodo y difícil de leer si también hay la sección donde se encuentran las condiciones de la muestra al final de la consulta.

Bases de datos relacionales y lenguaje SQL

SQL - Lección 6. Combinación de tablas (asociación interna)

Supongamos que queremos saber qué temas y qué autoridades fueron creadas. Para hacer esto, es más fácil ponerse en contacto con la tabla de tema (temas):

¿Pero que si no necesitamos los identificadores de los autores en respuesta a la solicitud, y sus nombres? Las solicitudes invertidas no nos ayudarán, porque En última instancia, dan datos de una tabla. Y necesitamos obtener datos de dos tablas (temas y usuarios) y combinarlos en uno. Las solicitudes que permiten que se haga en SQL se llaman Asociaciones.

La sintaxis de la asociación más sencilla es la siguiente:

Seleccione nombres_stolbtsy_table_1, names_stolbtsy_tablitsy_2 de name_table_1, name_2_2;

Vamos a crear una asociación simple:

Resultó no exactamente lo que esperábamos. Dicha asociación se llama científicamente un producto descartular cuando cada línea de la primera tabla cumple con cada línea de la segunda tabla. Tal vez haya casos en que una asociación de este tipo sea útil, pero claramente no es nuestro caso.

Para que la tabla resultante se vea como queríamos especificar la condición de la asociación. Asociamos nuestras tablas por el identificador del autor, será nuestra condición. Esos. Señalamos en la solicitud de que debe generar solo aquellas líneas en las que los campos de Tablas Tablas ID_Author coinciden con los valores de las tablas ID_USER. Usuarios:

El esquema será más claro:

Esos. En la consulta realizamos la siguiente condición: si hay identificadores idénticos en ambas tablas, las filas con este identificador deben combinarse en una cadena resultante.

Presta atención a dos cosas:

  • Si hay una cadena con un identificador en una de las tablas unidas que no está en otra tabla combinada, luego en la tabla resultante, la cadena con un identificador de este tipo no será. En nuestro ejemplo, hay un usuario Oleg (ID \u003d 5), pero no creó que, por lo tanto, no hay solicitud como resultado de la solicitud.
  • Cuando especifica la condición, el nombre de la columna se escribe después del nombre de la tabla en el que esta columna es (a través de un punto). Esto se hace para evitar la confusión, ya que las columnas en diferentes tablas pueden tener los mismos nombres, y MySQL puede no entender qué columnas en particular están en cuestión.
En general, la sintaxis de la Asociación correcta con la condición se ve así:

imya_tablitsy_1.imya_stolbtsa1_tablitsy_1 SELECT, imya_tablitsy_1.imya_stolbtsa2_tablitsy_1, imya_tablitsy_2.imya_stolbtsa1_tablitsy_2, imya_tablitsy_1 imya_tablitsy_2.imya_stolbtsa2_tablitsy_2 FROM, WHERE imya_tablitsy_2 imya_tablitsy_1.imya_stolbtsa_po_kotoromu_obedinyaem \u003d imya_tablitsy_2.imya_stolbtsa_po_kotoromu_obedinyaem;

Si el nombre de la columna es único, entonces se puede omitir el nombre de la tabla (como lo hicimos en el ejemplo), pero no se recomienda hacerlo.

Como entiende, las asociaciones permiten elegir cualquier información de cualquier tablas, y puede haber tres, y cuatro, y la condición para la combinación puede no ser una.

Por ejemplo, vamos a crear una solicitud que nos muestre todos los mensajes a qué temas se relacionan con los autores de estos mensajes. Por supuesto, toda esta información se almacena en la tabla de mensajes (publicaciones):

Pero en lugar de identificadores, se muestran nombres y nombres, tendremos que hacer una combinación de tres tablas:

Esos. Combinamos mesas de mensajería y usuarios de usuarios posts.id_author \u003d users.id_user, y tablas de mensajes y temas - condición posts.id_topic \u003d topics.id_topic

Las asociaciones que consideramos hoy se llaman. Asociaciones internas. Dichas asociaciones vinculan las cadenas de una tabla con líneas de otra tabla (y también pueden también las terceras tablas). Pero hay situaciones en las que es necesario que se incluyan las líneas que no se hayan conectado al resultado. Por ejemplo, cuando creamos una solicitud, qué temas y qué autores se crearon, el usuario Oleg a la tabla resultante no obtuvo, porque Sin embargo, no creó, y por lo tanto, la fila asociada en la tabla de Estados Unidos no tenía.

Por lo tanto, si necesitamos hacer una solicitud ligeramente diferente, retirar a todos los usuarios y temas que crearon, si los hay, tendremos que aprovechar Asociación externaPermitiéndole generar todas las filas de una tabla y las filas disponibles relacionadas con ellos de otra tabla. Hablaremos sobre tales asociaciones en la siguiente lección.

SQL - Lección 7. Combinación de tablas (asociación externa)

Entonces, en la continuación de la lección anterior, debemos retirar a todos los usuarios y temas que crearon, en su caso. Si utilizamos la Asociación Interna discutida en la última lección, resultaremos en lo siguiente:

Es decir, en la tabla resultante solo hay aquellos usuarios que crearon temas. Y debemos mostrar todos los nombres. Para hacer esto, cambiaremos la solicitud un poco:

Seleccione Usuarios.Name, TOPICS.TOPIC_NAME DESDE LOS USUARIOS LEJOS EXTERIORES DE UNIRSE TESOS EN USUARIOS.ID_USER \u003d TOPICS.ID_AUTHOR;

Y obtenemos el resultado deseado: todos los usuarios y temas, crearon. Si el usuario no ha creado el tema, pero la columna correspondiente es nula.

Entonces, agregamos una palabra clave de palabra clave a nuestra solicitud - Izquierda combinación externa.Por lo tanto, es necesario tomar todas las líneas de la tabla a la izquierda, y cambió la palabra clave Dónde sobre el EN.. Además de la palabra clave Izquierda combinación externa. Palabra clave puede ser usada Únete externo derecho.. Luego, todas las líneas de la tabla derecha y las disponibles asociadas con ellas se seleccionarán de la mesa izquierda. Finalmente, es posible una asociación externa completa, que eliminará todas las líneas de ambas tablas y vinculará aquellas que pueden estar conectadas. Palabra clave para una asociación externa completa - Únase al exterior completo..

Vamos a cambiar en nuestra solicitud de asociación izquierda a la derecha:

Como puede ver, ahora tenemos todos los temas (todas las líneas de la mesa derecha), pero los usuarios son solo aquellos que los temas creados (es decir, solo aquellas líneas asociadas con la tabla derecha) se seleccionan de la mesa izquierda).

Desafortunadamente, la combinación completa de MySQL DBMS no es compatible.

Vamos a resumir esta breve lección. Sintaxis para la asociación externa a continuación.



¿Te gustó el artículo? Compártelo