50
Các ngôn ngdliệu đối với mô hình quan h` Nguyễn Thị Oanh [email protected] Bộ môn Hệ thống thông tin (http://is.hust.edu.vn/ ) Viện CNTT&TT Trường Đại học Bách Khoa Hà Nội

Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

  • Upload
    lethuan

  • View
    217

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

Các ngôn ngữ dữ liệu

đối với mô hình quan hệ

`

Nguyễn Thị Oanh [email protected]

Bộ môn Hệ thống thông tin (http://is.hust.edu.vn/)

Viện CNTT&TT

Trường Đại học Bách Khoa Hà Nội

Page 2: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

2

CSDL

CSDL

Ứng dụng Hệ

CSDL

Hệ QTCSDL

- Định nghĩa DL

- Thao tác DL

is.hust.edu.vn

Page 3: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

3

Nội dung

Đặt vấn đề

Giới thiệu một số ngôn ngữ và phân loại

So sánh và đánh giá

Ngôn ngữ truy vấn bậc cao SQL (Structured Query

LLanguage)

Định nghĩa dữ liệu

Truy vấn dữ liệu

Kết luận

is.hust.edu.vn

Page 4: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

4

Đặt vấn đề

Mục đích của ngôn ngữ dữ liệu

Tại sao có nhiều ngôn ngôn ngữ dữ liệu?

Ngôn ngữ cấp thấp vs. Ngôn ngữ cấp cao?

is.hust.edu.vn

Page 5: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

MSSV HoTen QueQuan ...

1108 Trần Hoài Hà nội

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

8452 Hoàng Bảo Bắc Ninh

Tìm tên của các sinh viên có quê quán Hải Phòng

Tìm các bộ của bảng Sinhvien có QueQuan = “Hải Phòng”

Đưa ra các giá trị của thuộc tính Hoten của các bộ này

5

Ví dụ

Sinhvien

is.hust.edu.vn

Page 6: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

MSMH tenMH soHT ...

21 CTDL&GT 3

23 CSDL 4

29 VB 2

18 Đại số 3

Ví dụ (2)

Tìm các sinh viên đăng ký

môn học có mã số 21

Tìm các giá trị MaSV trong

bảng Dangky có trường

MSMH tương ứng là 21

Đưa các bộ của bảng

Sinhvien có MSSV trong

các giá trị tìm thấy ở trên

MSSV HoTen QueQuan ...

1108 Trần Hoài Hà nội

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

8452 Hoàng Bảo Bắc Ninh

Sinhvien

MaSV MSMH kyHoc ...

3936 21 20161

1108 23 20162

8507 21 20161

Đangky

Monhoc

6 6 is.hust.edu.vn

Page 7: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

MSSV HoTen QueQuan ...

1108 Trần Hoài Hà nội

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

8452 Hoàng Bảo Bắc Ninh

7

Ví dụ (2)

MaSV MSMH kyHoc ...

3936 21 20161

1108 23 20162

8507 21 20161

Sinhvien

Đangky

MSMH tenMH soHT ...

21 CTDL&GT 3

23 CSDL 4

29 VB 2

18 Đại số 3

Monhoc

Sinhvien(MSSV, hoTen, ngaySinh, gioiTinh, queQuan, noiCuTru, maLop )

Monhoc(MSMH, tenMH, soHT, maKhoaQL)

Đangky(MaSV, MSMH, kyHoc, diemQT, diemCK)

is.hust.edu.vn

Page 8: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

8

Phân loại ngôn ngữ truy vấn

Ngôn ngữ cấp thấp

Đại số quan hệ

1 câu hỏi = 1 tập các phép toán trên các quan hệ

Được biểu diễn bởi một biểu thức đại số (quan hệ)

Tính toán vị từ

1 câu hỏi = 1 mô tả của các bộ mong muốn

Được đặc tả bởi một vị từ mà các bộ phải thoả mãn

Phân biệt 2 lớp:

ngôn ngữ tính toán vị từ biến bộ

ngôn ngữ tính toán vị từ biến miền

Ngôn ngữ cấp cao

SQL

QBE

is.hust.edu.vn

Page 9: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

Ngôn ngữ SQL

Page 10: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

10

SQL (Structured Query Language)

1975: SEQUEL

System-R

1976: SEQUEL2

1978/79: SQL

System-R

1986: chuẩn SQL-86

1989: chuẩn SQL-89

1992: chuẩn SQL-92 (SQL2): major revision

1999: chuẩn SQL-99 (SQL3): thêm đệ quy, triggers,

hàm, …

SQL:2003 , SQL:2006, SQL:2008, SQL:2011,

SQL:2016 is.hust.edu.vn

Page 11: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

11

Các thành phần của SQL

Ngôn ngữ mô tả dữ liệu (Data Definition Language)

Cấu trúc các bảng CSDL

Các mối liên hệ của dữ liệu

Quy tắc, ràng buộc áp đặt lên dữ liệu

Ngôn ngữ thao tác dữ liệu (Data Manipulation Language)

Thêm, xoá, sửa và truy vấn dữ liệu trong CSDL

Ngôn ngữ quản lý dữ liệu (Data Control Language)

Thay đổi cấu trúc của các bảng dữ liệu

Khai báo bảo mật thông tin

Quyền hạn của người dùng trong khai thác CSDL

is.hust.edu.vn

Page 12: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

12

Định nghĩa dữ liệu với SQL

Các thông tin được định nghĩa bao gồm

Sơ đồ quan hệ

Kiểu dữ liệu hay miền giá trị của mỗi thuộc tính

Các ràng buộc toàn vẹn

Các chỉ số đối với mỗi bảng

Thông tin an toàn và uỷ quyền đối với mỗi bảng

Cấu trúc lưu trữ vật lý của mỗi bảng trên đĩa

Được biểu diễn bởi các lệnh định nghĩa dữ liệu

is.hust.edu.vn

Page 13: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

13

Cú pháp

Tạo bảng

CREATE TABLE tab(

col1 type1(size1)[NOT NULL], ...,

col2 type2(size2)[NOT NULL], ...,

.....

[CONSTRAINT <constraint name> <constraint type> clause]

...

)

Xoá bảng DROP TABLE tab

is.hust.edu.vn

Page 14: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

14

Quy ước đặt tên và kiểu dữ liệu

Quy ước đặt tên

32 ký tự: chữ cái, số, dấu _

Kiểu dữ liệu (SQL-92)

CHAR(n)

VARCHAR(n)

Int

Smallint

Numeric(p,d)

Real, double

float(n)

Date

time

is.hust.edu.vn

Page 15: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

15

Kiểu ràng buộc

Ràng buộc toàn vẹn (RBTV) về giá trị miền

CONSTRAINT <name>

CHECK <condition>

RBTV về khoá chính

CONSTRAINT <name> PRIMARY KEY (fk1,fk2,…)

RBTV về khoá ngoại hay phụ thuộc tồn tại

CONSTRAINT <name> FOREIGN KEY (fk1,fk2,…)

REFERENCES tab(k1,k2, …)

is.hust.edu.vn

Page 16: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

16

Thêm/xoá/sửa cột của các bảng

Thêm

ALTER TABLE <tên bảng>

ADD COLUMN <tên cột> <kiểu dữ liệu> [NOT NULL]

Xoá

ALTER TABLE <tên bảng>

DROP COLUMN <tên cột>

Sửa

ALTER TABLE <tên bảng>

CHANGE COLUMN <tên cột> <kiểu dữ liệu mới>

is.hust.edu.vn

Page 17: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

17

Thêm/xóa các ràng buộc

Thêm

ALTER TABLE <tên bảng>

ADD CONSTRAINT <tên ràng buộc> <kiểu ràng buộc>

Xóa

ALTER TABLE <tên bảng>

DROP CONSTRAINT <tên ràng buộc>

is.hust.edu.vn

Page 18: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

18

Ví dụ

CREATE TABLE Sinhvien(

MSSV char(10) NOT NULL,

HoTen varchar(30) NOT NULL,

QueQuan varchar(30),

CONSTRAINT key_Stud

PRIMARY KEY MSSV

);

CREATE TABLE Dangky(

MaSV char(10) NOT NULL,

MSSH varchar(5) NOT NULL,

CONSTRAINT pk_dky

PRIMARY KEY (MaSV, MSSV, kyHoc),

CONSTRAINT fk1_dky

FOREIGN KEY (MaSV) REFERENCES Sinhvien(MSSV)

);

MSSV HoTen QueQuan

1108 Trần Hoài Hà nội

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

8452 Hoàng Bảo Bắc Ninh

MaSV MSMH kyHoc

3936 21 20161

1108 23 20162

8507 21 20161

Sinhvien

Đangky

is.hust.edu.vn

Page 19: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

19

Thao tác dữ liệu với SQL

Các thao tác chính với dữ liệu

Thêm : INSERT …

Xóa: DELETE …

Sửa (Cập nhật): UPDATE …

Tìm kiếm (truy vấn) dữ liệu: SELECT …

Được biểu diễn bởi các lệnh thao tác dữ liệu

is.hust.edu.vn

Page 20: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

20

Các câu lệnh cập nhật dữ liệu

Thêm

INSERT INTO table[(col1,col2,…)]

VALUES (exp1,exp2,…)

INSERT INTO table[(col1,col2,…)]

SELECT col1,col2, …

FROM tab1, tab2, …

WHERE <dieu_kien>

Ví dụ

INSERT INTO Sinhvien(MSSV, HoTen, QueQuan)

VALUES (“1179”, “Trần Đức”, “Hanoi”)

is.hust.edu.vn

Page 21: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

21

Các câu lệnh cập nhật dữ liệu (2)

Xoá

DELETE FROM table

WHERE cond_exp;

Sửa

UPDATE table

SET col1 = exp1,

col2=exp2,

colN=expN

WHERE cond_exp;

Ví dụ

DELETE FROM Sinhvien

WHERE QueQuan = ‘‘Hà Nam’’;

UPDATE Sinhvien

SET QueQuan = ‘‘Hà nội’’

WHERE QueQuan = ‘‘Hanoi’’; is.hust.edu.vn

Page 22: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

22

Cú pháp câu lệnh truy vấn SQL

SELECT [DISTINCT] <bt1>, <bt2>, …

FROM <bang1>,<bang2>, …

[WHERE <dieu kien chon>]

[GROUP BY <tt1>, <tt2>, …

[HAVING <dieu kien in ket qua>]]

[ORDER BY <tt1>|<bieu thuc so 1> [ASC|DESC]]

is.hust.edu.vn

Page 23: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

23

Truy vấn đơn giản trên 1 bảng

Tìm thông tin từ các cột của bảng

SELECT ColumnName, ColumnName, ...

FROM TableName

SELECT *

FROM TableName

Ví dụ

SELECT HoTen

FROM Sinhvien Kết quả

)(SinhvienHoten

MSSV HoTen QueQuan ...

1108 Trần Hoài Hà nội

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

8452 Hoàng Bảo Bắc Ninh

Sinhvien

HoTen

Trần Hoài

Vũ An

Ng. Anh

Hoàng Bảo is.hust.edu.vn

Page 24: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

24

Truy vấn với điều kiện lựa chọn

Chọn các bản ghi (dòng) SELECT ColumnName,ColumnName, ...

FROM TableName

WHERE condition_expression;

Ví dụ SELECT *

FROM Sinhvien

WHERE QueQuan = « Hải Phòng » ;

)("Phòng Hai" SinhvienQueQuan

MSSV HoTen QueQuan ...

1108 Trần Hoài Hà nội

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

8452 Hoàng Bảo Bắc Ninh

Sinhvien

MSSV HoTen QueQuan ...

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

Kết quả

is.hust.edu.vn

Page 25: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

25

Biểu diễn điều kiện lựa chọn

Các phép toán quan hệ: =, !=, <, >, <=, >=

attr =100

Các phép toán logic: NOT, AND, OR

attr < 10 OR attr >100

Phép toán phạm vi: BETWEEN, IN, LIKE

Kiểu dữ liệu số

attr BETWEEN val1 AND val2 (attr>=val1) and attr<=val2)

