Tutorial klasik...login
Tutorial klasik SQLite
pengarang:php.cn  masa kemas kini:2022-04-13 17:05:02

SQLite Joins


Klausa Joins SQLite digunakan untuk menyertai rekod daripada dua atau lebih jadual dalam pangkalan data. JOIN ialah satu cara untuk menggabungkan medan daripada dua jadual melalui nilai sepunya.

SQL mentakrifkan tiga jenis cantuman utama:

  • CROSS JOIN

  • INNER JOIN

  • OUTER JOIN - OUTER JOIN

Sebelum kita meneruskan, mari kita anggap ada dua meja SYARIKAT dan JABATAN. Kami telah melihat pernyataan INSERT yang digunakan untuk mengisi jadual SYARIKAT. Sekarang mari kita anggap bahawa senarai rekod jadual syarikat adalah seperti berikut: -------- 🎜> 3 Teddy 23 Norway 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

Jadual lain ialah JABATAN, ditakrifkan seperti berikut:

BUAT JABATAN MEJA(
ID INT KUNCI UTAMA BUKAN NULL,
DEPT CHAR(50) BUKAN NULL,
EMP_ID INT NOT NULL
);

Berikut ialah pernyataan INSERT untuk mengisi jadual JABATAN:

MASUKKAN KE DALAM JABATAN (ID, DEPT, EMP_ID)
NILAI ( 1, 'Pengebilan IT', 1 );

Akhir sekali, kami mempunyai senarai rekod berikut dalam jadual JABATAN:

ID DEPT EMP_ID
--- ------- ---------- ----------
1 Pengebilan IT 1
2 Jurutera 2
3 Kewangan 7

CROSS JOIN - CROSS JOIN

Cross JOIN (CROSS JOIN) sepadan dengan setiap baris jadual pertama dengan setiap baris jadual kedua. Jika dua jadual input mempunyai lajur x dan y, jadual hasil mempunyai lajur x+y. Memandangkan cantuman silang (CROSS JOIN) boleh menghasilkan jadual yang sangat besar, ia mesti digunakan dengan berhati-hati dan hanya menggunakannya apabila sesuai.

Berikut ialah sintaks cantuman silang (CROSS JOIN):

PILIH ... DARI jadual1 CROSS JOIN table2 ...

Berdasarkan pada jadual di atas, kita boleh menulis cantuman silang (CROSS JOIN) seperti berikut:

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

Pertanyaan di atas akan menghasilkan keputusan berikut:

emp_id Nama Dept
---------- ---------- ----------
1 Paul It Billing
2 Paul Engineerin
7 Paul Finance
1 Allen IT Billing
2 Allen Engineerin
7 Allen Finance
1 Teddy It Billing
2 Teddy Engineerin
7 Teddy Finance
1 Tandakan IT Biling
2 Mark Engineerin
7 Mark Finance
1 David It Billing
2 David Engineerin
7 David Finance
1 Kim IT Biling
2 Kim Engineerin
7 Kim Finance
1 James It Billing
2 James Engineerin
7 James Finance

内连接 - 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;

Pertanyaan di atas akan menghasilkan keputusan berikut:

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;

Pertanyaan di atas akan menghasilkan keputusan berikut:

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