Chuong 4 - Ngon Ngu SQL

You might also like

Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 54

CHƯƠNG 4: NGÔN

NGỮ SQL
Lê Thị Minh Châu
chaultm@fit.hcmute.edu.vn
2

Nội dung
• Giới thiệu
• Ngôn ngữ định nghĩa dữ liệu.
• Ngôn ngữ thao tác dữ liệu.
• Ngôn ngữ điều khiển dữ liệu.
3

Nội dung
• Giới thiệu
• Ngôn ngữ định nghĩa dữ liệu.
• Ngôn ngữ thao tác dữ liệu.
• Ngôn ngữ điều khiển dữ liệu.
4

Giới thiệu
• SQL (Structured Query Language) là một ngôn ngữ
chuẩn được dùng để tạo lập và truy vấn các cơ sở dữ liệu
quan hệ.
• SQL là một ngôn ngữ chuẩn cho các hệ quản trị CSDL
quan hệ (Relational DBMS – RDBMS).
5

Giới thiệu
• SQL là ngôn ngữ phi thủ tục (nonprocedural language).
• Chỉ ra các thông tin gì cần thiết (what).
• Không cần phải chỉ ra cách thực hiện như thế nào (how) để có
được các thông tin này.
• Nhiều người có thể sử dụng SQL: người quản trị CSDL
(DBA), người lập trình ứng dụng, người quản lý, người sử
dụng cuối cùng (end user).
6

Giới thiệu
• SQL cung cấp nhiều lệnh cho nhiều công việc khác nhau:
• Truy vấn dữ liệu.
• Thêm vào, cập nhật và xóa bỏ các hàng của bảng.
• Tạo lập, thay đổi và xóa bỏ các đối tượng CSDL.
• Điều khiển truy xuất CSDL và các đối tượng CSDL.
• Bảo đảm tính nhất quán của CSDL.
7

Giới thiệu
• Ngôn ngữ định nghĩa dữ liệu (Data Definition Language –
DDL)
• Các lệnh dùng để định nghĩa CSDL: tạo lập (CREATE), thay đổi
(ALTER) và hủy bỏ (DROP) các đối tượng dữ liệu, thiết lập các
ràng buộc.
8

Giới thiệu
• Ngôn ngữ thao tác dữ liệu (Data Manipulation Language -
DML)
• Các lệnh dùng để bảo trì và truy vấn CSDL: thêm (INSERT), sửa
(UPDATE), xóa (DELETE), truy vấn (SELECT) dữ liệu của bảng.
• Các lệnh này có thể được đưa vào trực tiếp (chế độ tương tác) và
kết quả được trả về ngay sau khi thực hiện lệnh này, hoặc có thể
đưa vào trong các chương trình.
9

Giới thiệu
• Ngôn ngữ điều khiển dữ liệu (Data Control Language –
DCL)
• Các lệnh dùng để hỗ trợ cho DBA để điều khiển CSDL: gán
(GRANT) và hủy bỏ (REVOKE) các quyền (privilege) truy xuất
CSDL và các đối tượng riêng biệt trong CSDL và lưu trữ hoặc hủy
bỏ các giao dịch (transaction) ảnh hưởng đến CSDL.
10

Nội dung
• Giới thiệu
• Ngôn ngữ định nghĩa dữ liệu.
• Ngôn ngữ thao tác dữ liệu.
• Ngôn ngữ điều khiển dữ liệu.
11

Ngôn ngữ định nghĩa dữ liệu


• Lệnh CREATE TABLE dùng để tạo cấu trúc của một
bảng.
CREATE TABLE <table name>
(<column_definition>, …
[table_constraint_definition]);
12

Ngôn ngữ định nghĩa dữ liệu

Định nghĩa các cột và kiểu dữ liệu của các cột.

Non-nullable
specification

Primary keys can never


have NULL values
Xác định khóa chính.
13

Ngôn ngữ định nghĩa dữ liệu


