CĂN BẢN
NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Lệnh JOIN trong SQLite

Trong bài này chúng ta sẽ tìm hiểu lệnh JOIN trong SQLite.

1. Lệnh JOIN trong SQLite là gì?

Lệnh JOIN trong SQLite đượ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. Lệnh JOIN sẽ 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.

SQLite định nghĩa ba loại join chính như sau:

  • CROSS JOIN
  • INNER JOIN
  • OUTER JOIN

Giả sử chúng ta có 2 bảng COMPANY và DEPARTMENT. Chúng ta đã sử dụng các câu lệnh INSERT để điền dữ liệu vào bảng COMPANY. Vì vậy, giả sử chúng ta đã có các dòng dữ liệu sau 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

Bảng DEPARTMENT được định nghĩa như sau:

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

Dưới đây là danh sách các câu lệnh INSERT để điền dữ liệu 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 bảng DEPARTMENT có các dòng dữ liệu như sau:

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

2. CROSS JOIN trong SQLite

CROSS JOIN kết nối 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 các bảng đầu vào có hàng x và y, tương ứng, bảng kết quả sẽ có hàng x * y. Vì CROSS JOIN có khả năng tạo các bảng cực lớn, nên phải cẩn thận chỉ sử dụng chúng khi thích hợp.

Cú pháp của CROSS JOIN trong SQLite như sau:

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

Dựa vào 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ả như 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

3. INNER JOIN trong SQLite

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 (bảng1 và bảng2) dựa trên join-predicate. 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 join-predicate. Khi join-predicate được thỏa mãn, các giá trị cột cho mỗi cặp hàng A và B phù hợp được kết hợp thành một hàng kết quả.

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

Cú pháp của INNER JOIN trong SQLite như sau:

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

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

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

NATURAL JOIN tương tự như JOIN ... USING, chỉ khi nó tự động kiểm tra sự bằng nhau 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 vào 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ả như sau:

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

4. OUTER JOIN trong SQLite

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

OUTER JOIN có một điều kiện giống hệt với INNER JOIN, được thể hiện bằng cách sử dụ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 tính toán primary JOINOUTER JOIN  sẽ lấy bất kỳ hàng không liên kết nào từ một hoặc cả hai bảng, đưa chúng ra 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, các đ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 danh sách một hoặc nhiều cột.

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

Dựa vào các bảng trên, bạn có thể viết một inner join 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ả như sau:

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

Cùng chuyên mục:

Các hàm hữu ích trong SQLite

Các hàm hữu ích trong SQLite

SQLite có nhiều hàm dựng sẵn để thực hiện xử lý trên dữ liệu chuỗi…

Date & Time trong SQLite

Date & Time trong SQLite

SQLite hỗ trợ năm hàm ngày và giờ như date(timestring, modifiers...), time(timestring, modifiers...), datetime(timestring, modifiers...),…

VACUUM trong SQLite

VACUUM trong SQLite

Lệnh VACUUM trong SQLite làm sạch cơ sở dữ liệu chính bằng cách sao chép…

EXPLAIN trong SQLite

EXPLAIN trong SQLite

Câu lệnh SQLite có thể được bắt đầu bằng từ khóa "EXPLAIN" hoặc bằng cụm…

SQL Injection trong SQLite

SQL Injection trong SQLite

Nếu bạn nhận user input thông qua một Webpage và chèn nó vào trong một…

Tăng tự động AUTOINCREMENT trong SQLite

Tăng tự động AUTOINCREMENT trong SQLite

AUTOINCREMENT trong SQLite là một từ khóa được sử dụng để tự động tăng giá…

Subquery trong SQLite

Subquery trong SQLite

Subquery hoặc Inner query hoặc Nested query là một truy vấn bên trong một truy…

Transaction trong SQLite

Transaction trong SQLite

Một transaction là một đơn vị công việc được thực hiện đối với một cơ…

Tìm hiểu View trong SQLite

Tìm hiểu View trong SQLite

Một view không có gì khác hơn một câu lệnh SQLite được lưu trữ trong…

Lệnh TRUNCATE TABLE trong SQLite

Lệnh TRUNCATE TABLE trong SQLite

Thật không may, không có lệnh TRUNCATE TABLE trong SQLite nhưng bạn có thể sử…

Lệnh ALTER TABLE trong SQLite

Lệnh ALTER TABLE trong SQLite

Lệnh ALTER TABLE trong SQLite dùng để sửa đổi một bảng hiện có mà không…

Mệnh đề INDEXED BY trong SQLite

Mệnh đề INDEXED BY trong SQLite

Mệnh đề "INDEXED BY index-name" chỉ định rằng index-name phải được sử dụng để tìm…

Index trong SQLite

Index trong SQLite

Index là bảng tra cứu đặc biệt mà database search engine có thể sử dụng…

Tìm hiểu Trigger trong SQLite

Tìm hiểu Trigger trong SQLite

Trigger trong SQLite là các hàm callback, mà tự động được thực hiện/gọi (performed/invoked) khi…

Cú pháp ALIAS trong SQLite

Cú pháp ALIAS trong SQLite

Bạn có thể đổi tên tạm thời một bảng hoặc một cột bằng cách đặt…

Toán tử UNION trong SQLite

Toán tử UNION trong SQLite

Toán tử UNION trong SQLite được sử dụng để kết hợp các kết quả của…

Các ràng buộc Constraint trong SQLite

Các ràng buộc Constraint trong SQLite

Các ràng buộc (Constraints) là các quy tắc được thi hành trên một cột dữ…

Lệnh PRAGMA trong SQLite

Lệnh PRAGMA trong SQLite

Lệnh PRAGMA trong SQLite là một lệnh đặc biệt được sử dụng để kiểm soát…

Từ khóa DISTINCT trong SQLite

Từ khóa DISTINCT trong SQLite

Từ khóa DISTINCT trong SQLite được sử dụng cùng với câu lệnh SELECT để loại…

Mệnh đề HAVING trong SQLite

Mệnh đề HAVING trong SQLite

Mệnh đề HAVING trong SQLite cho phép bạn chỉ định các điều kiện lọc kết…

Top