attr IN (val1, val2, ...) (attr=val1) or (attr=val2) or ...

Kiểu dữ liệu xâu

LIKE: sử dụng đối sánh mẫu xâu với các ký tự _ (hoặc ?, %)

(thay thế cho 1 ký tự bất kỳ), % (hoặc *) (thay thế cho 1 xâu ký

tự bất kỳ):

attr LIKE ‘’_CS’’

attr LIKE ‘’%CS%’’ is.hust.edu.vn

Page 26: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

26

Truy vấn phức tạp trên nhiều bảng

Điều kiện kết nối

SELECT T1.C1,T1.C2,T2.C1,T2.C4, ...

FROM T1, T2

WHERE condition_expression

Ví dụ: đưa ra danh sách mã sinh vien, họ tên sinh

viên, quê quán, mã môn học mà các sinh viên đã

đăng ký

SELECT MSSV, Hoten, QueQuan,MSMH

FROM Sinhvien, Dangky

WHERE MSSV = MaSV

is.hust.edu.vn

Page 27: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

Truy vấn phức tạp trên nhiều bảng SELECT * FROM Sinhvien, Dangky WHERE MSSV = MaSV

is.hust.edu.vn

MSSV HoTen Que

Quan

MaSV MSMH

kyHoc

1108 Trần Hoài Hà nội 1108 23 20162