• Lệnh DROP TABLE dùng để hủy bỏ một bảng.
DROP TABLE <table name> [CASCADE CONSTRAINTS];
VD: Hủy bỏ bảng Customer
DROP TABLE Customer;
14

Nội dung
• Giới thiệu
• Ngôn ngữ định nghĩa dữ liệu.
• Ngôn ngữ thao tác dữ liệu.
• Ngôn ngữ điều khiển dữ liệu.
15

Ngôn ngữ thao tác dữ liệu


• Lệnh SELECT dùng để truy vấn dữ liệu của một bảng
hoặc nhiều bảng.
• Lệnh SELECT thực hiện các phép toán của đại số quan
hệ:
• Phép tích
• Phép kết
• Phép chọn
• Phép chiếu
16

Ngôn ngữ thao tác dữ liệu


• Cú pháp của lệnh SELECT
SELECT [DISTINCT] <list of expressions>
FROM <list of tables>
[WHERE <row conditions>]
[GROUP BY <list of expressions>]
[HAVING <group conditions>]
[ORDER BY <list of expressions>];
17

Ngôn ngữ thao tác dữ liệu


• Các mệnh đề của lệnh SELECT
• SELECT: liệt kê các cột (các biểu thức) của kết quả.
• FROM: các bảng hoặc các khung nhìn chứa dữ liệu cần thiết cho
truy vấn.
• WHERE: điều kiện xử lý các hàng để tạo ra kết quả.
• GROUP BY: gom nhóm các hàng.
• HAVING: điều kiện xử lý các nhóm.
• ORDER BY: sắp thứ tự kết quả.
18

Ngôn ngữ thao tác dữ liệu

Thứ tự xử lý các mệnh đề


của lệnh SELECT.
19

