Ngôn ngữ SQL - FULL JOIN

Full Join trong SQL

Lệnh Full Join trong SQL là sự kết hợp các kết quả của cả hai phép nối Left Join và Right Join.

Kết quả join sẽ chứa tất cả các bản ghi từ cả hai bảng và điền vào NULL cho các kết quả bị thiếu ở hai bên.

Cú pháp

Cú pháp cơ bản của lệnh Full Join trong SQL như sau:

SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;

FULL JOIN trong SQL


Ví dụ sử dụng lệnh Full Join trong SQL

Tạo bảng Customers:

CREATE TABLE CUSTOMERS (
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25),
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

Insert dữ liệu vào bảng Customers:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (1, 'Ha Anh', 32, 'Da Nang', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (2, 'Van Ha', 25, 'Ha Noi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (3, 'Vu Bang', 23, 'Vinh', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (4, 'Thu Minh', 25, 'Ha Noi', 6500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (5, 'Hai An', 27, 'Ha Noi', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (6, 'Hoang', 22, 'Ha Noi', 4500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
    VALUES (7, 'Binh', 24, 'Ha Noi', 10000.00 );

Tạo bảng Orders:

CREATE TABLE ORDERS (
   OID  INT              NOT NULL,
   DATE VARCHAR (20)     NOT NULL,
   CUSTOMER_ID INT       NOT NULL,
   AMOUNT INT,
   PRIMARY KEY (OID)
);

Insert dữ liệu vào bảng Orders:

INSERT INTO ORDERS (OID, DATE, CUSTOMER_ID, AMOUNT)
    VALUES (102, '2009-10-08 00:00:00', 3, 10);
INSERT INTO ORDERS (OID, DATE, CUSTOMER_ID, AMOUNT)
    VALUES (100, '2009-10-08 00:00:00', 3, 15);
INSERT INTO ORDERS (OID, DATE, CUSTOMER_ID, AMOUNT)
    VALUES (101, '2009-11-20 00:00:00', 2, 5);
INSERT INTO ORDERS (OID, DATE, CUSTOMER_ID, AMOUNT)
    VALUES (103, '2008-05-20 00:00:00', 4, 20);

Bây giờ, chúng ta hãy join hai bảng này bằng cách sử dụng Full Join như sau:

SELECT  c.ID, c.NAME, o.AMOUNT, o.DATE
    FROM CUSTOMERS c
    FULL JOIN ORDERS o
    ON c.ID = o.CUSTOMER_ID;

Kết quả:

Ví dụ FULL JOIN trong SQL

Lưu ý: Nếu Cơ sở dữ liệu của bạn không hỗ trợ FULL JOIN (MySQL không hỗ trợ FULL JOIN), thì bạn có thể sử dụng lệnh UNION ALL để kết hợp hai phép JOIN như sau.
SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS c
   LEFT JOIN ORDERS o
   ON c.ID = o.CUSTOMER_ID
UNION ALL
   SELECT  ID, NAME, AMOUNT, DATE
   FROM CUSTOMERS c
   RIGHT JOIN ORDERS o
   ON c.ID = o.CUSTOMER_ID