Ơ Ở Ữ Ệ

ươ

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 SQL­92: (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