3936 Vũ An Hải

phòng

3936 21 20161

8507 Ng. Anh Hải

phòng

8507 21 20161

MSSV =MaSV

MSSV HoTen Que

Quan

1108 Trần Hoài Hà nội

3936 Vũ An Hải

phòng

8507 Ng. Anh Hải

phòng

8452 Hoàng Bảo

Bắc

Ninh

MaSV MS

MH

kyHoc

3936 21 20161

1108 23 20162

8507 21 20161

Đangky Kết quả

Sinhvien

MSSV HoTen Que

Quan

MSMH

1108 Trần Hoài Hà nội 23

3936 Vũ An Hải

phòng

21

8507 Ng. Anh Hải

phòng

21

Kết quả Đưa ra danh sách mã sinh vien, họ tên

sinh viên, quê quán, mã môn học mà

các sinh viên đã đăng ký

SELECT MSSV, Hoten, QueQuan,MSMH

FROM Sinhvien, Dangky

WHERE MSSV = MaSV

Page 28: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

28

Bài tập

Đưa ra danh sách các môn học mà tên của môn

học chứa cụm ‘‘DS’’

Viết câu lệnh SQL đưa ra danh sách các sinh viên

đăng ký các môn học có mã 23 hoặc 21

Viết câu lệnh SQL đưa ra danh sách tên sinh viên

