Tutoriel classi...SE CONNECTER
Tutoriel classique SQLite
auteur:php.cn  temps de mise à jour:2022-04-13 17:05:02

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.0
5 David 27 Texas 85000. 0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0

L'autre table est DEPARTMENT, définie comme suit :

CREATE TABLE DEPARTMENT(
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 :

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES ( 1, 'IT Billing', 1 );

Enfin, nous avons la liste d'enregistrements suivante dans la table DEPARTMENT :

ID DEPT EMP_ID
--- ------- ---------- ----------
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) :

SELECT ... FROM table1 CROSS JOIN table2 ...

Basé sur le tableau ci-dessus, nous pouvons écrire une jointure croisée (CROSS JOIN) comme suit :

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY CROSS JOIN DEPARTMENT;

La requête ci-dessus produira les résultats suivants :

EMP_ID      NOM         DEPT
---------  ----------  ---------
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)的语法:

SELECT ... FROM table1 [INNER] JOIN table2 ON conditional_expression ...

为了避免冗余,并保持较短的措辞,可以使用 USING 表达式声明内连接(INNER JOIN)条件。这个表达式指定一个或多个列的列表:

SELECT ... FROM table1 JOIN table2 USING ( column1 ,... ) ...

自然连接(NATURAL JOIN)类似于 JOIN...USING,只是它会自动测试存在两个表中的每一列的值之间相等值:

SELECT ... FROM table1 NATURAL JOIN table2...

基于上面的表,我们可以写一个内连接(INNER JOIN),如下所示:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

La requête ci-dessus produira les résultats suivants :

EMP_ID      NAME        DEPT
----------  ----------  ----------
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)的语法:

SELECT ... FROM table1 LEFT OUTER JOIN table2 ON conditional_expression ...

为了避免冗余,并保持较短的措辞,可以使用 USING 表达式声明外连接(OUTER JOIN)条件。这个表达式指定一个或多个列的列表:

SELECT ... FROM table1 LEFT OUTER JOIN table2 USING ( column1 ,... ) ...

基于上面的表,我们可以写一个外连接(OUTER JOIN),如下所示:

sqlite> SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
        ON COMPANY.ID = DEPARTMENT.EMP_ID;

La requête ci-dessus produira les résultats suivants :

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineerin
            Teddy
            Mark
            David
            Kim
7           James       Finance