Top Banner
Chươ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
39

SQL NÂNG CAO

Jan 02, 2016

Download

Documents

SQL NÂNG CAO. Lý thuyết: 2 tiết Thực hành: 2 tiết. 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. 8.1 Phép toán SET. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SQL NÂNG CAO

Chươ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

Page 2: SQL NÂNG CAO

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

Page 3: 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).

- Cac phép toan tâp hợp co cung thư tư ưu tiên

8.1 Phép toán SET

Page 4: SQL NÂNG CAO

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

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 co nhiều mâu tin trung nhau thi 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ả cac mâu tin trung nhau cũng được giữ lại.

INTERSET Lấy phần giao giữa cac kết quả của nhiều câu truy vấn.

MINUS Lấy kết quả co trong câu truy vấn thư nhất mà không co trong câu truy vấn thư hai (sau toan tử MINUS).

Page 5: SQL NÂNG CAO

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ỏ trung lặp.

Số lượng cac cột và kiêu dữ liệu phải giống nhau trong cac câu lệnh trong câu truy vấn.

Thưc hiện trên tất cả cac cột được chon.

Gia trị NULL không được bỏ qua khi kiêm tra tính trung lặp.

Toan tử IN co thư tư ưu tiên cao hơn phép toan 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

Page 6: SQL NÂNG CAO

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ả cac 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_idFROM EmpUNION SELECT Emp_id, Job_idFROM Job_History

8.1 Phép toán SET

SELECT Empid, JobidFROM Job_History

SELECT Empid, JobidFROM Emp

Page 7: SQL NÂNG CAO

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ư trung lặp. Không sắp xếp mặc định tăng dần như UNION.

Không thê dung từ khoa DISTINCT trong cac câu lệnh select thành phần.

8.1 Phép toán SET

Page 8: SQL NÂNG CAO

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ả cac nhân viên.

SELECT Emp_id, Job_id, Dept_idFROM EmpUNION ALLSELECT Emp_id, Job_id, Dept_idFROM Job_HistoryORDER BY Emp_id

8.1 Phép toán SET

Page 9: SQL NÂNG CAO

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 cac cột và kiêu dữ liệu phải giống nhau trong cac câu lệnh truy vấn.

Gia trị NULL không được bỏ qua khi kiêm tra tính trung lặp

8.1 Phép toán SET

Page 10: SQL NÂNG CAO

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 qua khư ho đã từng làm công việc giống như công việc hiện tại.

SELECT Emp_id, Job_idFROM empINTERSECTSELECT Emp_id, Job_idFROM job_history

8.1 Phép toán SET

Page 11: SQL NÂNG CAO

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 co trong câu truy vấn thư hai. Số lượng cac cột và kiêu dữ liệu phải giống nhau trong cac câu lệnh truy vấn.

Tất cả cac cột trong mệnh đề WHERE phải co trong mệnh đề SELECT

8.1 Phép toán SET

Page 12: SQL NÂNG CAO

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_idFROM empMINUSSELECT Emp_idFROM job_history

8.1 Phép toán SET

Page 13: SQL NÂNG CAO

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

Cac biêu thưc trong mệnh đề SELECT phải cung số lượng và kiêu dữ liệu.

Dung dấu ngoặc đơn đê thay đổi trinh tư (ưu tiên) thưc hiện.

Mệnh đề ORDER BY co thê xuất hiện chỉ cuối câu lệnh.

8.1 Phép toán SET

Page 14: SQL NÂNG CAO

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ề gia trị của trường ngày thang từ một biêu thưc ngày thang hay gia trị khoảng thời gian.

EXTRACT(expr)

8.2 Các hàm thời gian

Page 15: SQL NÂNG CAO

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

- Biểu thức EXTRACT Ví dụ: Lấy gia trị thang 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

Page 16: SQL NÂNG CAO

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 gia trị kiêu INTERVAL YEAR TO MONTH.

TO_YMINTERVAL(char)

8.2 Các hàm thời gian

Page 17: SQL NÂNG CAO

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

SELECT Hireday, Hireday + TO_YMINTERVAL('01-02') AS HIRE_DATE_YMININTERVAL

FROM EMPWHERE Dept_id = 20

8.2 Các hàm thời gian

Page 18: SQL NÂNG CAO

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 cac hàng được gộp theo nhom và những gia trị tổng hợp thành phần (Subtotal)

8.3 Mệnh đề GROUP BY nâng cao

Page 19: SQL 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

Page 20: SQL 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 nhom công việc trong một phong ban và tất cả cac phong ban.

SELECT Deptid, Jobid, SUM(Salary)FROM Emp GROUP BY ROLLUP(Deptid, Jobid)

8.3 Mệnh đề GROUP BY nâng cao

Page 21: SQL 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 gia trị tổng hợp dạng bảng bao cao.

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

Page 22: SQL 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 bao cao.

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

Page 23: SQL NÂNG CAO

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

8.3.2 Hàm GROUPING

- Xac đị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 gia 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 toan 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

Page 24: SQL NÂNG CAO

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

8.3.2 Hàm GROUPING

- Co thê được dung với toan tử CUBE hoặc ROLLUP

