SQLite - JOINS

SQLite Joinsmệnh đề được sử dụng để kết hợp các bản ghi từ hai hoặc nhiều bảng trong cơ sở dữ liệu. JOIN là một phương tiện để kết hợp các trường từ hai bảng bằng cách sử dụng các giá trị chung cho mỗi bảng.

SQL định nghĩa ba kiểu nối chính:

  • THAM GIA CROSS
  • THAM GIA INNER
  • THAM GIA NGOÀI TRỜI

Trước khi tiếp tục, chúng ta hãy xem xét hai bảng COMPANY và DEPARTMENT. Chúng ta đã thấy các câu lệnh INSERT để điền vào bảng COMPANY. Vì vậy, chỉ cần giả sử danh sách các bản ghi có sẵn trong bảng COMPANY -

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
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

Một bảng khác là DEPARTMENT với định nghĩa sau:

CREATE TABLE DEPARTMENT(
   ID INT PRIMARY KEY      NOT NULL,
   DEPT           CHAR(50) NOT NULL,
   EMP_ID         INT      NOT NULL
);

Đây là danh sách các câu lệnh INSERT để điền vào bảng DEPARTMENT -

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

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (2, 'Engineering', 2 );

INSERT INTO DEPARTMENT (ID, DEPT, EMP_ID)
VALUES (3, 'Finance', 7 );

Cuối cùng, chúng tôi có danh sách các bản ghi sau đây có sẵn trong bảng DEPARTMENT -

ID          DEPT        EMP_ID
----------  ----------  ----------
1           IT Billing  1
2           Engineering 2
3           Finance     7

THAM GIA CROSS

CROSS JOIN khớp mọi hàng của bảng đầu tiên với mọi hàng của bảng thứ hai. Nếu bảng đầu vào có hàng x và hàng y tương ứng thì bảng kết quả sẽ có hàng x * y. Vì các CROSS JOIN có khả năng tạo ra các bảng cực kỳ lớn, nên phải cẩn thận để chỉ sử dụng chúng khi thích hợp.

Sau đây là cú pháp của CROSS JOIN:

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

Dựa trên các bảng trên, bạn có thể viết CROSS JOIN như sau:

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

Truy vấn trên sẽ tạo ra kết quả sau:

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

THAM GIA INNER

INNER JOIN tạo một bảng kết quả mới bằng cách kết hợp các giá trị cột của hai bảng (table1 và table2) dựa trên vị từ nối. Truy vấn so sánh từng hàng của bảng1 với từng hàng của bảng2 để tìm tất cả các cặp hàng thỏa mãn vị từ nối. Khi vị từ nối được thỏa mãn, các giá trị cột cho mỗi cặp hàng A và B đã so khớp được kết hợp thành một hàng kết quả.

INNER JOIN là kiểu tham gia mặc định và phổ biến nhất. Bạn có thể sử dụng từ khóa INNER tùy ý.

Sau đây là cú pháp của INNER JOIN:

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

Để tránh dư thừa và giữ cho cụm từ ngắn hơn, điều kiện INNER JOIN có thể được khai báo bằng USINGbiểu hiện. Biểu thức này chỉ định một danh sách gồm một hoặc nhiều cột.

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

NATURAL JOIN tương tự như một JOIN...USING, chỉ nó tự động kiểm tra sự bình đẳng giữa các giá trị của mọi cột tồn tại trong cả hai bảng -

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

Dựa trên các bảng trên, bạn có thể viết INNER JOIN như sau:

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

Truy vấn trên sẽ tạo ra kết quả sau:

EMP_ID      NAME        DEPT
----------  ----------  ----------
1           Paul        IT Billing
2           Allen       Engineering
7           James       Finance

THAM GIA NGOÀI TRỜI

OUTER JOIN là phần mở rộng của INNER JOIN. Mặc dù tiêu chuẩn SQL xác định ba loại THAM GIA NGOÀI TRỜI: LEFT, RIGHT và FULL, SQLite chỉ hỗ trợLEFT OUTER JOIN.

OUTER JOIN có một điều kiện giống với INNER JOIN, được biểu thị bằng từ khóa ON, USING hoặc NATURAL. Bảng kết quả ban đầu được tính theo cùng một cách. Sau khi phép tính JOIN chính, một OUTER JOIN sẽ lấy bất kỳ hàng nào không liên kết từ một hoặc cả hai bảng, đệm chúng bằng NULL và nối chúng vào bảng kết quả.

Sau đây là cú pháp của LEFT OUTER JOIN -

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

Để tránh dư thừa và giữ cho cụm từ ngắn hơn, điều kiện OUTER JOIN có thể được khai báo bằng biểu thức USING. Biểu thức này chỉ định một danh sách gồm một hoặc nhiều cột.

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

Dựa trên các bảng trên, bạn có thể viết một phép nối bên trong như sau:

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

Truy vấn trên sẽ tạo ra kết quả sau:

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