SQL-joindre une association multi-tables

1. Connexion SQL (JOIN)

1. Produit cartésien

(1) Lorsque plusieurs tables sont connectées et interrogées sans aucune restriction de condition, le nombre final de résultats de la requête est le produit du nombre de plusieurs tables

Par exemple, s'il y a 15 (lignes) données dans la table A et 20 (lignes) données dans la table B, lorsque les deux tables sont interrogées, 15 * 20 = 300 (lignes) données seront générées

select empname,deptname from emp, dept;

(2) Éviter le phénomène de produit cartésien

select 
		empname,deptname 
	from 
		emp, dept
	where
		emp.deptno = dept.deptno;

	
// 或者
	select 
		e.empname,d.deptname 
	from 
		emp e, dept d
	where
		e.deptno = d.deptno; //SQL92语法

Le résultat final sera réduit, mais le nombre de requêtes est toujours le produit du nombre de lignes dans les deux tables

Par conséquent : grâce au phénomène de produit cartésien, plus le nombre de connexions de table est élevé, plus l'efficacité est faible, et essayez d'éviter le nombre de connexions de table

2. La clause SQL JOIN est utilisée pour combiner des lignes de deux tables ou plus en fonction de champs communs entre ces tables ( requête entre tables )

SQL92 : Syntaxe SQL pour 1992
SQL99 : Syntaxe SQL pour 1999

Requête séparée d'une table, appelée requête à table unique

La figure ci-dessous montre 7 utilisations liées à LEFT JOIN, RIGHT JOIN, INNER JOIN, OUTER JOIN

3. Type de jointure SQL

(1) INNER JOIN : connexion interne