- Co thê tạo ra kết quả tổng hợp trong hàng.

- Trả về gia trị 0 hoặc 1giup cho chung ta hiêu được một gia trị tổng hợp đã đạt được như thế nào.

Gia trị 0 co nghia là biêu thưc được sử dụng đê tính gia trị tổng hợp và gia trị NULL là từ bảng cơ sơ.

Gia trị 1 co nghia là biêu thưc không được sử dụng đê tính gia trị tổng hợp và gia trị NULL là do toan tử ROLLUP hoặc CUBE tạo ra.

8.3 Mệnh đề GROUP BY nâng cao

Page 25: SQL 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 cac phong ban

SELECT Deptid, Jobid, Job, SUM(Salary), GROUPING(Deptid) Gdept, GROUPING(Jobid) GjobFROM empGROUP BY ROLLUP(Deptid, Jobid)

8.3 Mệnh đề GROUP BY nâng cao

Page 26: SQL NÂNG CAO

Chươ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 xac định nhiều nhom dữ liệu giup cho việc phân tích dữ liệu đa chiều dê dàng hơn.

- Co thê định nghia nhiều hàm GROUPING trong cung một câu truy vấn.

- Oracle Server tính tất cả cac hàm GROUPING chỉ định trong mệnh đề GROUPING SETS và kết hợp kết quả của cac hàm GROUPING riêng lẻ với phép toan UNION ALL

8.3 Mệnh đề GROUP BY nâng cao

Page 27: SQL NÂNG CAO

Chươ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

Page 28: SQL NÂNG CAO

Chươ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 nhom là (Deptid, Jobid) và (Jobid, Managerid).

SELECT Deptid, Jobid, Managerid, AVG(Salary)FROM EmpGROUP BY GROUPING SETS ((Depid, Joid),

(Jobid, Managerid))

8.3 Mệnh đề GROUP BY nâng cao

Page 29: SQL NÂNG CAO

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

8.3.3 Mệnh đề GROUPING SETS

Câu lệnh truy vấn trong ví dụ trên co thê được viết lại như 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

8.3 Mệnh đề GROUP BY nâng cao

Page 30: SQL NÂNG CAO

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

8.3.4 Cột ghép

- Là một tâp hợp cac cột, mỗi cột coi như một đơn vị.

- Nhom cac cột trong dấu ngoặc đơn đê Oracle server xem cac cột đo như một đơn vị trong qua trinh tính toan với toan tử ROLLUP hay CUBE.

Ví dụ ROLLUP (a, (b,c) , d); (b,c) là một cột ghép.

8.3 Mệnh đề GROUP BY nâng cao

Page 31: SQL NÂNG CAO

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

8.3.4 Cột ghép

Ví dụ Tạo bảng tổng hợp lương theo từng phong ban, công việc và người quản lý.

SELECT Deptid, Jobid, Managerid, SUM(Salary)FROM EmpGROUP BY ROLLUP( Deptid, (Jobid, Managerid))

8.3 Mệnh đề GROUP BY nâng cao

Page 32: SQL NÂNG CAO

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

8.4.1 Câu lệnh chen nhiều bảng

- Chen 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 cac 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

Page 33: SQL NÂNG CAO

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

8.4.1 Câu lệnh chen 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

Page 34: SQL NÂNG CAO

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

8.4.1 Câu lệnh chen nhiều bảng

- Chen 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

Page 35: SQL NÂNG CAO

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

8.4.1 Câu lệnh chen nhiều bảng

- Chen co đ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

8.4 Câu lệnh DML and DDL mở rộng

Page 36: SQL NÂNG CAO

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

8.4.1 Câu lệnh chen nhiều bảng

- Chen co điều kiện (FIRST)INSERT FIRST WHEN Sal>25000 THENINTO Special_Sal VALUES(DepId, Sal)WHEN Date LIKE (‘%00%’) THENINTO Date_His_00 VALUES(DeptId, Date)WHEN Date LIKE (‘%99%’) THENINTO Date_His_99 VALUES(DeptId, Date)SELECT DeptId, Hireday Date, Salary Sal,

ManagerId MgrFROM EmpGROUP BY Deptid

8.4 Câu lệnh DML and DDL mở rộng

Page 37: SQL NÂNG CAO

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

8.4.1 Câu lệnh chen nhiều bảng

- Chen co điều kiện (FIRST)INSERT FIRST WHEN Sal>25000 THENINTO Special_Sal VALUES(DepId, Sal)WHEN Date LIKE (‘%00%’) THENINTO Date_His_00 VALUES(DeptId, Date)WHEN Date LIKE (‘%99%’) THENINTO Date_His_99 VALUES(DeptId, Date)ELSE INTO Date_His VALUES(DeptId, Date) SELECT DeptId, Hireday Date, Salary Sal,

ManagerId MgrFROM Emp

8.4 Câu lệnh DML and DDL mở rộng

Page 38: SQL NÂNG CAO

Chươ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 đoc

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

- Co 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 cac chỉ mục.

8.4 Câu lệnh DML and DDL mở rộng

Page 39: SQL NÂNG CAO

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