Chọn nhiều bảng tại lệnh From trong Oracle
Ở các bài trên mình đã hướng dẫn bạn sử dụng lệnh FROM để lấy dữ liệu từ một bảng. Tuy nhiên bạn cũng có thể chọn nhiều bảng tại FROM, lúc này Oracle sẽ thực hiện phép tích đề cát để tạo ra một bảng mới chứa toàn bộ thông tin của hai bảng.
1. Tích đề cát ở From trong Oracle
Phép tích đề cát 2 tables chính là bạn sẽ lấy từng record của mỗi table gộp lại với nhau. ví dụ table A có 10 records, table B có 5 records thì khi thích hiện tích đề cát sẽ tạo ra 10x5=50 records. Nó sẽ lấy 1 record của bảng A hợp với lần lượt từng record ở bảng B, tiếp theo sẽ record thứ 2 ở bảng A và hợp với lần lượt từng record ở bảng B, ... Cứ như vậy cho đến khi nào bảng A hết thì thôi.
Giả sử bảng A có dữ liệu như sau:
ID | Name |
---|---|
1 | Cường |
2 | Kính |
Bảng B có dữ liệu như sau:
Bài viết này được đăng tại [free tuts .net]
City | Country |
---|---|
Hà Nội | Việt Nam |
Đà Nẵng | Việt Nam |
Hồ Chí Minh | Việt Nam |
Nếu ta thực hiện tích đề cát với lệnh SQL sau:
SELECT * FROM A, B
Thì kết quả sẽ trả về như sau:
ID | Name | City | Country |
---|---|---|---|
1 | Cường | Hà Nội | Việt Nam |
1 | Cường | Đà Nẵng | Việt Nam |
1 | Cường | Hồ Chí Minh | Việt Nam |
2 | Kính | Hà Nội | Việt Nam |
2 | Kính | Đà Nẵng | Việt Nam |
2 | Kính | Hồ Chí Minh | Việt Nam |
Như vậy phép tích đề cát sẽ trả về một lượng records tương đối lớn, vì vậy tương lai ta sẽ sử dụng lệnh JOIN thay vì thực hiện phép tích như thế này.
Bạn cũng có thể khắc phục bằng thêm điều kiện ở where để lọc, nhưng bản chất nó cũng sẽ trả về hết danh sách rồi mới lọc, vì vậy vẫn chưa tối ưu bằng JOIN (sẽ học sau).
2. Một ví dụ khác với From trong Oracle
Bây giờ mình sẽ dịch lại ví dụ ở trang javatpoint.
Giả sử có bảng suppliers như sau:
Và bảng Order1 như sau:
Mình sẽ viết câu truy vấn như sau:
SELECT suppliers.supplier_id, suppliers.supplier_name, order1.order_number FROM suppliers, order1 WHERE suppliers.supplier_id = order1.supplier_id;
Kết quả sẽ trả về như hình sau:
3. Lời kết
Như vậy trong bài này mình đã giới thiệu xong phép tích đề cát trong Oracle, hay nói cách khác là cách sử dụng nhiều table ở mệnh đề FROM khi truy vấn SELECT.
Cái quan trọng nhất của bài này là bạn phải hiểu bản chất của phép tích đề cát thì sau này bạn mới hiểu và so sánh được với phép JOIN.