Maison > base de données > tutoriel mysql > le corps du texte

Comment utiliser les jointures externes des tables de données dans MySQL

WBOY
Libérer: 2023-06-03 15:02:27
avant
1461 Les gens l'ont consulté

Pourquoi utiliser des jointures externes

Avant d'expliquer pourquoi les "jointures externes" sont utilisées, regardons un enregistrement. (Comme suit :)

Comment utiliser les jointures externes des tables de données dans MySQL

Étant donné que Zhang San dans le tableau n'a pas de numéro de département, nous le classerons temporairement comme « intérimaire » sans établissement de département fixe.

Dans un tel scénario, des problèmes surviennent. Lorsque nous souhaitons interroger le nom de chaque employé et le service auquel il appartient, lors de l'utilisation d'une jointure interne, car notre condition de lien est ` "Numéro de département" de "Table des employés" = "Département du numéro de "Table de département", "Zhang San" nous manquera. Bien que "Zhang San" n'ait pas de "numéro de service", il est également membre de l'entreprise en tant que "travailleur temporaire", donc la syntaxe des jointures externes doit être introduite pour résoudre ce problème, sinon certaines données logiques seront perdues. .

Introduction aux jointures externes

La différence entre les jointures externes et les jointures internes :

Seuls les enregistrements qui remplissent les conditions de connexion apparaîtront dans les résultats de la jointure interne. Les enregistrements qui ne remplissent pas les conditions de connexion n'apparaîtront jamais dans le résultat. ensemble.

Que les conditions de connexion de données soient remplies ou non, les connexions externes seront affichées dans l'ensemble de résultats d'une manière spéciale. (Par exemple, interroger les informations sur le numéro de service de l'employé mentionnées ci-dessus, car « Zhang San » n'a pas de numéro de service, si une jointure interne est utilisée, « Zhang San » ne remplit pas les « conditions de connexion » et n'apparaîtra pas dans le résultat. set. ; Remplacez "jointure externe" et vous ne le manquerez pas.)

L'exemple de phrase de jointure externe est le suivant

SELECT 
	e.empno, e.ename, d.dname
FROM
	t_emp e
LEFT JOIN t_dept d ON e.deptno = d.deptno;

-- 在连接的时候仍然是链接 "员工表" 与 "部门表" ,只不过连接关键字由 "JOIN" 变成了 "LEFT JOIN" (下文再为大家详细解释)
-- 两张表的连接条件还是使用 "ON" 关键字去连接的 , 连接条件依然是 "员工表" 的 "部门编号" = "部门表" 的 "部门编号" 

-- LEFT JOIN 为 "外连接" 的 "左外连接" ;(在 "外连接" 中,是分为 "左外连接" 与 "右外连接" 的)

-- 在该SQL语句中 "LEFT JOIN" 左右各有数据表  "t_emp e" 与 "t_dept d" 
-- 所以这里的 "左连接" 的意思就是:保留 左表 的所有记录,然后与 右表 去连接,如果 右表 有符合条件的记录,则正常连接即可;
-- 如果 右表 没有符合条件的连接记录, 右表 则展示 "NULL" 值与 "左表" 去匹配
Copier après la connexion

Comment utiliser les jointures externes des tables de données dans MySQL

Jointure gauche et jointure droite

"Jointure externe gauche" signifie que pendant l'opération de jointure, tous les éléments du tableau de gauche sont conservés et joignent le tableau de droite. La table de gauche sera connectée à la table de droite. S'il y a des enregistrements qui remplissent les conditions dans la table de droite ; s'il n'y a aucun enregistrement qui remplit les conditions dans la table de droite, "NULL" sera utilisé pour connecter la table de gauche.

La différence avec la « jointure gauche » est la « jointure droite ». La « jointure droite » est l'opposé de la « jointure gauche ». Elle conserve tous les enregistrements dans la table de droite et joint les enregistrements qualifiés dans la table de gauche de la même manière ; la table de gauche Si aucun enregistrement ne remplit les conditions, utilisez "NULL" pour vous connecter à la table de droite.

Exemple d'instruction SQL de jointure à droite :

SELECT 
	e.empno, e.ename, d.dname
FROM
	t_dept d
RIGHT JOIN t_emp e ON e.deptno = d.deptno;

-- 这里有个需要注意的地方,就是相较于上文中的 "左连接" ,这里的 "右连接" 左右两张的表的位置做了调换
Copier après la connexion

Comment utiliser les jointures externes des tables de données dans MySQL

Ici, vous pouvez voir que vous pouvez toujours trouver les enregistrements de "Zhang San" sans "numéro de département". La différence entre « jointure à gauche » et « jointure à droite » n'est donc pas très grande.

Exercice de jointure externe①

Demandez le nom de chaque département et le nombre de personnes dans le département ?

Cette question semble simple, mais elle comporte deux difficultés, et il existe également des domaines dans lesquels des erreurs sont faciles à commettre. Pour plus de détails, consultez les exemples d'instructions SQL et le diagramme schématique ci-dessous.

SELECT 
    d.deptno, d.dname, COUNT(*)
FROM
    t_dept d LEFT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno;
Copier après la connexion

Comment utiliser les jointures externes des tables de données dans MySQL

OK, c'est là que les problèmes commencent.

Veuillez faire attention au département "40" - "OPÉRATIONS" ici. Il n'y a en fait personne dans ce département, c'est-à-dire que le nombre de personnes est "0", mais étrangement, lorsque les statistiques sont effectuées ici, le nombre est élevé. des personnes comptées est "1", pourquoi est-ce ? le tableau de gauche. (Étant donné que les enregistrements de la table de gauche sont conservés, le regroupement doit également être regroupé en fonction de la table de gauche. La clé suivante est "COUNT(*)", qui comptera le nombre de tous les enregistrements valides. Ainsi, lorsque tous les enregistrements de la table de gauche "t_dept" Lorsque l'enregistrement est connecté à la table de droite "t_emp", la table de droite utilisera la valeur "NULL" pour se connecter à la table de gauche "t_dept". Une fois la connexion terminée, ce sera un enregistrement valide. Puisqu'il s'agit d'un enregistrement valide, alors "COUNT(*)" Le résultat calculé est "1". Il est donc compréhensible que le résultat statistique de 40 départements soit "1", mais ce résultat n'est pas quoi. nous voulons. Comment le résoudre ? L'instruction SQL ci-dessous

SELECT 
    d.deptno, d.dname, COUNT(e.deptno)
FROM
    t_dept d LEFT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno;
Copier après la connexion

Cette instruction SQL est toujours très bonne. Il y a de nombreux détails et situations non prises en compte. Vous ne pouvez remarquer ces attaques que lorsque vous l'écrivez à nouveau. Exercice sur les jointures externes ②

Comment utiliser les jointures externes des tables de données dans MySQLRécupérez le nom du département et le nombre de personnes. Pour les employés sans département, utilisez "NULL" au lieu du nom du département (cela fait en fait référence à "Zhang San")

Vous pensez peut-être que le "gauche externe" join" qui vient d'être utilisé est réservé. Ne pouvons-nous pas simplement remplacer tous les enregistrements de la table département par des jointures externes "à droite" ? En fait... ce n'est pas si simple.

L'instruction SQL pour cet exercice doit être implémentée à l'aide du Mot-clé "UNION". " combine les ensembles de résultats de plusieurs instructions de requête (à l'exclusion du contenu en double).

"UNION"关键字 在 SQL 语句中的用法如下:

(SQL查询语句) UNION (SQL查询语句) -- 如果存在多条查询语句的话,可以继续使用 UNION 关键字 连接

PS:这里需要注意一下,“UNION” 合并多少个结果集其实无所谓,关键是这些结果集的字段数量和字段的名称必须要相同 。如果说第一个 SQL 查询语句返回的是 10个 字段,第二个返回的是 2个字段 ,这种情况是完全没办法合并的。

(SELECT 
	d.deptno, d.dname, COUNT(e.deptno)
FROM
	t_dept d LEFT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno)
UNION
(SELECT 
	d.deptno, d.dname, COUNT(*)
FROM
	t_dept d RIGHT JOIN t_emp e 
ON d.deptno = e.deptno
GROUP BY d.deptno);

-- 第一个查询语句,得到的结果集是各个部门的人数。
-- 第二个查询语句,得到的结果集是隶属于各个部门的人数,但是因为 "张三" 是一个没有部门所属的 "临时工"
-- 所以两个查询语句的结果集合并之下没救如下图所示。
Copier après la connexion

Comment utiliser les jointures externes des tables de données dans MySQL

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!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!