[1] Connexion équivalente, renvoie les lignes avec les mêmes champs de connexion dans les deux tables (la condition est une relation d'équivalence)

[2] Connexion non équivalente, la condition n'est pas une relation équivalente

[3] Auto-connexion, la même table est considérée comme plusieurs tables

Note:

        INNER peut être omis

        Il n'y a pas de relation primaire et secondaire entre les deux tables ; égalité

(2) OUTER JOIN  : connexion externe

LEFT (OUTER) JOIN : connexion gauche (externe), même s'il n'y a pas de correspondance dans la table de droite, toutes les lignes sont renvoyées depuis la table de gauche (la table à gauche du mot-clé join est considérée comme la table principale, principalement pour interroger toutes les données de la table de gauche, en se superposant à la table à droite de la requête associée)

RIGHT (OUTER) JOIN : jointure droite (externe), même s'il n'y a pas de correspondance dans la table de gauche, toutes les lignes sont renvoyées depuis la table de droite (la table à droite du mot-clé join est considérée comme la table principale, principalement pour interroger toutes les données de la table de droite Come out, en se superposant à la table de gauche de la requête associée)

FULL (OUTER) JOIN  : connexion complète (externe)

Jointure externe, renvoie tant qu'il y a une correspondance dans l'une des tables ; c'est-à-dire, renvoie les lignes des deux tables : jointure gauche + jointure droite

Note:

        OUTER peut être omis

        Dans la jointure externe, les deux tables sont connectées, ce qui entraîne une relation primaire et secondaire

(3) Interconnexion

CROSS JOIN : Le résultat est un produit cartésien, qui est le nombre de lignes dans la première table multiplié par le nombre de lignes dans la deuxième table

4、JOINTURE INTERNE SQL

Le mot-clé INNER JOIN renvoie des lignes lorsqu'il y a au moins une correspondance dans la table

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
 
或者
 
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
INNER JOIN 与 JOIN 是相同的

(1) Connexion équivalente

SQL92语法:
	select 
		e.ename,d.dname
	from
		emp e, dept d
	where
		e.deptno = d.deptno;
//sql92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。

SQL99语法:
	select 
		e.ename,d.dname
	from
		emp e
	join
		dept d
	on
		e.deptno = d.deptno;
	

	//inner可以省略(带着inner可读性更好!!!一眼就能看出来是内连接)
	select 
		e.ename,d.dname
	from
		emp e
	inner join
		dept d
	on
		e.deptno = d.deptno; // 条件是等量关系,所以被称为等值连接。
//sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where

 inner peut être omis, il est plus lisible avec inner

Inconvénients de sql92 : la structure n'est pas claire, les conditions de connexion de la table et les conditions de filtrage ultérieur à l'étape ultérieure sont toutes placées derrière où

Avantages de sql99 : Les conditions de connexion de la table sont indépendantes. Après la connexion, si un contrôle supplémentaire est nécessaire, continuez à ajouter où

(2) Connexion non équivalente

select 
	e.ename, e.sal, s.grade
from
	emp e
join
	salgrade s
on
	e.sal between s.losal and s.hisal; // 条件不是一个等量关系,称为非等值连接。


select 
	e.ename, e.sal, s.grade
from
	emp e
inner join
	salgrade s
on
	e.sal between s.losal and s.hisal;

(3) Auto-connexion

Une table comme deux tables

select 
	a.ename as '员工名', b.ename as '领导名'
from
	emp a
join
	emp b
on
	a.mgr = b.empno; //员工的领导编号 = 领导的员工编号

 INNER JOIN est identique à JOIN

5、JOINTURE GAUCHE SQL

Le mot clé LEFT JOIN renvoie toutes les lignes de la table de gauche (table1), même s'il n'y a aucune correspondance dans la table de droite (table2). S'il n'y a pas de correspondance dans la bonne table, le résultat est NULL

La table à gauche du mot-clé join est considérée comme la table principale, principalement pour interroger toutes les données de la table de gauche et pour interroger la table de droite par association

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
 
或
 
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
在某些数据库中,LEFT JOIN 称为 LEFT OUTER JOIN

comme suit: 

select 
	e.ename,d.dname
from
	dept d 
left (outer) join 
	emp e
on
	e.deptno = d.deptno;

Dans certaines bases de données, LEFT JOIN est appelé LEFT OUTER JOIN

Lorsque le mot clé sur 
la base de données renvoie des enregistrements en connectant deux ou plusieurs tables, une table temporaire intermédiaire sera générée, puis cette table temporaire sera renvoyée à l'utilisateur

Lors de l'utilisation de la jointure gauche, la différence entre les conditions on et where est la suivante :

(1) La condition on est la condition utilisée lors de la génération de la table temporaire. Que la condition on soit vraie ou non, elle renverra les enregistrements de la table de gauche.
(2) La condition where est la condition de filtrage de la table temporaire après la génération de la table temporaire. À ce stade, la jointure gauche n'a aucune signification (les enregistrements de la table de gauche doivent être renvoyés) et toutes les conditions sont filtrées si les conditions ne sont pas vraies.

Supposons qu'il y ait deux tables :

 Deux SQL :

select * from tab1 left join tab2 on (tab1.size = tab2.size) where tab2.name='AAA'
 
select * from tab1 left join tab2 on (tab1.size = tab2.size and tab2.name='AAA')

 La principale raison des résultats ci-dessus est la particularité de la jointure gauche, de la jointure droite et de la jointure complète. Peu importe que la condition on on soit vraie ou non, elle renverra les enregistrements dans la table de gauche ou de droite, et full a l'union des caractéristiques de gauche et de droite. Mais jion interne n'a pas cette particularité, la condition est placée dans on et where, et le jeu de résultats renvoyé est le même.

【6】JOINTURE SQL DROITE

Le mot clé RIGHT JOIN renvoie toutes les lignes de la table de droite (table2), même s'il n'y a aucune correspondance dans la table de gauche (table1). S'il n'y a pas de correspondance dans la table de gauche, le résultat est NULL

La table à droite du mot-clé join est considérée comme la table principale, principalement pour interroger toutes les données de la table de droite et pour interroger la table de gauche par association

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;
 
或
 
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
在某些数据库中,RIGHT JOIN 称为 RIGHT OUTER JOIN

comme suit: 

select 
	e.ename,d.dname
from
	emp e 
right (outer) join 
	dept d
on
	e.deptno = d.deptno;

Dans certaines bases de données, RIGHT JOIN est appelé RIGHT OUTER JOIN

【7】JOINTURE EXTERNE COMPLÈTE SQL

Le mot-clé FULL OUTER JOIN renvoie des lignes tant qu'il y a une correspondance dans l'une des tables de gauche (table1) et de droite (table2)

Le mot clé FULL OUTER JOIN combine les résultats de LEFT JOIN et RIGHT JOIN (FULL OUTER JOIN n'est pas pris en charge dans MySQL)

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

Résumé comme suit :

Une jointure interne B prend l'intersection.

Une jointure gauche B prend tout A et B n'a pas de valeur correspondante nulle.

Une jointure droite B prend B tout A n'a pas de valeur correspondante est nulle.

Une jointure externe complète B prend l'union, il n'y a pas de valeur correspondante à null

Par exemple : la colonne "deptId" de la table "user" pointe vers le champ "id" de la table "dept" ; les deux tables ci-dessus sont liées par la colonne "deptId"

select u.id,d.id,d.name,d.number 
from user u left join dept d 
on u.deptId = d.id;
 
或
 
select u.id,u.name,d.id,d.name,d.number 
from user u inner join dept d 
on u.deptId = d.id;

Les résultats de la requête sont les mêmes

Je suppose que tu aimes

Origine blog.csdn.net/MinggeQingchun/article/details/122302972
conseillé
Classement