22/08/2018, 10:49

Oracle9i: Đơn giản hoá cú pháp SQL

Oracle đã thực hiện một số thay đổi quan trọng trong Oracle8i SQL. Những thay đổi này bao gồm các lược đồ thi hành (câu lệnh) mới, hỗ trợ subquery vô hướng (scalar subquery), hỗ trợ chuẩn SQL ISO 99. Như là hệ quả, cú pháp của câu lệnh SQL cũng thay đổi theo hướng ...

Oracle đã thực hiện một số thay đổi quan trọng trong Oracle8i SQL. Những thay đổi này bao gồm các lược đồ thi hành (câu lệnh) mới, hỗ trợ subquery vô hướng (scalar subquery), hỗ trợ chuẩn SQL ISO 99. Như là hệ quả, cú pháp của câu lệnh SQL cũng thay đổi theo hướng dễ sử dụng hơn khi làm việc với cơ sở dữ liệu. Dưới đây là một số thay đổi điển hình trong cú pháp của câu lệnh SQL: Oracle đã thực hiện một số thay đổi quan trọng trong Oracle8i SQL. Những thay đổi này bao gồm các lược đồ thi hành (câu lệnh) mới, hỗ trợ subquery vô hướng (scalar subquery), hỗ trợ chuẩn SQL ISO 99. Như là hệ quả, cú pháp của câu lệnh SQL cũng thay đổi theo hướng dễ sử dụng hơn khi làm việc với cơ sở dữ liệu. Dưới đây là một số thay đổi điển hình trong cú pháp của câu lệnh SQL: - CROSS JOIN - Tạo một tập tích Đề các (cặp sắp xếp có thứ tự) các hàng trong 2 bảng, giống như Oracle 8i khi kết nối bảng nhưng bỏ qua mệnh đề WHERE - NATURAL JOIN - Đây là đặc điểm cú pháp rất tiện lợi trong Oralce 9i, tǎng tính dễ đọc của câu lệnh SQL bằng cách loại bỏ tiêu chuẩn kết nối trong mệnh đề WHERE. - Mệnh đề USING - Cho phép bạn xác định khóa kết nối theo tên. - Mệnh đề ON - Cho phép xác định các cột cho các khoá kết nối trong cả 2 bảng. - LEFT OUTER JOIN - Trả về tất cả các dòng trong bảng bên trái của kết nối cùng với các giá trị tương ứng trong bảng bên phải hoặc null nếu như không có dòng tương ứng ở bảng bên phải. - RIGHT OUTER JOIN - Trả về tất cả các dòng trong bảng bên phải của kết nối cùng với các giá trị tương ứng trong bảng bên trái hoặc null nếu như không có dòng tương ứng ở bảng bên phải. - FULL OUTER JOIN - Trả về tất cả các dòng từ hai bảng, thay bất kỳ giá trị trống nào bằng null. Không có mệnh đề tương đương trong Oracle8i. Phần lớn những thay đổi này nhằm mục đích cho phép các ứng dụng không phải Oracle dễ dàng tương thích với cơ sở dữ liệu Oracele hơn. Lưu ý rằng đây chỉ là những khác biệt về cú pháp, chuẩn ISO 99 không đem lại bất kỳ tính nǎng mới nào cho Oracle9i SQL. CROSS JOIN Trong Oracle, mệnh đề CROSS JOIN tạo ra một tích Đề các các hàng trong 2 bảng, giống như khi chúng ta bỏ qua mệnh đề WHERE khi kết nối như dưới đây: select last_name, dept_id from emp, depts; Trong Oracle9i, chúng ta có thể sử dụng mệnh đề CROSS JOIN để nhận được cùng một kết quả như câu lệnh trên: select last_name, dept_id from emp CROSS JOIN dept; NATURAL JOIN Cú pháp NATURAL JOIN rất tiện lợi bởi vì nó tự động nhận ra khoá kết nối từ tên cột trùng nhau trong cả hai bảng. Cú pháp này đơn giản hoá Oracle9i SQL nhưng yêu cầu các cột kết nối ở hai bảng phải có cùng tên. Một điều đặc biệt là cú pháp này làm việc ngay cả khi không có mối quan hệ khoá chính/khoá ngoại ở cột kết nối của 2 bảng. Oracle8i Select book_title, sum(quantity) From book, sales Where book.book_id = sales.book_id group by book_title; Oracle9i Select book_title, sum(quantity) from book natural join sales group by book_title; Mệnh đề USING Sử dụng mệnh đề USING nếu có nhiều hơn một cột có cùng tên trong 2 bảng nhưng bạn không muốn kết nối trên tất cả các cột này Oracle8i select dept_id, city from departments, locations where departments.location_id = location.location_id; Oracle9i select department_name, city from departments JOIN locations USING (location_id); Mệnh đề ON Mệnh đề ON được sử dụng để kết nối 2 bảng khi tên của các cột trong 2 bảng không trùng nhau. Oracle8i select department_name, city from department, location where department.location_id = location.loc_id; Oracle9i select department_name, city from department d JOIN location l ON (d.location_id = l.id); Mutable Join Sử dụng khi cần kết nối nhiều bảng với nhau. Chuẩn ISO SQL 99 luôn mặc định các bảng được kết nối từ trái sang phải và điều kiện kết nối hiện tại chỉ được tham chiếu tới kết nối hiện tại và các kết nối trước đó ở bên trái. Oracle8i select emp_id, city_name, dept_name from location l, department d, emp e where d.location_id = l.location_id and d.department_id = e.department_id; Oracle9i select emp_id, city_name, dept_name from locations l JOIN departments d ON (d.location_id = l.location_id) JOIN employees e ON (d.department_id = e.department_id); Cú pháp OUTER JOIN mới Chuẩn ISO 99 bỏ tất cả các dấu cộng (+) phiền hà từ kết nối mở rộng và vì vậy các kết nối mở rộng trở thành dễ hiểu hơn. LEFT OUTER JOIN Trong LEFT OUTER JOIN, tất cả các hàng trong bảng bên trái được trả về, ngay cả khi không có giá trị tương ứng trong cột của bảng bên phải. Trong ví dụ dưới đây, tất cả tên nhân viên được trả về, ngay cả những nhân viên chưa được gán mã phòng. Oracle8i select last_name, dept_id from emp e, dept d where e.department_id = d.department_id(+); Oracle9i select last_name, dept_id from emp LEFT OUTER JOIN Dept ON e.dept_id = d.dept_id; RIGHT OUTER JOIN Trong RIGHT OUTER JOIN, tất cả các hàng trong bảng bên trái được trả về, ngay cả khi không có giá trị tương ứng trong cột của bảng bên phải. Trong ví dụ dưới đây, tất cả tên phòng được trả về, ngay cả những phòng chưa có nhân viên. Oracle8i select last_name, d.dept_id from employees e, departments d where e.department_id(+) = d.department_id; Oracle9i select last_name, d.dept_id from employees e RIGHT OUTER JOIN departments d ON (e.department_id = d.department_id); Nguyễn Hữu Tùng (Theo builder.com)
0