Mô tả:
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-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 8. SQL nâng cao
8-2
8.1 Phép toán SET
- 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
Chương 8. 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 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).
Chương 8. 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 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.
Chương 8. SQL nâng cao
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 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
SELECT Empid, Jobid
FROM Emp
SELECT Empid, Jobid
FROM Job_History
Chương 8. 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ể 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.
Chương 8. 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 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
Chương 8. SQL nâng cao
8-8
8.1 Phép toán SET
- 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
Chương 8. SQL nâng cao
8-9
8.1 Phép toán SET
- 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
Chương 8. SQL nâng cao
8 - 10
8.1 Phép toán SET
- 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
Chương 8. SQL nâng cao
8 - 11
8.1 Phép toán SET
- 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
Chương 8. SQL nâng cao
8 - 12
8.1 Phép toán SET
- 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.
Chương 8. SQL nâng cao
8 - 13
8.2 Các hàm thời gian
- 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)
Chương 8. SQL nâng cao
8 - 14
8.2 Các hàm thời gian
- 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
Chương 8. SQL nâng cao
8 - 15
8.2 Các hàm thời gian
- 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)
Chương 8. SQL nâng cao
8 - 16
8.2 Các hàm thời gian
- 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
Chương 8. SQL nâng cao
8 - 17
8.3 Mệnh đề GROUP BY nâng cao
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)
Chương 8. SQL nâng cao
8 - 18
8.3 Mệnh đề GROUP BY nâng cao
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]
Chương 8. SQL nâng cao
8 - 19
8.3 Mệnh đề GROUP BY nâng cao
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)
Chương 8. SQL nâng cao
8 - 20
- Xem thêm -