học môn ‘‘Database’’ hoặc môn ‘‘VB’’

Đưa ra danh sách các môn học mà sinh viên có mã

số 8507 đã đăng ký trong học kỳ 20161

Đưa ra danh sách các môn học được quản lý bởi

Viện (Khoa) Công nghệ thông tin và truyền thông.

is.hust.edu.vn

Page 29: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

29

Sinhvien(MSSV, hoTen, ngaySinh, gioiTinh, queQuan, noiCuTru, maLop )

Monhoc(MSMH, tenMH, soHT, maKhoaQL)

Đangky(MaSV, MSMH, kyHoc, diemQT, diemCK)

MSSV HoTen QueQuan ...

1108 Trần Hoài Hà nội

3936 Vũ An Hải phòng

8507 Ng. Anh Hải phòng

8452 Hoàng Bảo Bắc Ninh

MaSV MSMH kyHoc ...

3936 21 20161

1108 23 20162

8507 21 20161

Sinhvien

Đangky

MSMH tenMH soHT ...

21 CTDL&GT 3

23 CSDL 4

29 VB 2

18 Đại số 3

Monhoc

is.hust.edu.vn

Page 30: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

30

Sinhvien(MSSV, hoTen, ngaySinh, gioiTinh, queQuan, noiCuTru, maLop )

Monhoc(MSMH, tenMH, soHT, maKhoaQL)

