Maison  >  Article  >  base de données  >  Exemple d'opération de requête de connexion multi-tables MySQL

Exemple d'opération de requête de connexion multi-tables MySQL

无忌哥哥
无忌哥哥original
2018-07-18 10:00:542167parcourir

Dans les projets réels, il existe des relations entre plusieurs tables. Il est impossible de récupérer toutes les données dans une seule table. S'il n'y a pas de connexion à la table, nous aurons besoin de beaucoup d'opérations. Par exemple, vous devez rechercher des conditions restrictives dans la table A pour récupérer les données de la table B. Non seulement cela nécessite plusieurs tables pour fonctionner, mais ce n’est pas non plus très efficace. Par exemple, l'exemple du livre :

Le code est le suivant :

SELECT FId
FROM T_Customer
WHERE FName='MIKE'

Cette instruction SQL renvoie 2, c'est-à-dire la valeur FId du client nommé MIKE est 2, vous pouvez donc accéder à Récupérer les enregistrements avec FCustomerId égal à 2 dans T_Order :

Le code est le suivant :

SELECT FNumber,FPrice
FROM T_Order
WHERE FCustomerId=2

Regardons en détail la connexion de la table. Il existe de nombreux types de jointures de table, notamment les jointures croisées (CROSS JOIN), les jointures internes (INNER JOIN) et les jointures externes (OUTTER JOIN).

(1) INNER JOIN : la jointure interne combine deux tables et n'obtient que les données qui répondent aux conditions de connexion des deux tables.

Le code est le suivant :

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId

Remarque : dans la plupart des systèmes de base de données, INNER dans INNER JOIN est facultatif et INNER JOIN est la méthode de connexion par défaut.

Lorsque vous utilisez des jointures de tables, vous n'êtes pas limité à joindre seulement deux tables, car il existe de nombreuses situations dans lesquelles de nombreuses tables doivent être contactées. Par exemple, la table T_Order doit également être connectée aux tables T_Customer et T_OrderType pour récupérer les informations requises. Écrivez simplement l'instruction SQL suivante :

Le code est le suivant :

SELECT o.FId,o.FNumber,o.FPrice,
c.FId,c.FName,c .FAge
FROM T_Order o JOIN T_Customer c
ON o.FCustomerId= c.FId
INNER JOIN T_OrderType
ON T_Order.FTypeId= T_OrderType.FId
(2) Jointure croisée (CROSS JOIN) : tous les enregistrements de toutes les tables impliquées dans la jointure croisée sont inclus dans l'ensemble de résultats. Les connexions croisées peuvent être définies de deux manières, à savoir les connexions implicites et explicites.

Regardons l'exemple implicite :


Le code est le suivant :

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer, T_Order
Si vous utilisez une connexion explicite, vous devez utiliser CROSS JOIN. L'exemple est le suivant :

Le code est le suivant :

SELECT T_Customer.FId, T_Customer.FName, T_Customer.FAge,
T_Order.FId, T_Order.FNumber, T_Order.FPrice
FROM T_Customer
CROSS JOIN T_Order
(3) OUTTER JOIN : Les connexions internes n'obtiennent que les données qui répondent aux conditions de connexion, tandis que pour les connexions externes , ils résolvent principalement ce genre de scène problématique. Il ne fait aucun doute que les données qui remplissent les conditions sont récupérées. La connexion externe récupérera également une autre partie des données, qui consiste à remplir les données qui ne remplissent pas les conditions avec NULL. Examinons d'abord la classification des jointures externes : jointure externe gauche (LEFT OUTER JOIN), jointure externe droite (RIGHT OUTER JOIN) et jointure externe complète (FULLOUTER JOIN).

I. LEFT OUTER JOIN : Comme mentionné précédemment, les données qui ne remplissent pas les conditions sont remplies avec NULL. Alors, que faut-il spécifiquement remplir avec NULL Pour les jointures externes gauches, parmi les conditions de connexion, si les données de la table de gauche qui remplissent les conditions n'ont pas de correspondance correspondante dans la table de droite, le champ correspondant de la table de droite doit être rempli de valeur NULL. C'est-à-dire que le corps principal de la connexion externe gauche est la table de gauche, et la table de droite lui correspond.

Le code est le suivant :

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
Remarque : Si vous utilisez une jointure externe gauche, les données incompatibles peuvent être filtrées via l'instruction Where

Le code est comme suit :

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
WHERE o.FPrice>=150
II. Right OUTER JOIN : La jointure externe droite est à l'opposé de la jointure externe gauche. Les champs de la table de gauche seront remplis de valeurs NULL. En d’autres termes, le sujet de la connexion externe droite est la table de droite et la table de gauche lui correspond.

Le code est le suivant :

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
Remarque : comme la jointure externe gauche, vous pouvez utiliser l'instruction Where pour filtrer

III FULLOUTER JOIN : Full external. join Est la collection de jointures externes gauche et de jointure externe droite. Autrement dit, il inclut à la fois le jeu de résultats de la connexion externe gauche et le jeu de résultats de la connexion externe droite.

Le code est le suivant :

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
FULL OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
Le résultat est équivalent à :

SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
LEFT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
UNION
SELECT o.FNumber,o.FPrice,o.FCustomerId,
c.FName,c.FAge
FROM T_Order o
RIGHT OUTER JOIN T_Customer c
ON o.FCustomerId=c.FId
============== ==== =============================================== ==== ===================

Une variété de méthodes d'écriture SQL pour les requêtes multi-tables : (Ce qui suit est une requête à partir de deux tables< Cela peut également être considéré comme une requête à partir de Query dans trois tables>, afficher tous les champs de la table v_goods, afficher le champ de nom dans la table admin2 en tant qu'additionneur, afficher le champ de nom dans la table admin2 en tant qu'opérateur) Plusieurs tables peuvent être interrogé selon les trois exemples suivants Write sql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn