Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 39 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
39
Dung lượng
1 MB
Nội dung
SQLNÂNGCAO - Lý thuyết: tiết - Thực hành: tiết ChươngSQLnângcao 8-1 SQLNÂNGCAO 8.1 Phép toán SET 8.2 Các hàm thời gian 8.3 Mệnh đề GROUP BY nângcao 8.4 Câu lệnh DML and DDL mở rộng ChươngSQLnângcao 8-2 8.1 Phép toán SET - Kết hợp kết hai hay nhiều câu truy vấn thành phần thành kết (truy vấn ghép) - Các phép toán tập hợp có cùng thứ tự ưu tiên ChươngSQLnângcao 8-3 8.1 Phép toán SET - Các phép toán tập hợp Tên phép toán Diễn giải UNION Kết hợp kết nhiều câu truy vấn với nhau, có nhiều mẫu tin trùng thì giữ lại mẫu tin UNION ALL Kết hợp kết nhiều câu truy vấn với nhau, kể các mẫu tin trùng giữ lại INTERSET Lấy phần giao các kết nhiều câu truy vấn MINUS Lấy kết có câu truy vấn thứ mà không có câu truy vấn thứ hai (sau toán tử MINUS) 8-4 ChươngSQLnângcao 8.1 Phép toán SET - Phép toán UNION Hợp nhiều câu truy vấn sau loại bỏ trùng lặp Số lượng các cột kiểu liệu phải giống các câu lệnh câu truy vấn Thực tất các cột chọn Giá trị NULL không bỏ qua kiểm tra tính trùng lặp Toán tử IN có thứ tự ưu tiên cao phép toán UNION Mặc định xếp tăng dần cho cột ChươngSQLnângcao 8-5 8.1 Phép toán SET - Phép toán UNION Ví dụ: Hiển thị lịch sử công việc tất các nhân viên Mỗi nhân viên xuất lần (Job_history) SELECT Emp_id, Job_id FROM Emp UNION SELECT Emp_id, Job_id FROM Job_History SELECT Empid, Jobid FROM Emp SELECT Empid, Jobid FROM Job_History ChươngSQLnângcao 8-6 8.1 Phép toán SET - Phép toán UNION ALL Hợp từ nhiều câu truy vấn kể sự trùng lặp Không xếp mặc định tăng dần UNION Không thể dùng từ khóa DISTINCT các câu lệnh select thành phần ChươngSQLnângcao 8-7 8.1 Phép toán SET - Phép toán UNION ALL Ví dụ: Hiển thị lịch sử công việc tất các nhân viên SELECT Emp_id, Job_id, Dept_id FROM Emp UNION ALL SELECT Emp_id, Job_id, Dept_id FROM Job_History ORDER BY Emp_id ChươngSQLnângcao 8-8 8.1 Phép toán SET - Phép toán INTERSECT Trả kết phần chung kết hai câu truy vấn thành phần Số lượng các cột kiểu liệu phải giống các câu lệnh truy vấn Giá trị NULL không bỏ qua kiểm tra tính trùng lặp ChươngSQLnângcao 8-9 8.1 Phép toán SET - Phép toán INTERSECT Ví dụ: Hiển thị nhân viên mà quá khứ họ làm công việc giống công việc SELECT FROM INTERSECT SELECT FROM Emp_id, Job_id emp Emp_id, Job_id job_history ChươngSQLnângcao - 10 8.3 Mệnh đề GROUP BY nângcao 8.3.2 Hàm GROUPING Ví dụ: Tạo bảng tổng hợp lương cho các phòng ban SELECT Deptid, Jobid, Job, SUM(Salary), GROUPING(Deptid) Gdept, GROUPING(Jobid) Gjob FROM emp GROUP BY ROLLUP(Deptid, Jobid) ChươngSQLnângcao - 25 8.3 Mệnh đề GROUP BY nângcao 8.3.3 Mệnh đề GROUPING SETS - Là sự mở rộng mệnh đề GROUP BY - Cho phép xác định nhiều nhóm liệu giúp cho việc phân tích liệu đa chiều dễ dàng - Có thể định nghĩa nhiều hàm GROUPING cùng câu truy vấn - Oracle Server tính tất các hàm GROUPING định mệnh đề GROUPING SETS kết hợp kết các hàm GROUPING riêng lẻ ChươngSQLnângcao - 26 8.3 Mệnh đề GROUP BY nângcao 8.3.3 Mệnh đề GROUPING SETS SELECT [column,] group_function(column)… FROM table [WHERE [GROUP gr_expr] condition] BY GROUPING SETS [HAVING having_expression] [ORDER BY column] ChươngSQLnângcao - 27 8.3 Mệnh đề GROUP BY nângcao 8.3.3 Mệnh đề GROUPING SETS Ví dụ: Tạo bảng tổng hợp lương theo hai nhóm (Deptid, Jobid) (Jobid, Managerid) SELECT Deptid, Jobid, Managerid, AVG(Salary) FROM Emp GROUP BY GROUPING SETS ((Depid, Joid), (Jobid, Managerid)) ChươngSQLnângcao - 28 8.3 Mệnh đề GROUP BY nângcao 8.3.3 Mệnh đề GROUPING SETS Câu lệnh truy vấn ví dụ có thể viết lại sau: SELECT Deptid, Jobid, Null As ManagerId, Avg(Salary) FROM Emp GROUP BY Deptid, Jobid UNION ALL SELECT Null As Deptid, Jobid, Managerid, Avg(Salary) FROM Emp GROUP BY Jobid, managerid ChươngSQLnângcao - 29 8.3 Mệnh đề GROUP BY nângcao 8.3.4 Cột ghép - Là tập hợp các cột, cột coi đơn vị - Nhóm các cột dấu ngoặc đơn để Oracle server xem các cột đó đơn vị quá trình tính toán với toán tử ROLLUP hay CUBE Ví dụ ROLLUP (a, (b,c) , d); (b,c) cột ghép ChươngSQLnângcao - 30 8.3 Mệnh đề GROUP BY nângcao 8.3.4 Cột ghép Ví dụ Tạo bảng tổng hợp lương theo phòng ban, công việc người quản lý SELECT Deptid, Jobid, Managerid, SUM(Salary) FROM Emp GROUP BY ROLLUP( Deptid, (Jobid, Managerid)) ChươngSQLnângcao - 31 8.4 Câu lệnh DML and DDL mở rộng 8.4.1 Câu lệnh chèn nhiều bảng - Chèn hay nhiều hàng vào nhiều bảng - Thường sử dụng hệ thống kho liệu để chuyển liệu từ hay nhiều nguồn sang tập hợp các bảng đích - Khả cải tiến thực sở liệuChươngSQLnângcao - 32 8.4 Câu lệnh DML and DDL mở rộng 8.4.1 Câu lệnh chèn nhiều bảng INSERT [ALL] [FIRST] [WHEN condition THEN] [insert_into values] [ELSE] [insert_into values] [insert_into values] (subquery) ChươngSQLnângcao - 33 8.4 Câu lệnh DML and DDL mở rộng 8.4.1 Câu lệnh chèn nhiều bảng - Chèn không điều kiện INSERT ALL INTO Sal_History VALUES(EmpId, hireday, salary) INTO Mgr_History VALUES(EmpId, Mgr, Salary) SELECT Empid, Hireday, Salary, ManagerId Mgr FROM Emp WHERE Empid>200 ChươngSQLnângcao - 34 8.4 Câu lệnh DML and DDL mở rộng 8.4.1 Câu lệnh chèn nhiều bảng - Chèn có điều kiện (ALL) INSERT ALL WHEN Sal>10000 THEN INTO Sal_History VALUES(EmpId, Date, sal) WHEN Mgr>200 THEN INTO Mgr_History VALUES(EmpId, Mgr, Sal) SELECT EmpId, Hireday Date, Salary Sal, Managerid Mgr FROM Emp WHERE Empid>200Chương SQLnângcao - 35 8.4 Câu lệnh DML and DDL mở rộng 8.4.1 Câu lệnh chèn nhiều bảng - Chèn có điều kiện (FIRST) INSERT FIRST WHEN Sal>25000 THEN INTO Special_Sal VALUES(DepId, Sal) WHEN Date LIKE (‘%00%’) THEN INTO Date_His_00 VALUES(DeptId, Date) WHEN Date LIKE (‘%99%’) THEN INTO Date_His_99 VALUES(DeptId, Date) SELECT DeptId, Hireday Date, Salary Sal, ManagerId Mgr FROM Emp GROUP BY Deptid ChươngSQLnângcao - 36 8.4 Câu lệnh DML and DDL mở rộng 8.4.1 Câu lệnh chèn nhiều bảng - Chèn có điều kiện (FIRST) INSERT FIRST WHEN Sal>25000 THEN INTO Special_Sal VALUES(DepId, Sal) WHEN Date LIKE (‘%00%’) THEN INTO Date_His_00 VALUES(DeptId, Date) WHEN Date LIKE (‘%99%’) THEN INTO Date_His_99 VALUES(DeptId, Date) ELSE INTO Date_His VALUES(DeptId, Date) SELECT DeptId, Hireday Date, Salary Sal, ManagerId Mgr - 37 ChươngSQLnângcao 8.4 Câu lệnh DML and DDL mở rộng 8.4.2 Bảng - Bảng bảng cho phép đọc - Dữliệu lưu trữ tệp tin bên sở liệu - Sử dụng câu lệnh CREATE TABLE - Có thể truy vấn liệu bằng ngôn ngữ SQL không thể sử dụng DML không tạo các mục ChươngSQLnângcao - 38 ChươngSQLnângcao - 39 .. .SQL NÂNG CAO 8. 1 Phép toán SET 8. 2 Các hàm thời gian 8. 3 Mệnh đề GROUP BY nâng cao 8. 4 Câu lệnh DML and DDL mở rộng Chương SQL nâng cao 8- 2 8. 1 Phép toán SET - Kết hợp... Jobid) Chương SQL nâng cao - 25 8. 3 Mệnh đề GROUP BY nâng cao 8. 3.3 Mệnh đề GROUPING SETS - Là sự mở rộng mệnh đề GROUP BY - Cho phép xác định nhiều nhóm liệu giúp cho việc phân tích liệu. .. 20 Chương SQL nâng cao - 17 8. 3 Mệnh đề GROUP BY nâng cao 8. 3.1 Toán tử ROLLUP CUBE - Toán tử ROLLUP Đưa tập hợp kết bao gồm các hàng gộp theo nhóm giá trị tổng hợp thành phần (Subtotal) Chương