Mệnh đề INTERSECT trong SQL

Mệnh đề/Toán tử INTERSECT trong SQL được sử dụng để kết hợp hai lệnh SELECT, nhưng trả về các hàng chỉ từ lệnh SELECT đầu tiên mà là đồng nhất với một hàng trong lệnh SELECT thứ hai. Nghĩa là, INTERSECT chỉ trả về các hàng chung được trả về bởi hai lệnh SELECT.

Các qui tắc áp dụng cho toán tử UNION cũng áp dụng cho toán tử INTERSECT. MySQL không hỗ trợ toán tử INTERSECT.

Cú pháp

Cú pháp cơ bản của INTERSECT trong SQL như sau:

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

INTERSECT

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

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

Ví dụ

Giả sử có hai bảng, bảng SINHVIEN có các bản ghi sau:

+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4000000       |
|  2 | Viet    |  19 | DTVT      | 3000000     |
|  3 | Thanh   |  18 | KTDN      |  4000000      |
|  4 | Nhan    |  19 | CK        |   4500000   |
|  5 | Huong   |  20 | TCNH      |   5000000     |
+----+---------+-----+-----------+---------+

Bảng MUONSACH có các bản ghi sau:

+-----+---------------------+-------------+--------+
|STT  | NGAY                | SINHVIEN_ID | SOTIEN |
+-----+---------------------+-------------+--------+
| 102 | 2009-10-08 00:00:00 |           3 |   320 |
| 100 | 2009-10-08 00:00:00 |           3 |   250 |
| 101 | 2009-11-20 00:00:00 |           2 |   280 |
| 103 | 2008-05-20 00:00:00 |           4 |   290 |
+-----+---------------------+-------------+--------+

Bây giờ, chúng ta kết hợp hai bảng bởi sử dụng các lệnh SELECT trong SQL như sau:

SQL> SELECT  ID, TEN, SOTIEN, NGAY
     FROM SINHVIEN
     LEFT JOIN MUONSACH
     ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID
INTERSECT
     SELECT  ID, TEN, SOTIEN, NGAY
     FROM SINHVIEN
     RIGHT JOIN MUONSACH
     ON SINHVIEN.ID = MUONSACH.SINHVIEN_ID;

Ví dụ trên sẽ cho kết quả:

+------+---------+--------+---------------------+
| ID   | TEN    | SOTIEN | NGAY                |
+------+---------+--------+---------------------+
|    3 | Thanh |   320 | 2009-10-08 00:00:00 |
|    3 | Thanh |   250 | 2009-10-08 00:00:00 |
|    2 | Viet  |   280 | 2009-11-20 00:00:00 |
|    4 | Nhan |   290 | 2008-05-20 00:00:00 |
+------+---------+--------+---------------------+
Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s