SQL nâng cao 8 - 3- Kết hợp kết quả hai hay nhiều câu truy vấn thành phần thành một kết quả duy nhất truy vấn ghép... SQL nâng cao 8 - 258.3.2 Hàm GROUPING Ví dụ: Tạo bảng tổng hợp lươ
Trang 1Chương 8 SQL nâng cao 8 - 1
SQL NÂNG CAO
- Lý thuyết: 2 tiết
- Thực hành: 2 tiết
Trang 2Chương 8 SQL nâng cao 8 - 2
Trang 3Chương 8 SQL nâng cao 8 - 3
- Kết hợp kết quả hai hay nhiều câu truy vấn thành phần thành một kết quả duy nhất (truy
vấn ghép)
- Các phép toán tập hợp có cùng thứ tự ưu tiên
8.1 Phép toán SET
Trang 4Chương 8 SQL nâng cao 8 - 4
- Các phép toán tập hợp
8.1 Phép toán SET
Tên phép
UNION Kết hợp kết quả của nhiều câu truy vấn
với nhau, nếu có nhiều mẫu tin trùng nhau thì chỉ giữ lại một mẫu tin.
UNION ALL Kết hợp kết quả của nhiều câu truy vấn
với nhau, kể cả các mẫu tin trùng nhau cũng được giữ lại.
INTERSET Lấy phần giao giữa các kết quả của
nhiều câu truy vấn.
MINUS Lấy kết quả có trong câu truy vấn thứ
nhất mà không có trong câu truy vấn thứ hai (sau toán tử MINUS).
Trang 5Chương 8 SQL nâng cao 8 - 5
Thực hiện trên tất cả các cột được chọn
Giá trị NULL không được bỏ qua khi kiểm tra tính trùng lặp
Toán tử IN có thứ tự ưu tiên cao hơn phép toán
UNION
Mặc định sắp xếp tăng dần cho cột đầu tiên trong mệnh đề SELECT
8.1 Phép toán SET
Trang 6Chương 8 SQL nâng cao 8 - 6
Trang 7Chương 8 SQL nâng cao 8 - 7
- Phép toán UNION ALL
Hợp từ nhiều câu truy vấn kể cả sự trùng lặp.
Không sắp xếp mặc định tăng dần như UNION
Không thể dùng từ khóa DISTINCT trong các câu
lệnh select thành phần
8.1 Phép toán SET
Trang 8Chương 8 SQL nâng cao 8 - 8
- Phép toán UNION ALL
Ví dụ: Hiển thị lịch sử công việc của tất cả các
Trang 9Chương 8 SQL nâng cao 8 - 9
Trang 10Chương 8 SQL nâng cao 8 - 10
- Phép toán INTERSECT
Ví dụ: Hiển thị những nhân viên mà trong quá khứ họ đã từng làm công việc giống như công việc hiện tại
SELECT Emp_id, Job_idFROM emp
INTERSECT
SELECT Emp_id, Job_id
FROM job_history
8.1 Phép toán SET
Trang 11Chương 8 SQL nâng cao 8 - 11
- Phép toán MINUS
Trả về kết quả trong câu truy vấn thứ nhất
mà không có trong câu truy vấn thứ hai.
Số lượng các cột và kiểu dữ liệu phải giống nhau trong các câu lệnh truy vấn
Tất cả các cột trong mệnh đề WHERE phải có
trong mệnh đề SELECT
8.1 Phép toán SET
Trang 12Chương 8 SQL nâng cao 8 - 12
- Phép toán MINUS
Ví dụ: Hiển thị những nhân viên chưa bao giờ thay đổi công việc
SELECT Emp_idFROM emp
MINUS
SELECT Emp_id
FROM job_history
8.1 Phép toán SET
Trang 13Chương 8 SQL nâng cao 8 - 13
- Một số nguyên tắc chung trên các phép toán tập hợp
Các biểu thức trong mệnh đề SELECT phải cùng số lượng và kiểu dữ liệu
Dùng dấu ngoặc đơn để thay đổi trình tự (ưu tiên) thực hiện
Mệnh đề ORDER BY có thể xuất hiện chỉ cuối câu lệnh
8.1 Phép toán SET
Trang 14Chương 8 SQL nâng cao 8 - 14
EXTRACT(expr)
8.2 Các hàm thời gian
Trang 15Chương 8 SQL nâng cao 8 - 15
- Biểu thức EXTRACT
Ví dụ: Lấy giá trị tháng trong cột Hiredate
SELECT firstname, Hireday,
EXTRACT(MONTH FROM Hireday)
WHERE Manager_id = 100
8.2 Các hàm thời gian
Trang 16Chương 8 SQL nâng cao 8 - 16
- Hàm TO_YMINTERVAL
Chuyển đổi chuỗi ký tự kiểu CHAR, VARCHAR2, NCHAR hay NVARCHAR thành giá trị kiểu INTERVAL YEAR TO MONTH
TO_YMINTERVAL(char)
8.2 Các hàm thời gian
Trang 17Chương 8 SQL nâng cao 8 - 17
8.2 Các hàm thời gian
Trang 18Chương 8 SQL nâng cao 8 - 18
8.3.1 Toán tử ROLLUP và CUBE
- Toán tử ROLLUP
Đưa ra một tập hợp kết quả bao gồm các hàng được gộp theo nhóm và những giá trị tổng hợp thành phần (Subtotal)
8.3 Mệnh đề GROUP BY nâng
cao
Trang 19Chương 8 SQL nâng cao 8 - 19
8.3.1 Toán tử ROLLUP và CUBE
Trang 20Chương 8 SQL nâng cao 8 - 20
8.3.1 Toán tử ROLLUP và CUBE
Trang 21Chương 8 SQL nâng cao 8 - 21
8.3.1 Toán tử ROLLUP và CUBE
Trang 22Chương 8 SQL nâng cao 8 - 22
8.3.1 Toán tử ROLLUP và CUBE
- Toán tử CUBE
Ví dụ: Tạo bảng tổng hợp lương dạng bảng báo cáo
SELECT Dept_id, Job_id, SUM(Salary)FROM Emp
GROUP BY CUBE(Dept_id, Job_id)
8.3 Mệnh đề GROUP BY nâng
cao
Trang 23Chương 8 SQL nâng cao 8 - 23
8.3.2 Hàm GROUPING
- Xác định mức tổng hợp của một tổng hợp thành phần
- Nhận biết một giá trị NULL trong biểu thức của một
hàng kết quả là từ bảng cơ sở hay là do toán tử
ROLLUP(CUBE) tạo ra
SELECT [column,]
group_function(column) ,
GROUPING(expr)
FROM table [WHERE condition]
Trang 24Chương 8 SQL nâng cao 8 - 24
8.3.2 Hàm GROUPING
- Có thể được dùng với toán tử CUBE hoặc ROLLUP
- Có thể tạo ra kết quả tổng hợp trong hàng
- Trả về giá trị 0 hoặc 1giúp cho chúng ta hiểu được
một giá trị tổng hợp đã đạt được như thế nào
Giá trị 0 có nghĩa là biểu thức được sử dụng để
tính giá trị tổng hợp và giá trị NULL là từ bảng cơ sở
Giá trị 1 có nghĩa là biểu thức không được sử dụng để tính giá trị tổng hợp và giá trị NULL là do toán tử
ROLLUP hoặc CUBE tạo ra
8.3 Mệnh đề GROUP BY nâng
cao
Trang 25Chương 8 SQL nâng cao 8 - 25
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) GjobFROM emp
GROUP BY ROLLUP(Deptid, Jobid) 8.3 Mệnh đề GROUP BY nâng
cao
Trang 26Chương 8 SQL nâng cao 8 - 26
8.3.3 Mệnh đề GROUPING SETS
- Là sự mở rộng của 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
hơn
- Có thể định nghĩa nhiều hàm GROUPING
trong cùng một câu truy vấn
- Oracle Server tính tất cả các hàm GROUPING chỉ định trong mệnh đề GROUPING SETS và kết hợp kết quả của các hàm GROUPING riêng lẻ
với phép toán UNION ALL
8.3 Mệnh đề GROUP BY nâng
cao
Trang 27Chương 8 SQL nâng cao 8 - 27
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]
8.3 Mệnh đề GROUP BY nâng
cao
Trang 28Chương 8 SQL nâng cao 8 - 28
8.3.3 Mệnh đề GROUPING SETS
Ví dụ: Tạo bảng tổng hợp lương theo hai nhóm là
(Deptid, Jobid) và (Jobid, Managerid)
SELECT Deptid, Jobid, Managerid, AVG(Salary)FROM Emp
GROUP BY GROUPING SETS ((Depid, Joid), (Jobid, Managerid))
8.3 Mệnh đề GROUP BY nâng
cao
Trang 29Chương 8 SQL nâng cao 8 - 29
Trang 30Chương 8 SQL nâng cao 8 - 30
Trang 31Chương 8 SQL nâng cao 8 - 31
Trang 32Chương 8 SQL nâng cao 8 - 32
8.4.1 Câu lệnh chèn nhiều bảng
- Chèn một hay nhiều hàng vào trong nhiều
bảng.
- Thường được sử dụng trong hệ thống kho dữ liệu để chuyển dữ liệu từ một hay nhiều nguồn sang một tập hợp các bảng đích
- Khả năng cải tiến thực hiện trong cơ sở dữ
liệu
8.4 Câu lệnh DML and DDL mở
rộng
Trang 33Chương 8 SQL nâng cao 8 - 33
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)
8.4 Câu lệnh DML and DDL mở
rộng
Trang 34Chương 8 SQL nâng cao 8 - 34
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
8.4 Câu lệnh DML and DDL mở
rộng
Trang 35Chương 8 SQL nâng cao 8 - 35
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 THENINTO 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 8.4 Câu lệnh DML and DDL mở
rộng
Trang 36Chương 8 SQL nâng cao 8 - 36
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 THENINTO 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 8.4 Câu lệnh DML and DDL mở
rộng
Trang 37Chương 8 SQL nâng cao 8 - 37
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 THENINTO 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 8.4 Câu lệnh DML and DDL mở
rộng
Trang 38Chương 8 SQL nâng cao 8 - 38
8.4.2 Bảng ngoài
- Bảng ngoài là những bảng chỉ cho phép đọc
- Dữ liệu được lưu trữ trong một tệp tin bên
ngoài cơ sở dữ liệu.
- Sử dụng câu lệnh CREATE TABLE
- Có thể truy vấn dữ liệu bằng ngôn ngữ SQL
nhưng không thể sử dụng DML và không tạo
được các chỉ mục
8.4 Câu lệnh DML and DDL mở
rộng
Trang 39Chương 8 SQL nâng cao 8 - 39