Ơ Ở Ữ Ệ
ươ
Môn C S D LI U Ngôn ng ữ Ch ng 3: ấ truy v n SQL
ộ
N i dung
ớ
ệ
1. Gi
i thi u SQL
ườ
2. Môi tr
ng SQL
ể ị 3. Dùng DDL đ đ nh nghĩa CSDL
ể 4. Dùng DML đ thao tác trên CSDL
(cid:0)
(cid:0)
(cid:0)
INSERT DELETE UPDATE SELECT
ế ữ ệ
ề
ả
1. Các phép k t d li u trên nhi u b ng
2.
ấ
Subquery – truy v n con
2
(cid:0)
1. SQL là gì?
Structured Query Language – Ngôn ng truy v n
ữ ấ
ấ có c u trúc
ữ ẩ
Ngôn ng chu n cho các RDBMS (relational ị database management systems h qu n tr CSDL quan h )ệ
ệ ả
ẩ ị ệ ị ủ
ị
Chu n SQL92: (cid:0) Đ nh nghĩa c u trúc/ng nghĩa c a vi c đ nh ấ ữ ữ ệ nghĩa/thao tác trên d li u (cid:0) Đ nh nghĩa c u trúc d li u ữ ệ ấ (cid:0) Hai chu n: level 1 (minimal) và level 2
ẩ
(complete)
(cid:0) Kh năng m r ng
3
ở ộ ả
ườ
2. Môi tr
ng SQL
ả
ử
ồ
ả
Data Definition Language ệ (DDL): Các l nh mô t ạ CSDL, g m t o, s a, xoá ộ các b ng và ràng bu c
Data Manipulation
Language (DML): Các ấ ệ l nh thao tác truy v n ữ ệ d li u
4
Data Control Language ề ệ (DCL): Các l nh đi u ể ệ khi n CSDL, g m vi c ạ ủ ề ả qu n lý quy n h n c a user
ồ
ể ị 3. Dùng DDL đ đ nh nghĩa CSDL
Data Definition Language (DDL)
ả ạ ệ
ử ả ệ
L nh t o b ng: CREATE TABLE L nh s a b ng: ALTER TABLE L nh xóa b ng: DROP TABLE
5
ệ ả
ể ị
3. Dùng DDL đ đ nh nghĩa CSDL (tt)
Các b
ướ ạ ả : c t o b ng
1. Ki u d li u cho các
ể ữ ệ ộ thu c tính
ượ
c/không
ộ 2. C t nào đ ượ
đ
c phép null
ộ 3. Các c t giá tr duy ể
ị ự
ấ
nh t (khoá d tuy n)
4. Khoá chính – khóa
ngo iạ
ị ặ ị
5. Giá tr m c đ nh
ề
ộ
ị
6. Ràng bu c mi n tr
ạ
ả
ỉ ụ 7. T o b ng và ch m c 6
ệ Cú pháp l nh CREATE TABLE
ể ị
3. Dùng DDL đ đ nh nghĩa CSDL (tt)
ể
ổ
L nh ALTER TABLE dùng đ thay đ i các
ả ủ ả
c a b ng
ệ mô t (cid:0) ALTER TABLE CUSTOMER_T ADD (TYPE
VARCHAR(2))
ể
ả
L nh DROP TABLE dùng đ xoá b ng kh i ỏ
ệ CSDL (cid:0) DROP TABLE CUSTOMER_T
7
ệ 4. DML L nh INSERT
ữ ệ
ả
ả
Thêm d li u (b n ghi, hàng) vào b ng
ữ ệ
ấ ả
ả
ộ
INSERT
Thêm d li u vào t
t c các c t trong b ng:
INTO CUSTOMER_T VALUES (001, ‘CONTEMPORARY Casuals’, 1355 S. Himes Blvd.’, ‘Gainesville’, ‘FL’, 32601);
ỉ
Thêm d li u vào các c t đ
c ch đ nh rõ trong b ng, các
ả INSERT
ữ ệ ạ
ộ ượ ị ặ ị
ị ặ
ậ
i nh n giá tr m c đ nh ho c NULL:
ộ c t còn l 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
ữ ệ ừ ả
Thêm d li u t
b ng khác:
SELECT * FROM CUSTOMER_T WHERE STATE = ‘CA’;
8
ệ
ệ
4. DML L nh DELETE L nh UPDATE
L nh Delete: Xoá d li u (b n ghi, hàng) trong ữ ệ
ả
ệ b ngả
Xoá các hàng theo đi u ki n:
ề ệ DELETE FROM
CUSTOMER_T WHERE STATE = ‘HI’;
Xoá t
ả DELETE FROM t c các hàng trong b ng:
ấ ả CUSTOMER_T;
L nh Update: S a d li u (b n ghi, hàng) trong UPDATE PRODUCT_T SET UNIT_PRICE = 775
ử ữ ệ ả
9
ệ ả b ng: WHERE PRODUCT_ID = 7;
ệ 4. DML L nh SELECT
Truy v n (xem) d li u trong các b ng, view
ữ ệ ả ấ
Các m nh đ c a l nh SELECT: ề ủ ệ
ệ
SELECT: Danh sách các c t k t qu c a l nh truy
ả ủ ệ ộ ế
v nấ
ặ ể ấ ữ ả FROM: Danh sách các b ng ho c view đ l y d
li uệ
WHERE: Đi u ki n l a ch n các hàng trong b ng
ệ ự ề ả ọ
ữ ệ ạ GROUP BY: Nhóm các hàng d li u theo lo i
HAVING: Đi u ki n cho các nhóm đ l a ch n
10
ể ự ệ ọ
ả ề nhóm k t quế
ORDER BY: S p x p d li u thu đ
ế ữ ệ ắ ượ c
Thứ tự xử lý các mệnh đề trong lệnh SELECT
11
4. DML Ví dụ
ữ
ả
ẩ
Tìm nh ng s n ph m có giá < $275
SELECT PRODUCT_NAME, STANDARD_PRICE
FROM PRODUCT_V
12
WHERE STANDARD_PRICE < 275
ệ
4. DML L nh SELECT dùng ALIAS, hàm
ặ ộ ế ả ộ
Alias là tên thay th cho b ng ho c c t, khi đó c t CUST.CUSTOMER
ả ấ
ế k t qu l y tên alias: SELECT AS NAME, CUST.CUSTOMER_ADDRESS
FROM CUSTOMER_V CUST WHERE NAME = ‘Nguyen Van A’;
Dùng hàm t p h p COUNT đ tìm t ng s các hoá ơ
ể ậ ợ ổ ố
ả ơ đ n có trong b ng hoá đ n
SELECT COUNT(*) FROM ORDER_LINE_V
13
WHERE ORDER_ID = 1004
ệ
ử ậ
4.(tt)L nh SELECT dùng toán t
lu n lý
Các toán t
ử AND, OR và NOT dùng trong m nh ệ
SELECT PRODUCT_DESCRIPTION,
PRODUCT_FINISH, STANDARD_PRICE
FROM PRODUCT_V
WHERE (PRODUCT_DESCRIPTION LIKE ‘%Desk’
OR PRODUCT_DESCRIPTION LIKE ‘%Table’)
AND UNIT_PRICE > 300;
ề đ WHERE
ỗ ấ % trong chu i ỗ
14
ể ỉ ọ LIKE dùng đ so sánh chu i. D u ằ ỗ ế ‘%Desk’ ch m i chu i k t thúc b ng “Desk”
ệ
4. (tt) L nh SELECT dùng ORDER BY
ắ
ế
ả
ầ
S p x p k t qu theo th t ế
STATE tăng d n, cùng
ắ
ầ
ứ ự state thì s p theo CUSTOMER_NAME tăng d n. Dùng ừ t
khóa ASC, DESC
SELECT CUSTOMER_NAME, CITY, STATE
FROM CUSTOMER_V
WHERE STATE IN (‘FL’, ‘TX’, ‘CA’, ‘HI’)
ORDER BY STATE, CUSTOMER_NAME;
ự ọ ị
15
ặ IN l a ch n các hàng có giá tr STATE là FL, TX, CA, ho c HI. T t h n ố ơ OR
ệ
4. (tt) L nh SELECT dùng GROUP BY
ậ
ớ
Dùng v i các hàm t p h p ợ
SELECT STATE, COUNT(STATE) FROM CUSTOMER_V GROUP BY STATE;
ộ ơ ậ ả
16
ố ư ộ ợ ị ớ Mu n dùng c t đ n tr v i hàm t p h p thì ph i ề ệ đ a c t này vào m nh đ GROUP BY
ệ
4. (tt) L nh SELECT dùng HAVING
Ch dùng v i GROUP BY, làm đi u ki n l a ch n
ệ ự ề ọ ớ ỉ
các nhóm hàng
SELECT STATE, COUNT(STATE) FROM CUSTOMER_V GROUP BY STATE HAVING COUNT(STATE) > 1;
ọ ữ ơ
ự ố ề ư ề
17
ạ ộ ẽ ả ừ ệ ứ L a ch n nh ng nhóm có nhi u h n 1 hàng. Gi ng m nh đ WHERE nh ng ho t đ ng trên nhóm ch không ph i t ng hàng riêng r
ế
ề
ả
5. Phép k t nhi u b ng
Cho bi ố có s 1006
ế
ữ ệ ả Phép k t 4 b ng d li u
SELECT CUSTOMER_T.CUSTOMER_ID, CUSTOMER_NAME, CUSTOMER_ADDRESS, CITY, SATE, POSTAL_CODE, ORDER_T.ORDER_ID, ORDER_DATE, QUANTITY, PRODUCT_NAME, UNIT_PRICE, (QUANTITY * UNIT_PRICE)
FROM CUSTOMER_T, ORDER_T, ORDER_LINE_T, PRODUCT_T
WHERE CUSTOMER_T.CUSTOMER_ID = ORDER_LINE.CUSTOMER_ID AND ORDER_T.ORDER_ID = ORDER_LINE_T.ORDER_ID AND ORDER_LINE_T.PRODUCT_ID = PRODUCT_PRODUCT_ID AND ORDER_T.ORDER_ID = 1006;
ả
ề
ệ
ộ
ỗ ặ ằ
ữ
ề
ạ
ầ M i c p b ng c n m t đi u ki n so sánh b ng gi a khoá chính và khoá ệ ngo i trong m nh đ WHERE
18
ế ầ ọ ế ể ấ ơ t m i thông tin c n thi t đ xu t hoá đ n
ấ
6. Subquery – Truy v n con
ấ
ặ
ộ
ộ
Subquery = đ t m t câu truy v n (SELECT) bên trong m t
ấ
câu truy v n khác
Đ t
ề
ệ ủ ề ề
ề ệ ệ
:ặ ở (cid:0) Trong đi u ki n c a m nh đ WHERE ệ (cid:0) Trong m nh đ FROM (cid:0) Trong m nh đ HAVING
Hai lo i subquery: ạ
ỉ ự
ộ ầ
ụ
ộ
ữ ệ ừ
vào d li u t
(cid:0) Non correlated – ch th c thi m t l n, không ph thu c ấ câu truy v n ngoài ỗ ố ớ ự
câu
ử
ấ
ớ
(cid:0) Correlated – th c thi đ i v i m i hàng tr v t ả ề ừ ể EXISTS
truy v n ngoài, có th dùng v i toán t
19
6. Subquery – Ví dụ
Cho bi
ể
ủ
ằ
ế
ế t các khách hàng nào có hoá đ n
SELECT CUSTOMER_NAME FROM CUSTOMER_T
WHERE CUSTOMER_ID IN
(SELECT DISTINCT CUSTOMER_ID FROM ORDER_T);
ấ ả ừ
ệ
ằ Subquery n m trong d u ế ặ ơ ngo c đ n, k t qu t ượ c dùng subquery đ ề trong m nh đ WHERE ấ ủ c a câu truy v n ngoài
20
ơ ị IN ki m tra giá tr ộ CUSTOMER_ID c a m t hàng có n m trong danh ả ủ sách k t qu c a subquery
Quá trình ộ ử x lý m t non correlated subquery
Subquery ự ượ c th c thi đ ỉ ộ ầ ch m t l n
21
ụ
6. (tt) Thí d correlated subquery
Cho bi
ả ẩ ơ ượ ấ t các hoá đ n có s n ph m đ c hoàn t t
ế
SELECT DISTINCT ORDER_ID FROM ORDER_LINE_T
EXISTS cho giá tr ị ả ế TRUE n u k t qu ủ c a subquery khác ỗ r ng, ngoài ra là FALSE
WHERE EXISTS
(SELECT * FROM PRODUCT_T
WHERE PRODUCT_ID = ORDER_LINE_T.PRODUCT_ID AND PRODUCT_FINISH = ‘Natural ash’); ể ấ câu truy v n ngoài
Subquery ki m tra các giá tr có ừ t
ị 22
ế trong natural ash
ố ớ
ỗ
ữ ệ ừ
ấ
ự Subquery th c thi đ i v i m i hàng d li u t
câu truy v n ngoài
ộ
23
Quá trình ử x lý m t correlated subquery
ế
ả
ả
6. (tt)K t qu subquery làm b ng
ộ
ạ
ộ C t subquery là m t ợ ậ hàm t p h p có tên c ượ alias, tên này đ dùng trong câu truy ấ v n ngoài
Cho bi bình Subquery t o nên ấ ượ ẫ ả b ng d n xu t đ c ề ệ dùng trong m nh đ FROM câu truy v n ấ ngoài
SELECT PRODUCT_DESCRIPTION, STANDARD_PRICE, AVGPRICE
FROM
(SELECT AVG(STANDARD_PRICE) AVGPRICE FROM PRODUCT_T), PRODUCT_T
ậ
ợ
24
WHERE STANDARD_PRICE > AVG_PRICE; ợ
ể ứ ế
ả ừ
ề ệ M nh đ WHERE không th ch a các hàm t p h p, ườ ư nh ng tr
ng h p này dùng k t qu t
subquery
ẩ ơ ả ế t các s n ph m có giá cao h n giá trung