Đangky(MaSV, MSMH, kyHoc, diemQT, diemCK)

MH_GV(MSMH, tenGV)

Khoa(MaKhoa, tenKhoa, tenTruongKhoa)

Lop(MaLop, tenLop, tenGVCN, maKhoaQL, MSLopTruong)

is.hust.edu.vn

Page 31: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

31

Phép toán đổi tên

Từ khoá AS : <bt> [as] <ten_thay_the>

SELECT c1 [as] name1, c2 [as] name2

FROM TableName

Ví dụ: đưa ra danh sách mã sinh viên, tên sinh viên

và tên môn học mà sinh viên đó tham gia

SELECT MSSV , Hoten,

TenMH as « Tên môn học»

FROM Sinhvien, Dangky, Monhoc

WHERE (MSSV= MaSV)

AND (Dangky.MSMH = Monhoc.MSMH)

Lưu ý: ten_thay_the cho cột được dùng trong mệnh đề ORDER BY

chứ KHÔNG dùng được trong WHERE hay HAVING

is.hust.edu.vn

Page 32: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

32

Sử dụng biến bộ trong SQL

Sử dụng từ khoá AS trong mệnh đề FROM

<ten_bang> [as] <ten_thay_the>

Ví dụ

SELECT MSSV, sv.Hoten, mh.TenMH as « Tên môn học »

FROM Sinhvien as sv, Dangky as dk, Monhoc as mh

WHERE (MSSV = MaSV) and (dk.MSMH = mh.MSMH)

Từ khoá AS : optional

SELECT MSSV, sv.Hoten, mh.TenMH « Tên môn học »

FROM Sinhvien sv, Dangky dk, Monhoc mh

WHERE (MSSV = MaSV) and (dk.MSMH = mh.MSMH)

is.hust.edu.vn

Page 33: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

33

Loại trừ các bản ghi trùng nhau

Từ khoá DISTINCT

SELECT DISTINCT <bt1>, <bt2>, …

FROM <bang1>,<bang2>, …

Ví dụ: đưa ra danh sách các tỉnh thành

(QueQuan) của các sinh viên trong trường. Mỗi

giá trị chỉ hiện thị một lần

SELECT DISTINCT QueQuan

FROM SinhVien

is.hust.edu.vn

Page 34: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

34

Tìm kiếm có sắp xếp

Sắp xếp các bản ghi kết quả theo một thứ tự cho trước

SELECT <bt1>, <bt2>, …

FROM <bang1>,<bang2>, …

[WHERE <dieu kien chon>]

ORDER BY <tt1>|<bieu thuc so 1> [ASC|DESC]

Ví dụ: đưa ra danh sách tên các sinh viên theo thứ tự tăng dần

SELECT Name

FROM Student

ORDER BY Name ASC

is.hust.edu.vn

Page 35: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

35

Phân nhóm các bản ghi kết quả

Phân nhóm các bản ghi kết quả theo giá trị của 1

hoặc nhiều thuộc tính

SELECT <bt1>, <bt2>, …

FROM <bang1>,<bang2>, …

[WHERE <dieu kien chon>]

GROUP BY <tt1>, <tt2>, …

Ví dụ đưa ra tên thành phố và số lượng sinh viên

tương ứng đến từ các thành phố đó

SELECT QueQuan, Count(MSSV)

FROM Sinhvien

GROUP BY QueQuan

is.hust.edu.vn

Page 36: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

36

Điều kiện hiển thị các bản ghi kết quả

Lựa chọn các bản ghi kết quả để hiển thị

SELECT <bt1>, <bt2>, …

FROM <bang1>,<bang2>, …

[WHERE <dieu kien chon>]

GROUP BY <bt1>, <bt2>

HAVING <dieu kien in ket qua>

Ví dụ: đưa ra tên các thành phố có nhiều hơn 3

sinh viên

SELECT QueQuan, COUNT(MSSV)

FROM Sinhvien

GROUP BY QueQuan

HAVING COUNT(MSSV) > 3

is.hust.edu.vn

Page 37: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

37

Các phép toán tập hợp

UNION, MINUS, INTERSECT