Mệnh đề SELECT
• SELECT [DISTINCT] <list of expressions>
• Thực hiện phép chiếu của đại số quan hệ.
• <list of expressions> là danh sách các biểu thức dùng để tạo ra kết
quả, các biểu thức này được phân cách nhau bởi dấu phẩy.
• Biểu thức có thể là một hằng, một biến (hoặc cột), hoặc sự kết hợp giữa
các hằng, các biến với các phép toán (hàm).
• Mỗi biểu thức có thể có một bí danh (alias) đứng ngay phía sau, được
gọi là bí danh cột (column alias).
• Có thể dùng hoặc không dùng từ khóa AS.
• Bí danh có chứa các ký tự trống, các ký tự đặc biệt (VD: #, $) thì bí danh này
phải được ghi trong hai dấu nháy kép “”.
• Bí danh cột có thể được sử dụng trong mệnh đề SELECT và mệnh đề
ORDER BY nhưng không được sử dụng trong mệnh đề WHERE.
20

Mệnh đề SELECT
• Nếu <list of expressions> là dấu * thì tất cả các cột được
đưa vào kết quả.
• Cột có thể có dạng table_name.column_name.
• Từ khóa DISTINCT dùng để đảm bảo các hàng trong kết
quả của truy vấn là khác nhau.
• Nếu có nhiều cột được chọn thì DISTINCT ảnh hưởng đến toàn bộ
các cột này.
• DISTINCT phải được đặt ngay sau từ khóa SELECT.
21

Mệnh đề FROM
• FROM <list of tables>
• Thực hiện phép tích của đại số quan hệ, dùng để chỉ ra
các bảng dữ liệu cần lấy ra.
• <list of tables> là danh sách các bảng được phân cách
nhau bởi dấu phẩy.
• Mỗi bảng có thể có bí danh bảng đứng ngay phía sau tên
bảng được phân cách bởi ký tự trống hoặc từ khóa AS;
khi đó, chỉ sử dụng bí danh bảng và không được sử dụng
tên bảng.
22

Ngôn ngữ thao tác dữ liệu


SELECT *
FROM SINHVIEN;

SELECT MaSV, HoTen, MaLop


FROM SINHVIEN

SELECT DISTINCT HoTen


FROM SINHVIEN

SELECT MaSV, HoTen, MaLop As Lop


FROM SINHVIEN
23

Mệnh đề WHERE
• WHERE <row conditions>
• Thực hiện các phép chọn, phép kết của đại số quan hệ.
• <row conditions> là các điều kiện được xét trên mỗi hàng,
các hàng nào thỏa mãn các điều kiện này thì được đưa
vào kết quả của truy vấn.
• Để mệnh đề SELECT có ngữ nghĩa, nếu mệnh đề FROM
có n bảng thì mệnh đề WHERE phải có n-1 điều kiện kết.
24

Các phép toán so sánh


•= Bằng
• < Nhỏ hơn
• <= Nhỏ hơn hoặc bằng
• > Lớn hơn
• >= Lớn hơn hoặc bằng
• <> Không bằng
• != Không bằng
• BETWEEN … AND … Giữa hai giá trị
• IN (list) Một trong các giá trị của danh sách
• LIKE string Giống khuôn mẫu
• IS NULL Là giá trị rỗng
25

Các phép toán phủ định


• NOT BETWEEN … AND …
• NOT IN (list)
• NOT LIKE string
• IS NOT NULL
26

Ngôn ngữ thao tác dữ liệu


SELECT MaSV, HoTen
FROM SinhVien
WHERE MaLop = ‘L1’;

SELECT MaSV, HoTen As SV, TenSV


FROM SinhVien SV
WHERE MaLop = ‘L1’;

SELECT MaSV, HoTen


FROM SinhVien
WHERE Tuoi BETWEEN 18 AND 20;

SELECT MaSV, HoTen


FROM SinhVien
WHERE MaLop IN (‘L1’, ‘L2’);
27

Ngôn ngữ thao tác dữ liệu


SELECT MaSV, HoTen, Tuoi
FROM SinhVien
WHERE (HoTen LIKE ‘%Truc’
OR HoTen LIKE ‘_r%’)
AND Tuoi > 20;

SELECT MaSV, HoTen


FROM SinhVien
WHERE MaLop IS NULL;

SELECT Count(*)
FROM SinhVien
WHERE MaLop = ‘L1’;
28

Mệnh đề GROUP BY
• GROUP BY <list of expressions>
• Dùng để phân chia các hàng của một bảng thành các
nhóm nhỏ hơn.
• Các hàm nhóm có thể được sử dụng để trả về thông tin
chung cho mỗi nhóm.
• Mỗi nhóm chỉ xuất hiện ở một hàng trong kết quả của truy
vấn.
• Trong trường hợp lệnh SELECT có cả hai mệnh đề
WHERE và GROUPBY thì các hàng sẽ được chọn bởi
điều kiện của mệnh đề WHERE, rồi sau đó phân chia các
hàng được chọn thành các nhóm.
29

Ngôn ngữ thao tác dữ liệu


• Các cột trong mệnh đề GROUP BY không bắt buộc phải
có trong mệnh đề SELECT. Để cho kết quả của truy vấn
có ngữ nghĩa thì các cột của mệnh đề GROUP BY nên có
trong mệnh đề SELECT.
• Khi có mệnh đề GROUP BY, tất cả các cột có trong mệnh
đề SELECT phải có trong mệnh đề GROUP BY, ngoại trừ
chúng ở trong hàm nhóm.
• Nếu lệnh SELECT không có mệnh đề GROUP BY thì toàn
bộ bảng được xem là một nhóm. Nếu mệnh đề SELECT
có chứa hàm nhóm thì không thể lấy được chi tiết của
mỗi hàng của nhóm.
30

Ngôn ngữ thao tác dữ liệu


SELECT MaLop, COUNT (MaSV)
FROM SinhVien
GROUP BY MaLop;

SELECT MaLop, COUNT (MaSV)


FROM SinhVien
WHERE Tuoi < 20
GROUP BY MaLop;
31

Mệnh đề HAVING
• HAVING <group conditions>
• Dùng để xác định các nhóm được đưa vào kết quả của
truy vấn.
• <group conditions> là các điều kiện được xét cho mỗi
nhóm.
• Mệnh đề HAVING có thể đứng trước mệnh đề GROUP
BY, nhưng mệnh đề GROUP BY nên đứng trước để cho
dễ hiểu.
• Tất cả các cột có trong mệnh đề HAVING phải có trong
mệnh đề GROUP BY, ngoại trừ chúng ở trong hàm nhóm.
32

Ngôn ngữ thao tác dữ liệu


• Các nhóm được tạo ra và các hàm nhóm được tính toán
trước khi thực hiện mệnh đề HAVING để chọn ra các
nhóm.
• Mệnh đề WHERE không được dùng để chọn ra các
nhóm.
• Nếu lệnh SELECT có các mệnh đề WHERE, GROUP BY
và HAVING thì thứ tự thực hiện của các mệnh đề này là
WHERE (để chọn các hàng), kế tiếp GROUP BY (để phân
chia nhóm) và sau cùng là HAVING (để chọn các nhóm).
33

Ngôn ngữ thao tác dữ liệu


SELECT MaLop, COUNT (MASV)
FROM SinhVien
GROUP BY MaLop
HAVING COUNT (MaSV) > 30;

SELECT MaLop, COUNT(MaSV)


FROM SinhVien
WHERE Tuoi < 20
GROUP BY MaLop
HAVING COUNT (MaSV) > 30;
34

Mệnh đề ORDER BY
• ORDER BY <list of expressions>
• Thông thường, thứ tự của các hàng được trả về trong kết
quả của truy vấn là không xác định. Mệnh đề ORDER BY
có thể được dùng để sắp thứ tự các hàng này.
• Mệnh đề ORDER BY luôn luôn là mệnh đề cuối cùng của
lệnh SELECT.
• thứ tự ngầm định là tăng dần (ASC - Ascending), từ khóa
DESC (Descending) đứng ngay sau tên cột dùng để chỉ
định thứ tự giảm dần.
• Các cột trong mệnh đề ORDER BY không bắt buộc phải
có trong mệnh đề SELECT.
35

Ngôn ngữ thao tác dữ liệu


SELECT MaLop, COUNT (MaSV)
FROM SinhVien
WHERE Tuoi < 20
GROUP BY MaLop
HAVING COUNT (MaSV) > 30
ORDER BY MaLop DESC;
36

Hàm nhóm
• Hàm kết hợp (Aggregate Function) còn được gọi là hàm
nhóm (Group Fucntion).
• AVG ([DISTINCT | ALL] n)
• Giá trị trung bình của n, bỏ qua các giá trị rỗng.
• COUNT ([DISTINCT | ALL] expr *)
• Số hàng mà expr có giá trị khác rỗng.
• * làm cho COUNT đếm tất cả các hàng được chọn, bao gồm
các hàng trùng nhau và các hàng có giá trị rỗng.
• MAX ([DISTINCT | ALL] expr)
• giá trị lớn nhất của expr
37

Ngôn ngữ thao tác dữ liệu


• MIN ([DISTINCT | ALL] expr)
• giá trị nhỏ nhất của expr.
• SUM ([DISTINCT | ALL] n)
• Tổng các giá trị của n, bỏ qua các giá trị rỗng.
• STDDEV ([DISTINCT | ALL] n)
• Độ lệch chuẩn của n, bỏ qua các giá trị rỗng.
• VARIANCE ([DISTINCT | ALL] n)
• Phương sai của n, bỏ qua các giá trị rỗng.
38

Ngôn ngữ thao tác dữ liệu


• Sử dụng các hàm kết hợp
• Kết hợp đơn: truy vấn trả về một giá trị của hàm kết hợp.
• Kết hợp vectơ: truy vấn trả về nhiều giá trị của hàm kết hợp
(dùng GROUP BY).

SELECT MAX(Tuoi), MIN(Tuoi)


FROM SinhVien;

SELECT MaLop, COUNT (MaLop)


FROM SinhVien
GROUP BY MaLop;
39

Thứ tự thực hiện của các phép toán


• Các phép toán có cùng độ ưu tiên sẽ được thực hiện từ
trái qua phải.
• Biểu thức con trong dấu ngoặc.
• Các phép toán số học *, /
• Các phép toán số học +, -
• Các phép toán so sánh và các phép toán SQL: =, !=, <, <=,
>, >=, BETWEEN ... AND ..., IN, LIKE, IS NULL
• NOT
• AND
• OR
40

Ngôn ngữ thao tác dữ liệu


• Hai lệnh SELECT có thể được kết nối với nhau bằng các
phép toán tập hợp bao gồm: Phép hợp (UNION), phép
giao (INTERSECTION) và phép hiệu (MINUS).

SELECT statement_1
UNION [ALL] | INTERSECT | MINUS
SELECT statement_2;
41

Ngôn ngữ thao tác dữ liệu


• UNION thực hiện phép hợp kết quả của hai truy vấn.
• INTERSECT thực hiện phép giao kết quả của hai truy
vấn.
• MINUS thực hiện phép hiệu kết quả của hai truy vấn.
• ALL cho phép các hàng trong kết quả có thể trùng nhau.
42

Ngôn ngữ thao tác dữ liệu


SELECT MaSV
FROM SinhVien
WHERE MaLop NOT IN (‘L1’, ‘L2’);

SELECT MaSV
FROM SinhVien
MINUS
SELECT MaSV
FROM SinhVien
WHERE MaLop IN (‘L1’, ‘L2’);
43

Ngôn ngữ thao tác dữ liệu


• Hàm NVL (Null Value) dùng để đổi giá trị rỗng thành một
giá trị khác rỗng.
• NVL có hai tham số: một biểu thức và một giá trị khác
rỗng.
• Nếu giá trị của các cột trong một biểu thức là null thì giá
trị của biểu thức này là null.
SELECT MaSV, NVL(MaLop, ‘Chua co lop’)
FROM SinhVien
WHERE MaLop IS NULL;
44

Ngôn ngữ thao tác dữ liệu


• Truy vấn con (Sub Query) là một truy vấn (lệnh SELECT)
nằm trong một truy vấn khác.
• Truy vấn ngoài (outer query)
• Truy vấn trong (inner query)
• Truy vấn chính (main query)
• Xuất hiện
• Trong điều kiện của mệnh đề WHERE.
• Như là một bảng trong mệnh đề FROM.
• Trong điều kiện của mệnh đề HAVING.
45

Ngôn ngữ thao tác dữ liệu


• Truy vấn con lồng nhau (nested subquery)
• Không phụ thuộc vào dữ liệu của truy vấn ngoài.
• Được thực hiện duy nhất một lần trước khi thực hiện truy
vấn ngoài.
• Kết quả của truy vấn con được dùng để thực hiện truy vấn
ngoài.
• Truy vấn con tương quan (correlated subquery)
• Sử dụng dữ liệu của truy vấn ngoài.
• Đối với mỗi hàng của truy vấn ngoài, dữ liệu của hàng này
được thực hiện truy vấn con, kết quả của truy vấn con được
dùng để thực hiện truy vấn ngoài.
• Có thể sử dụng phép toán EXISTS.
46

Ngôn ngữ thao tác dữ liệu


SELECT MaSV, HoTen
FROM SinhVien, Lop
WHERE SinhVien.MaLop = Lop.MaLop And TenLop = ‘MT01’;

SELECT MaSV, HoTen


FROM SinhVien
WHERE MaLop IN (SELECT MaLop
FROM Lop
WHERE TenLop = ‘MT01’);

SELECT MaSV, HoTen


FROM SinhVien SV
WHERE Tuoi = (SELECT MAX(Tuoi)
FROM SinhVien
WHERE MaLop = SV.MaLop);
47

Ngôn ngữ thao tác dữ liệu


• Lệnh INSERT thêm dữ liệu vào một bảng
• Thêm một hàng:
• INSERT INTO <table name> [(<list of columns>)]
• VALUES (<list of expressions>);
• Thêm nhiều hàng:
• INSERT INTO <table name> [(<list of columns>)]
• SELECT statement;
48

Ngôn ngữ thao tác dữ liệu


INSERT INTO Customer_T
VALUES (001, ‘Contemporary Casuals’,
‘1355 S. Himes Blvd.’, ‘Gainesville’, ‘FL’, 32601);

INSERT INTO Product_T (Product_ID,


Product_Description, Product_Finish, Standard_Price,
Product_On_Hand)
VALUES (1, ‘End Table’, ‘Cherry’, 175, 8);

INSERT INTO CA_Customer_T


SELECT *
FROM Customer_T
WHERE State = ‘CA’;
49

Ngôn ngữ thao tác dữ liệu


• Lệnh DELETE Xóa bỏ các hàng của một bảng
DELETE [FROM] <table name>
[WHERE <row conditions>];
• Xóa một số hàng của bảng Customer_T
DELETE FROM Customer_T
WHERE State = ‘HI’;
• Xóa tất cả các hàng của bảng Customer_T
DELETE FROM Customer_T ;
50

Ngôn ngữ thao tác dữ liệu


• Lệnh UPDATE Cập nhật dữ liệu của các hàng của một
bảng
UPDATE <table name> [<alias>]
SET <column1> = {<expression>, <subquery>}
[, <column2> = {<expression>, <subquery>} …]
[WHERE <row conditions>];
• Cập nhật một số hàng của bảng Product_T
UPDATE Product_T
SET Unit_Price = 775
WHERE Product_ID = 7;
51

Các phép toán khác


• ALL (SubQuery)
• Trả về TRUE nếu biểu thức so sánh thỏa mãn đối với tất cả các
giá trị được truy vấn con trả về.
• Trả về TRUE nếu truy vấn con trả về kết quả rỗng.

VD:SELECT EMPLOYEE_ID, EMPLOYEE_NAME


FROM EMPLOYEE
WHERE SALARY >= ALL ( SELECT SALARY
FROM EMPLOYEE);

• ALL được sử dụng chung với các phép toán quan hệ


khác và được xem giống như phép toán AND.
52

Các phép toán khác


• ANY (SubQuery) hoặc SOME (SubQuery)
• Trả về FALSE nếu truy vấn con trả về kết quả rỗng.
• Trả về TRUE nếu biểu thức so sánh thỏa mãn đối với ít nhất một
giá trị được truy vấn con trả về.

VD: SELECT EMPLOYEE_ID, EMPLOYEE_NAME


FROM EMPLOYEE
WHERE SALARY > ANY ( SELECT SALARY
FROM EMPLOYEE);

• ANY được sử dụng chung với các phép toán quan hệ


khác và được xem giống như phép toán OR.
53

Các phép toán khác


• EXISTS và NOT EXISTS
• Được sử dụng trong các điều kiện chọn của mệnh đề WHERE.
• Chỉ được sử dụng cho các truy vấn con.
• Kết quả trả về là TRUE hoặc FALSE.

[NOT]EXISTS (SubQuery)
VD:
SELECT CUSTOMER_ID, CUSTOMER_NAME
FROM CUSTOMER
WHERE EXISTS (SELECT *
FROM T_ORDER
WHERE CUSTOMER.CUSTOMER_ID =
T_ORDER.CUSTOMER_ID);
54

You might also like