Rejointures SQLite
La clause Joins de SQLite est utilisée pour joindre des enregistrements de deux ou plusieurs tables de la base de données. JOIN est un moyen de combiner les champs de deux tables via une valeur commune.
SQL définit trois principaux types de jointures :
CROSS JOIN
INNER JOIN
OUTER JOIN - OUTER JOIN
Avant de continuer, supposons qu'il y ait deux tables COMPANY et DEPARTMENT. Nous avons déjà vu l'instruction INSERT utilisée pour remplir la table COMPANY. Supposons maintenant que la liste des enregistrements de la table COMPANY soit la suivante : -------- 🎜>3 Teddy 23 Norvège 20000.0
4 Mark 25 Rich-Mond 65000.07 James 24 Houston 10000.0
L'autre table est DEPARTMENT, définie comme suit :
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT NOT NULL
);
Ce qui suit est l'instruction INSERT pour remplir la table DEPARTMENT :
VALUES ( 1, 'IT Billing', 1 );
Enfin, nous avons la liste d'enregistrements suivante dans la table DEPARTMENT :
--- ------- ---------- ----------
1 Facturation informatique 1
2 Ingénieur 2
3 Finance 7
Cross JOIN - CROSS JOIN
Cross JOIN (CROSS JOIN) fait correspondre chaque ligne du premier tableau avec chaque ligne du deuxième tableau. Si les deux tables d'entrée ont des colonnes x et y, la table de résultats a des colonnes x+y. Étant donné que les jointures croisées (CROSS JOIN) peuvent produire de très grandes tables, elles doivent être utilisées avec prudence et ne les utiliser que lorsque cela est approprié.
Voici la syntaxe de la jointure croisée (CROSS JOIN) :
Basé sur le tableau ci-dessus, nous pouvons écrire une jointure croisée (CROSS JOIN) comme suit :
La requête ci-dessus produira les résultats suivants :
--------- ---------- ---------
1 Paul Facturation informatique
2 Paul Ingénieur
7 Paul Finance
1 Allen IT Facturation
2 Allen Engin eerin
7 Allen Finance
1 Teddy Facturation informatique
2 Teddy Ingénieur
7 Teddy Finances
1 Mark Facturation informatique
2 Mark Ingénieur
7 Mark Finance
1 David Facturation informatique
2 David Ingénieur
7 David Finance
1 Kim Facturation informatique
2 Kim Ingénieur
7 Kim Finance
1 James Facturation informatique
2 James Ingénieur
7 James Finances
内连接 - INNER JOIN
内连接(INNER JOIN)根据连接谓词结合两个表(table1 和 table2)的列值来创建一个新的结果表。查询会把 table1 中的每一行与 table2 中的每一行进行比较,找到所有满足连接谓词的行的匹配对。当满足连接谓词时,A 和 B 行的每个匹配对的列值会合并成一个结果行。
内连接(INNER JOIN)是最常见的连接类型,是默认的连接类型。INNER 关键字是可选的。
下面是内连接(INNER JOIN)的语法:
为了避免冗余,并保持较短的措辞,可以使用 USING 表达式声明内连接(INNER JOIN)条件。这个表达式指定一个或多个列的列表:
自然连接(NATURAL JOIN)类似于 JOIN...USING,只是它会自动测试存在两个表中的每一列的值之间相等值:
基于上面的表,我们可以写一个内连接(INNER JOIN),如下所示:
ON COMPANY.ID = DEPARTMENT.EMP_ID;
La requête ci-dessus produira les résultats suivants :
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineerin
7 James Finance
外连接 - OUTER JOIN
外连接(OUTER JOIN)是内连接(INNER JOIN)的扩展。虽然 SQL 标准定义了三种类型的外连接:LEFT、RIGHT、FULL,但 SQLite 只支持 左外连接(LEFT OUTER JOIN)。
外连接(OUTER JOIN)声明条件的方法与内连接(INNER JOIN)是相同的,使用 ON、USING 或 NATURAL 关键字来表达。最初的结果表以相同的方式进行计算。一旦主连接计算完成,外连接(OUTER JOIN)将从一个或两个表中任何未连接的行合并进来,外连接的列使用 NULL 值,将它们附加到结果表中。
下面是左外连接(LEFT OUTER JOIN)的语法:
为了避免冗余,并保持较短的措辞,可以使用 USING 表达式声明外连接(OUTER JOIN)条件。这个表达式指定一个或多个列的列表:
基于上面的表,我们可以写一个外连接(OUTER JOIN),如下所示:
ON COMPANY.ID = DEPARTMENT.EMP_ID;
La requête ci-dessus produira les résultats suivants :
---------- ---------- ----------
1 Paul IT Billing
2 Allen Engineerin
Teddy
Mark
David
Kim
7 James Finance