Tìm hiểu kiến thức cơ sở dữ liệu với Bài giảng Cơ sở dữ liệu quan hệ và SQL: Chương 8 SQL nâng cao gồm Phép toán SET, Các hàm thời gian, Mệnh đề GROUP BY nâng cao...
Chương SQL NÂNG CAO - Lý thuyết: tiết - Thực hành: tiết Chương SQL nâng cao 8-1 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 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 tốn tập hợp có thứ tự ưu tiên Chương SQL nâng cao 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ể mẫu tin trùng giư˜ lại INTERSET Lấy phần giao 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) Chương SQL nâng cao 8-4 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ột kiểu liệu phải giống câu lệnh câu truy vấn Thực tất cột chọn Giá trị NULL không bỏ qua kiểm tra tính trùng lặp Tố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 mệnh đề SELECT Chương SQL nâng cao 8-5 8.1 Phép toán SET - Phép tốn UNION Ví dụ: Hiển thị lịch sử cơng việc tất 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ương SQL nâng cao 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ể 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âu lệnh select thành phần Chương SQL nâng cao 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 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ương SQL nâng cao 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ột kiểu liệu phải giống câu lệnh truy vấn Giá trị NULL không bỏ qua kiểm tra tính trùng lặp Chương SQL nâng cao 8-9 8.1 Phép toán SET - Phép toán INTERSECT Ví dụ: Hiển thị nhân viên mà khứ họ làm công việc giống công việc SELECT Emp_id, Job_id FROM emp INTERSECT SELECT Emp_id, Job_id FROM job_history Chương SQL nâng cao - 10 8.3 Mệnh đề GROUP BY nâng cao 8.3.2 Hàm GROUPING Ví dụ: Tạo bảng tổng hợp lương cho phòng ban SELECT Deptid, Jobid, Job, SUM(Salary), GROUPING(Deptid) Gdept, GROUPING(Jobid) Gjob FROM emp GROUP BY ROLLUP(Deptid, 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à mở rộng mệnh đề GROUP BY - Cho phép xác định nhiều nhóm dư˜ liệu giúp cho việc phân tích dư˜ liệu đa chiều dê˜ dàng - Có thể định nghĩa nhiều hàm GROUPING câu truy vấn - Oracle Server tính tất hàm GROUPING định mệnh đề GROUPING SETS kết hợp kết hàm GROUPING riêng lẻ với phép toán UNION ALL Chương SQL nâng cao - 26 8.3 Mệnh đề GROUP BY nâng cao 8.3.3 Mệnh đề GROUPING SETS SELECT [column,] group_function(column)… FROM table [WHERE condition] [GROUP BY GROUPING SETS gr_expr] [HAVING having_expression] [ORDER BY column] Chương SQL nâng cao - 27 8.3 Mệnh đề GROUP BY nâng cao 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) và (Jobid, Managerid) SELECT Deptid, Jobid, Managerid, AVG(Salary) FROM Emp GROUP BY GROUPING SETS ((Depid, Joid), (Jobid, Managerid)) Chương SQL nâng cao - 28 8.3 Mệnh đề GROUP BY nâng cao 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ương SQL nâng cao - 29 8.3 Mệnh đề GROUP BY nâng cao 8.3.4 Cột ghép - Là tập hợp cột, cột coi đơn vị - Nhóm cột dấu ngoặc đơn để Oracle server xem cột đơn vị q trình tính tốn với tốn tử ROLLUP hay CUBE Ví dụ ROLLUP (a, (b,c) , d); (b,c) cột ghép Chương SQL nâng cao - 30 8.3 Mệnh đề GROUP BY nâng cao 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 và người quản lý SELECT Deptid, Jobid, Managerid, SUM(Salary) FROM Emp GROUP BY ROLLUP( Deptid, (Jobid, Managerid)) Chương SQL nâng cao - 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 dư˜ liệu để chuyển dư˜ liệu từ hay nhiều nguồn sang tập hợp bảng đích - Khả cải tiến thực sở dư˜ liệu Chương SQL nâng cao - 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ương SQL nâng cao - 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ương SQL nâng cao - 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>200 Chương SQL nâng cao - 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ương SQL nâng cao - 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 FROM Emp Chương SQL nâng cao - 37 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 ngôn ngữ SQL sử dụng DML không tạo mục Chương SQL nâng cao - 38 Chương SQL nâng cao - 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 kết hai... Emp Chương SQL nâng cao - 37 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. .. CUBE(Dept_id, Job_id) Chương SQL nâng cao - 22 8. 3 Mệnh đề GROUP BY nâng cao 8. 3.2 Hàm GROUPING - Xác định mức tổng hợp tổng hợp thành phần - Nhận biết giá trị NULL biểu thức hàng kết từ bảng sở