Header ads

Header ads
» » Mệnh đề kết hợp dữ liệu UNION trong SQL

Trong SQL bạn có thể kết hợp các dữ liệu có cấu trúc giống nhau từ nhiều bảng thành một khi truy vấn bằng toán tử UNION và UNION ALL. Các bảng này có khi trong cùng một CSDL, có khi ở các CSDL khác nhau.

    Ở bài viết này, Quantrimang sẽ hướng dẫn chi tiết cách sử dụng mệnh đề UNION trong SQL với cú pháp và những ví dụ cụ thể để bạn dễ hình dung và nắm bắt câu lệnh tốt hơn.

    UNION trong SQL

    Mệnh đề/Toán tử UNION trong SQL được sử dụng để kết hợp kết quả của hai hoặc nhiều lệnh SELECT mà không trả về bất cứ bản ghi trùng lặp nào. 

    Để sử dụng UNION, mỗi lệnh SELECT phải có số cột giống nhau, cùng số biểu thức của các cột, cùng kiểu dữ liệu, và cột tương ứng phải theo đúng thứ tự tuy nhiên không cần có cùng chiều dài.

    Cú pháp UNION trong SQL

    Cú pháp cơ bản của mệnh đề UNION như sau:

    SELECT cot1 [, cot2 ]
    FROM bang1 [, bang2 ]
    [WHERE dieu_kien]

    UNION

    SELECT cot1 [, cot2 ]
    FROM bang1 [, bang2 ]
    [WHERE dieu_kien]

    Tại đây, dieu_kien đã cho có thể là bất kỳ biểu thức nào dựa theo yêu cầu của bạn.

    Ví dụ về UNION trong SQL

    Giả sử hai bảng là NHANVIENTIENTHUONG có các bản ghi sau:

    Bảng 1: NHANVIEN

     +----+----------+-----+-----------+----------+   | ID | TEN      |TUOI | DIACHI    | LUONG    |   +----+----------+-----+-----------+----------+   |  1 | Thanh    |  32 | Haiphong  |  2000.00 |   |  2 | Loan     |  25 | Hanoi     |  1500.00 |   |  3 | Nga      |  23 | Hanam     |  2000.00 |   |  4 | Manh     |  25 | Hue       |  6500.00 |   |  5 | Huy      |  27 | Hatinh    |  8500.00 |   |  6 | Cao      |  22 | HCM       |  4500.00 |   |  7 | Lam      |  24 | Hanoi     | 10000.00 |   +----+----------+-----+-----------+----------+

     Bảng 2: TIENTHUONG

     +-----+---------------------+-------------+--------+   |TT_ID| NGAY                | NHANVIEN_ID | SOTIEN |   +-----+---------------------+-------------+--------+   | 102 | 2019-01-08 00:00:00 |           3 |   3000 |   | 100 | 2019-01-08 00:00:00 |           3 |   1500 |   | 101 | 2019-02-20 00:00:00 |           2 |   1560 |   | 103 | 2018-12-20 00:00:00 |           4 |   2060 |   +-----+---------------------+-------------+--------+   

    Bây giờ chúng ta kết hợp hai bảng này trong lệnh SELECT như sau:

    SQL> SELECT ID, TEN, SOTIEN, NGAY
    FROM NHANVIEN
    LEFT JOIN TIENTHUONG
    ON NHANVIEN.ID = TIENTHUONG.NHANVIEN_ID
    UNION
    SELECT ID, TEN, SOTIEN, NGAY
    FROM NHANVIEN
    RIGHT JOIN TIENTHUONG
    ON NHANVIEN.ID = TIENTHUONG.NHANVIEN_ID;

    Kết quả trả về là:

     +------+----------+--------+---------------------+   | ID   | TEN      | SOTIEN | NGAY                |   +------+----------+--------+---------------------+   |    1 | Thanh    |   NULL | NULL                |   |    2 | Loan     |   1560 | 2019-02-20 00:00:00 |   |    3 | Nga      |   3000 | 2019-01-08 00:00:00 |   |    3 | Nga      |   1500 | 2019-01-08 00:00:00 |   |    4 | Manh     |   2060 | 2018-12-20 00:00:00 |   |    5 | Huy      |   NULL | NULL                |   |    6 | Cao      |   NULL | NULL                |   |    7 | Lam      |   NULL | NULL                |   +------+----------+--------+---------------------+   

    UNION ALL trong SQL

    Mệnh đề/Toán tử UNION ALL trong SQL được sử dụng để kết hợp kết quả của hai hoặc nhiều lệnh SELECT bao gồm cả các bản ghi trùng lặp.

    Các quy tắc áp dụng cho UNION cũng áp dụng cho toán tử UNION ALL.

    Cú pháp UNION ALL trong SQL

    Cú pháp cơ bản của mệnh đề UNION ALL như sau:

    SELECT cot1 [, cot2 ]
    FROM bang1 [, bang2 ]
    [WHERE dieu_kien]

    UNION ALL

    SELECT cot1 [, cot2 ]
    FROM bang1 [, bang2 ]
    [WHERE dieu_kien]

    Tại đây, dieu_kien đã cho có thể là bất kỳ biểu thức nào dựa theo yêu cầu của bạn.

    Ví dụ về UNION ALL trong SQL

    Giả sử hai bảng là NHANVIENTIENTHUONG có các bản ghi sau:

    Bảng 1: NHANVIEN

     +----+----------+-----+-----------+----------+   | ID | TEN      |TUOI | DIACHI    | LUONG    |   +----+----------+-----+-----------+----------+   |  1 | Thanh    |  32 | Haiphong  |  2000.00 |   |  2 | Loan     |  25 | Hanoi     |  1500.00 |   |  3 | Nga      |  23 | Hanam     |  2000.00 |   |  4 | Manh     |  25 | Hue       |  6500.00 |   |  5 | Huy      |  27 | Hatinh    |  8500.00 |   |  6 | Cao      |  22 | HCM       |  4500.00 |   |  7 | Lam      |  24 | Hanoi     | 10000.00 |   +----+----------+-----+-----------+----------+

     Bảng 2: TIENTHUONG

    Bây giờ chúng ta kết hợp hai bảng này trong lệnh SELECT như sau:

    SQL> SELECT ID, TEN, SOTIEN, NGAY
    FROM NHANVIEN
    LEFT JOIN TIENTHUONG
    ON NHANVIEN.ID = TIENTHUONG.NHANVIEN_ID
    UNION ALL
    SELECT ID, TEN, SOTIEN, NGAY
    FROM NHANVIEN
    RIGHT JOIN TIENTHUONG
    ON NHANVIEN.ID = TIENTHUONG.NHANVIEN_ID;

    Kết quả trả về là:

     +------+----------+--------+---------------------+   | ID   | TEN      | SOTIEN | NGAY                |   +------+----------+--------+---------------------+   |    1 | Thanh    |   NULL | NULL                |   |    2 | Loan     |   1560 | 2019-02-20 00:00:00 |   |    3 | Nga      |   3000 | 2019-01-08 00:00:00 |   |    3 | Nga      |   1500 | 2019-01-08 00:00:00 |   |    4 | Manh     |   2060 | 2018-12-20 00:00:00 |   |    5 | Huy      |   NULL | NULL                |   |    6 | Cao      |   NULL | NULL                |   |    7 | Lam      |   NULL | NULL                |   |    3 | Nga      |   3000 | 2019-01-08 00:00:00 |   |    3 | Nga      |   1500 | 2019-01-08 00:00:00 |   |    2 | Loan     |   1560 | 2019-02-20 00:00:00 |   |    4 | Manh     |   2060 | 2018-12-20 00:00:00 |   +------+----------+--------+---------------------+   

    Ngoài ra, có hai mệnh đề khác/toán tử tương tự như mệnh đề UNION là:

    • Mệnh đề INTERSECT trong SQL: được sử dụng để kết hợp hai câu lệnh SELECT, nhưng trả về các hàng chỉ từ câu lệnh SELECT đầu tiên giống với một dòng trong câu lệnh SELECT thứ hai.
    • Mệnh đề EXCEPT trong SQL: được sử dụng để kết hợp hai lệnh SELECT và trả về các hàng từ lệnh SELECT đầu tiên mà không được trả về bởi lệnh SELECT thứ hai.

    Ở các bài tiếp theo, Quantrimang sẽ cùng bạn thảo luận về giá trị NULL trong SQL. Các bạn nhớ theo dõi nhé!

    Bài trước: Mệnh đề kết hợp dữ liệu JOIN trong SQL

    Bài tiếp: Giá trị NULL trong SQL


    Tham gia nhóm Facebook

    Cập nhật công nghệ từ Youtube tại link: https://www.youtube.com/channel/UCOxeYcvZPGf-mGLYSl_1LuA/videos
    Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
    Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com

    About Học viện đào tạo trực tuyến

    Xinh chào bạn. Tôi là Đinh Anh Tuấn - Thạc sĩ CNTT. Email: dinhanhtuan68@gmail.com .
    - Nhận đào tạo trực tuyến lập trình dành cho nhà quản lý, kế toán bằng Foxpro, Access 2010, Excel, Macro Excel, Macro Word, chứng chỉ MOS cao cấp, IC3, tiếng anh, phần mềm, phần cứng .
    - Nhận thiết kế phần mềm quản lý, Web, Web ứng dụng, quản lý, bán hàng,... Nhận Thiết kế bài giảng điện tử, số hóa tài liệu...
    HỌC VIỆN ĐÀO TẠO TRỰC TUYẾN:TẬN TÂM-CHẤT LƯỢNG.
    «
    Next
    Bài đăng Mới hơn
    »
    Previous
    Bài đăng Cũ hơn