Sinh Viên Miệt Vườn

xin chào các bạn đả đến với website của chúng tôi được lập ngày 3/9/2008


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

    Share
    avatar
    Admin
    Admin
    Admin

    Tổng số bài gửi : 106
    Join date : 03/09/2008
    Age : 27
    Đến từ : http://mainhachung.5forum.info

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

    Bài gửi  Admin on 13/10/2008, 3:06 am

    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 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);

      Hôm nay: 19/10/2017, 5:00 pm