Ví dụ: đưa ra danh sách tên các môn học không có

sinh viên nào tham dự

SELECT DISTINCT TenMH

FROM Monhoc

MINUS

SELECT DISTINCT TenMH

FROM Dangky, Monhoc

WHERE Dangky.MSMH = Monhoc.MSMH

is.hust.edu.vn

Page 38: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

38

Các câu truy vấn lồng nhau

Là trường hợp các câu truy vấn (con) được viết

lồng nhau

Thường được sử dụng với để

Kiểm tra thành viên tập hợp (IN)

So sánh tập hợp (>ALL, >=ALL, <ALL,<=ALL,=ALL, NOT

IN,SOME, .. )

Kiểm tra các bảng rỗng (EXISTS hoặc NOT EXISTS)

Các truy vấn con lồng nhau thông qua mệnh đề

WHERE

is.hust.edu.vn

Page 39: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

39

Các câu truy vấn lồng nhau (…)

Đưa ra mã số sinh viên học đã đăng ký cả 2 môn có mã “21” và

“45”:

SELECT DISTINCT MaSV FROM Dangky

WHERE MSMH = “21”

AND MaSV IN (SELECT MaSV FROM Dangky

WHERE MSMH = “45”);

Đưa ra tên của môn học có số học trình lớn nhất:

SELECT tenMH FROM Monhoc

WHERE soHT ≥ ALL(SELECT soHT FROM Monhoc)

Sinhvien(MSSV, hoTen, ngaySinh, gioiTinh, queQuan, noiCuTru, maLop )

Monhoc(MSMH, tenMH, soHT, maKhoaQL)

Đangky(MaSV, MSMH, kyHoc, diemQT, diemCK)

is.hust.edu.vn

Page 40: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

40

Các hàm thư viện

Hàm tính toán trên nhóm các bản ghi

MAX/MIN

SUM

AVG

COUNT

is.hust.edu.vn

Page 41: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

41

Các hàm thư viện (2)

Đưa ra điểm quá trình lớn nhất, nhỏ nhất, trung

bình của các sinh viên học môn có mã số “21”:

SELECT max(diemQT), min(diemQT), avg(diemQT)

FROM Dangky

WHERE MSMH = “21”

Đưa ra tên của môn học có số học trình lớn nhất:

SELECT tenMH FROM Monhoc

WHERE soHT = (SELECT max(soHT) FROM Monhoc)

is.hust.edu.vn

Page 42: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

42

Các hàm thư viện (3)

Hàm tính toán trên bản ghi

Hàm toán học: ABS, SQRT, LOG, EXP, SIGN, ROUND

Hàm xử lý xâu ký tự: LEN, LEFT, RIGHT, MID

Hàm xử lý thời gian: DATE, DAY, MONTH, YEAR, HOUR,

MINUTE, SECOND

Hàm chuyển đổi kiểu giá trị: FORMAT

is.hust.edu.vn

Page 43: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

43

Ví dụ khác

CSDL: S(sid, sname, size, city)

P(pid, pname, color, weight, city)

SP(sid, pid, quantity)

Đưa ra mã số của các hãng cung ứng đồng thời 2

mặt hàng P1 và P2:

SELECT DISTINCT sid FROM SP

WHERE pid = ‘P1’

AND sid IN (SELECT sid FROM SP WHERE pid = ‘P2’);

Đưa ra tên của các hãng có số nhân viên đông

nhất:

SELECT sname FROM S

WHERE size ≥ ALL(SELECT size FROM S)

is.hust.edu.vn

Page 44: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

44

Đưa ra tên của hãng S1 và tổng số mặt hàng mà hãng đó cung ứng

SELECT sname, SUM(quantity)

FROM S, SP

WHERE S.sid = SP.sid AND S.sid = ‘S1’

Đưa ra mã số các hãng cung ứng và số lượng trung bình các mặt

hàng được cung ứng bởi từng hãng

SELECT sid, AVG(quantity)

FROM SP

GROUP BY sid;

Đưa ra mã số các hãng cung ứng mà số lượng mặt hàng trung bình

được cung cấp bởi hãng đó là trong khoảng từ 75 đến 100

