Maison >base de données >tutoriel mysql >Jointure naturelle avancée mysql, exemples d'utilisation de jointure externe
Jointure naturelle
Chaque fois que des tables sont jointes, il doit y avoir au moins une colonne qui apparaît dans plusieurs tables (la colonne jointe). Une jointure standard (la jointure interne introduite dans le chapitre précédent) renvoie toutes les données, même si la même colonne apparaît plusieurs fois. Les jointures naturelles excluent plusieurs occurrences afin que chaque colonne ne soit renvoyée qu'une seule fois.
Comment faire cela ? La réponse est que le système ne fait pas le travail, vous le faites vous-même. Une jointure naturelle est une jointure dans laquelle vous pouvez sélectionner uniquement ces colonnes uniques. Cela se fait généralement en utilisant des caractères génériques ( SELECT * ) pour une table et des sous-ensembles explicites pour les colonnes de toutes les autres tables. Voici un exemple :
Entrée :
select c.*,o.order_num,o.order_date,oi.prod_id,oi.quantity,oi.item_price from customers as c,orders as o,orderitems as oi where c.cust_id = o,cust_id and oi.order_num = o.order_num and prod_id = 'FB';
Analyse : Dans cet exemple, les caractères génériques ne sont utilisés que pour le premier tableau. Toutes les autres colonnes sont répertoriées explicitement afin qu'aucune colonne en double ne soit récupérée.
En fait, chaque connexion interne que nous avons établie jusqu'à présent est une connexion naturelle, et il est probable que nous n'utiliserons jamais une connexion interne qui n'est pas une connexion naturelle.
Jointures externes
De nombreuses jointures qui combinent des lignes d'une table avec des lignes d'une autre table associée. Mais il est parfois nécessaire d’inclure des lignes qui n’ont aucune ligne associée. Par exemple, vous devrez peut-être utiliser des jointures pour effectuer les tâches suivantes :
1. Comptez le nombre de commandes passées par chaque client, y compris celles qui n'ont pas encore passé de commande
2. Répertoriez tous les produits et les quantités commandées, y compris les produits que personne n'a commandés
3. Calculez le montant moyen des ventes, y compris les clients qui n'ont pas encore passé de commande ;
Dans l'exemple ci-dessus, la jointure contient des lignes qui n'ont pas de lignes associées dans les tables associées. Ce type de jointure est appelé jointure externe.
L'instruction SELECT suivante donne une simple jointure interne. Il récupère tous les clients et leurs commandes :
Entrée :
select customers.cust_id,orders.order_num from customers inner join orders on customers.cust_id = orders.cust_id;
Sortie :
Analyse : Semblable à la jointure interne vue dans le chapitre précédent, cette instruction SELECT utilise le mot-clé OUTER JOIN pour spécifier le type de jointure (au lieu de spécifié dans le champ WHERE clause). Cependant, contrairement à une jointure interne qui relie les lignes de deux tables, une jointure externe inclut également des lignes qui n'ont aucune ligne associée. Lorsque vous utilisez la syntaxe OUTER JOIN, vous devez utiliser le mot-clé RIGHT ou LEFT pour spécifier la table qui contient toutes ses lignes (RIGHT fait référence à la table sur le côté droit de OUTER JOIN, et LEFT fait référence à la table sur le côté gauche de la JOINTURE EXTERNE). L'exemple ci-dessus utilise LEFT OUTER JOIN pour sélectionner toutes les lignes de la table de gauche (table des clients) de la clause FROM. Afin de sélectionner toutes les lignes du tableau de droite, vous devez utiliser RIGHT OUTER JOIN comme indiqué dans l'exemple suivant :
Entrée :
select customers.cust_id,orders.order_num from customers right outer join orders on orders.cust_id = customers.cust_id;
Sans opérateur *= : MySQL ne prend pas en charge l'utilisation des caractères simplifiés *= et =*, qui sont populaires dans d'autres SGBD.
Types de jointures externes : Il existe deux formes de base de jointures externes : la jointure externe gauche et la jointure externe droite. La seule différence entre eux est l'ordre des tables associées. En d’autres termes, une jointure externe gauche peut être convertie en une jointure externe droite en inversant l’ordre des tables dans la clause FROM ou WHERE. Par conséquent, les deux types de jointures externes peuvent être utilisés de manière interchangeable, et celle à utiliser est purement une question de commodité.
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!