Tải bản đầy đủ (.pdf) (39 trang)

bài giảng cơ sở dữ liệu quan hệ và sql chương 8 sql nâng cao - cđ cntt hữu nghị việt hàn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (776.55 KB, 39 trang )

Chương 8. SQL nâng cao
8 - 1
Chương 8 SQL NÂNG CAO
- Lý thuyết: 2 tiết
- Thực hành: 2 tiết
Chương 8. SQL nâng cao
8 - 2
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
SQL NÂNG CAO
Chươ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
Chươ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
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).
MINUS
Lấy phần giao giữa các kết quả của nhiều câu
truy vấn.
INTERSET
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.
UNION ALL
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
Diễn giảiTên phép toán
Chương 8. SQL nâng cao
8 - 5
- Phép toán UNION
Hợp nhiều câu truy vấn sau khi đã loại bỏ trùng lặp.

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 trong câu truy vấn.

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
Chương 8. SQL nâng cao
8 - 6
- Phép toán UNION
Ví dụ: Hiển thị lịch sử công việc của tất cả các nhân viên.
Mỗi nhân viên chỉ xuất hiện một lần. (Job_history)

SELECT Emp_id, Job_id
FROM Emp
UNION
SELECT Emp_id, Job_id
FROM Job_History
8.1 Phép toán SET
SELECT Empid, Jobid
FROM Job_History
SELECT Empid, Jobid
FROM Emp
Chươ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
Chươ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 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

8.1 Phép toán SET
Chương 8. SQL nâng cao
8 - 9
- Phép toán INTERSECT
Tr
ả về kết quả là phần chung giữa kết quả của hai
câu truy vấn thành phần.

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.

Giá trị NULL không được bỏ qua khi kiểm tra tính trùng
lặp
8.1 Phép toán SET
Chươ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_id
FROM emp
INTERSECT
SELECT Emp_id, Job_id
FROM job_history
8.1 Phép toán SET
Chươ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
Chươ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_id
FROM emp
MINUS
SELECT Emp_id
FROM job_history
8.1 Phép toán SET
Chươ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
Chương 8. SQL nâng cao
8 - 14
- Hàm CURRENT_DATE
Trả về ngày hiện tại trong phần thời gian khu vực
CURRENT_DATE
- Biểu thức EXTRACT
Trả về giá trị của trường ngày tháng từ một biểu
thức ngày tháng hay giá trị khoảng thời gian.
EXTRACT(expr)
8.2 Các hàm thời gian
Chươ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)
FROM emp
WHERE Manager_id = 100
8.2 Các hàm thời gian
Chươ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
Chương 8. SQL nâng cao
8 - 17
- Hàm TO_YMINTERVAL

Ví dụ: Lấy thông tin cột Hireday và Hireday cộng thêm 1 năm 2
tháng.
SELECT Hireday, Hireday + TO_YMINTERVAL('01-02')
AS HIRE_DATE_YMININTERVAL
FROM EMP
WHERE Dept_id = 20
8.2 Các hàm thời gian
Chươ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
Chương 8. SQL nâng cao
8 - 19
8.3.1 Toán tử ROLLUP và CUBE
- Toán tử ROLLUP
SELECT [column,] group_function(column). . .
FROM table
[WHERE condition]
[GROUP BY [ROLLUP] group_by_expression]
[HAVING having_expression]
[ORDER BY column]
8.3 Mệnh đề GROUP BY nâng cao
Chương 8. SQL nâng cao
8 - 20
8.3.1 Toán tử ROLLUP và CUBE
- Toán tử ROLLUP

Ví dụ: Tạo bảng tổng hợp lương mỗi nhóm công việc trong
một phòng ban và tất cả các phòng ban.
SELECT Deptid, Jobid, SUM(Salary)
FROM Emp
GROUP BY ROLLUP(Deptid, Jobid)
8.3 Mệnh đề GROUP BY nâng cao
Chương 8. SQL nâng cao
8 - 21
8.3.1 Toán tử ROLLUP và CUBE
- Toán tử CUBE
Đưa ra bảng giá trị tổng hợp dạng bảng báo cáo.
SELECT [column,] group_function(column). . .
FROM table
[WHERE condition]
[GROUP BY [CUBE] group_by_expression]
[HAVING having_expression];
[ORDER BY column]
8.3 Mệnh đề GROUP BY nâng cao
Chươ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
Chươ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]
[GROUP BY [ROLLUP][CUBE] groupbyexpr]
[HAVING having_expression]
[ORDER BY column]
8.3 Mệnh đề GROUP BY nâng cao
Chươ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 đa˜ đạ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
Chươ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) Gjob
FROM emp
GROUP BY ROLLUP(Deptid, Jobid)
8.3 Mệnh đề GROUP BY nâng cao

×