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

SLIDE GIẢNG DẠY CƠ SỞ DỮ LIỆU QUAN HỆ VÀ SQL CHƯƠNG 8 SQL NÂNG CAO

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 (1.49 MB, 39 trang )

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).

8-4
Chương 8. SQL nâng cao


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
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
FROM
INTERSECT
SELECT
FROM

Emp_id, Job_id
emp
Emp_id, Job_id

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('0102')
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]
Chương 8. SQL nâng cao
[ORDER BY column]

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


8.3 Mệnh đề GROUP BY nâng
cao
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]


Chương 8. SQL nâng cao

8 - 21


8.3 Mệnh đề GROUP BY nâng
cao
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)

Chương 8. SQL nâng cao

8 - 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 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]
Chương 8. SQL nâng cao

8 - 23


8.3 Mệnh đề GROUP BY nâng
cao
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.


Chương 8. SQL nâng cao


8 - 24


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 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ương 8. SQL nâng cao

8 - 25


×