SELECT sid, AVG(quantity)

FROM SP

GROUP BY sid

HAVING AVG(quantity) BETWEEN 75 AND 100 is.hust.edu.vn

Page 45: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

45

Bài tập

Viết các câu lệnh SQL biểu diễn các câu hỏi truy

vấn

Viết biểu thức đại số quan hệ tương đương với các

câu lệnh SQL

is.hust.edu.vn

Page 46: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

46

Cho CSDL

Sinhvien(MSSV, hoTen, ngaySinh, gioiTinh, queQuan, noiCuTru, maLop )

Monhoc(MSMH, tenMH, soHT, maKhoaQL)

Đangky(MaSV, MSMH, kyHoc, diemQT, diemCK)

MH_GV(MSMH, tenGV)

Khoa(MaKhoa, tenKhoa, tenTruongKhoa)

Lop(MaLop, tenLop, tenGVCN, maKhoaQL, MSLopTruong)

Ghi chú: Khóa chính in đậm và gạch chân, khóa ngoài in nghiêng

is.hust.edu.vn

Page 47: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

1) Đưa ra tên các môn học có số học trình lớn hơn 5.

2) Cho biết danh sách sinh viên thuộc lớp có tên “CNTT 2 K58”.

3) Đưa ra danh sách các sinh viên thuộc lớp có chứa từ “CNTT”.

4) Đưa ra danh sách sinh viên học môn “CSDL” học kỳ “20162” và

các điểm tương ứng gồm: điểm quá trình, điểm cuối kỳ và điểm

học phần. Giả sử điểm học phần được tính = trung bình cộng của

điểm quá trình và cuối kỳ.

5) Đưa ra các mã số sinh viên học môn học có mã số “09” học kỳ

20161 mà có điểm quá trình hoặc điểm cuối kỳ nhỏ hơn 3 hoặc

điểm học phần nhỏ hơn 4.

6) Đưa ra danh sách sinh viên đạt điểm cao nhất môn học có mã số

“21” trong học kỳ 20161.

7) Cho biết sinh viên nào đã đăng ký học cả 2 môn “Lập trình Java”

và môn “Lập trình nhúng”.

8) Đưa ra danh sách sinh viên đã đăng ký học ít nhất 1 trong 2 môn

“Lập trình Java” và “Lập trình hướng đối tượng”.

9) Môn học nào chưa từng được sinh viên nào đăng ký học. 47 is.hust.edu.vn

Page 48: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

10) Đưa ra danh sách sinh viên và tuổi của các sinh viên có tuổi

nhiều hơn 25.

11) Đưa ra danh sách sinh viên sinh vào tháng 4 năm 1999.

12) Môn học nào có ít hơn 2 giáo viên phụ trách ?

13) Đưa ra danh sách các khoa và số lượng môn học quản lý

của từng khoa.

14) Đưa ra các môn học có số lượng đăng ký học kỳ 20172 ít

hơn 5.

15) Đưa ra danh sách các lớp và số lượng sinh viên tương ứng

của mỗi lớp. Sắp theo số lượng sinh viên giảm dần

16) Đưa ra danh sách các tỉnh thành và số lượng sinh viên đến

từ mỗi tỉnh thành.

17) Cho biết tỉnh thành nào có số lượng sinh viên lớn hơn 10

18) Cho biết tỉnh thành nào có số lượng sinh viên đông nhất

48 is.hust.edu.vn

Page 49: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

49

Xử lý câu hỏi truy vấn

Câu lệnh SQL

Phân tích

cú pháp

(parser)

Biểu thức ĐSQH

Bộ tối ưu

(optimizer)

Biểu thức ĐSQH tối ưu

Bộ sinh mã

(code generator)

Chương trình tối ưu

is.hust.edu.vn

Page 50: Các ngôn ngữ dữ liệu đối với mô hình quan hệis.hust.edu.vn/~oanhnt/it3292/CSDL1_3ngonngu_SQL_IT3292.pdfTại sao có nhiều ngôn ngôn ngữ dữ liệu? Ngôn ngữ

50 is.hust.edu.vn