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

Một phần của tài liệu Nhập môn Cơ sở dữ liệu Phạm Thị Thanh (Trang 35 - 46)

2. Ngôn ngữ hỏi có cấu trúc – SQL (Structured Query Language)

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

Cho CSDL QLDAYHOC gồm các quan hệ sau:

khoa (MaKh, TenKh, TruongKh, DTk) cbgd (MaCB, TenCB, Monday, Dtc, MaKh) sv (MaSV, TenSV, NS, QQ, MaLop)

lop (MaL, TenL, Nganh, Khoahoc, MaKh) diem (MaSV, Mon, Diem)

Trong đó:

Bảng khoa: MaKh: Mã khoa

TenKh: Tên khoa

TruongKh: Tên Trưởng Khoa DTk: Điện thoại văn phòng khoa

Bảng cbgd: MaCB: Mã cán bộ

TenCB: Tên cán bộ

Monday: Tên môn học mà cán bộ đó dạy Dtc: Điện thoại liên lạc với cán bộ giảng dạy MaKh: Mã khoa

TenSV: Họ Tên của sinh viên NS: Ngày sinh

QQ: Quê quán của sinh viên MaLop: Mã lớp của sinh viên

Bảng lop: MaL: Mã lớp

TenL: Tên lớp Nganh: Ngành học

Khoahoc: Khóa học của lớp MaKh: Mã khoa quản lý lớp

Bảng diem: MaSV: Mã sinh viên

Mon: Tên môn học

Diem: Điểm môn học của sinh viên

2.2.1. Các lệnh cập nhật dữ liệu:

- Nhập dữ liệu cho bảng

INSERT INTO <tênbảng> [(<dscột>)] VALUES (<Bộ giá trị>) VD: Thêm bộ INSERT INTO sv VALUES (‘C2701’,Trần Thị

Hà’,’1985’,Gia viễn’, ‘T14B’) - Xoá 1 bản ghi trong bảng

DELETE FROM <tênbảng> WHERE <Đkiện>

VD: DELETE FROM sv WHERE MaLop = ‘T10A’ - Sửa nội dung bản ghi

UPDATE <tênbảng> SET <têncột>=<bt>,…. WHERE <đkiện> VD: UPDATE cbgd SET MaKh=’01’ WHERE MaKh=’02’

2.2.2. Lệnh truy vấn dữ liệu - Khối SELECT

Cấu trúc cơ sở của một truy vấn gồm 3 câu SELECT, FROM và WHERE • Câu SELECT ứng với phép chiếu của đại số quan hệ, được dùng

để liệt kê các thuộc tính (Cột) muốn có trong kết quả của một câu hỏi.

• Câu FROM: ứng với tích đề_các của đại số quan hệ, được dùng để liệt kê các quan hệ cần được sử dụng khi tìm kết quả cho câu hỏi. • Câu WHERE ứng với phép chọn của đại số quan hệ, được dùng để

đưa ra điều kiện chọn.

SELECT [DISTINCT] * / <DS cột / DS Bt> [AS <tên mới> FROM <DSBảng>

[WHERE <btđk>]

[GROUP BY <DS cột> HAVING <btđk>] [ORDER BY {têncột / Tênbt} [ASC/DESC] Trong đó:

Dấu * để chỉ tất cả các cột trong bảng

Dscột: Tên các cột của bảng cần lấy ra kết quả, viết cách nhau dấu , Dsbt: Các biểu thức cần lấy ra kết quả

DISTINCT: Chỉ rằng trong bảng kết quả không lấy các bản ghi trùng nhau

FROM ds bảng: Tên các bảng chứa dữ liệu mà ta cần lấy thông tin WHERE btđk: Xác định các bản ghi cần đưa thông tin ra

GROUP BY dscột: Nhóm các bản ghi theo các cột trong danh sách cột HAVING btđk: Điều kiện được nhóm trong group

ORDER BY: Sắp xếp theo cột hoặc theo biểu thức

Khi dịch một lệnh trong SELECT thì thứ tự thực hiện như sau:

FROM WHERE GROUP BY HAVING SELECT ORDER BY

Chú ý: Phân biệt mục đích câu điều kiện trong Where và trong Having

- Câu WHERE lọc lấy một số bộ nào đó trong một bảng để đưa vào bảng kết quả. Câu Having lọc lấy một số nhóm nào đó để đưa vào bảng kết quả

- Theo chuẩn ISO tên cột dùng trong câu HAVING cũng có mặt trong danh sách tên cột ở câu Group by hay trong hàm gộp

- Thực tế là điều kiện chọn trong câu HAVING luôn chứa ít nhất một hàm gộp, nếu không điều kiện này có thể chuyển vào câu WHERE. - Hàm gộp không được dùng trong câu WHERE.

Các lệnh tìm kiếm

- Tìm kiếm đơn giản: + Tìm kiếm không điều kiện

VD: Tìm TenKh của trường SELECT TenKh FROM khoa + Tìm kiếm với điều kiện đơn giản

VD1: Tìm tên sinh viên thuộc lớp T13B SELECT TenSV FROM sinhvien WHERE MaL= ‘T13B’

VD2: SELECT DISTINCT MaL FROM sv VD3: SELECT * FROM khoa WHERE TenKh= ‘CN’

Trong biểu thức điều kiện WHERE có thể sử dụng các toán tử so sánh và toán tử logic (<, >, =, <=, >= , <> ,and, or, not)

VD4: Cho xem tên sinh viên của những sinh viên thuộc lớp T13B và sinh trước ngày 1/1/85

SELECT TenSV FROM sv WHERE (TenL= ‘T13B’) and (Ngaysinh<{1/1/85})

+ Tìm kiếm có xử lý xâu ký tự: Dùng từ khoá LIKE nếu không nhớ chính xác nội dung

Dấu % đại diện cho xâu ký tự, dấu _ đại diện cho 1 ký tự: VD: SELECT TenSV FROM sv WHERE QQ LIKE ‘Ninh%’ SELECT * FROM sv WHERE TenSV LIKE ‘%Hoa’

+ Tìm kiếm có xử lý ngày tháng: Thêm dấu ngoặc {} vào ngày tháng SELECT * FROM sv WHERE NS={1980.9.11}

+ Tìm kiếm có từ khoá IN và BETWEEN.. AND

VD: SELECT DISTINCT MãKh FROM lop WHERE TenL IN(‘T13A’,’T13B’,’T13C’)

VD: SELECT MaSV FROM diem WHERE Diem BETWEEN 8 AND 10 + Tìm kiếm có sắp xếp: ORDER BY

Cho xem danh sách sinh viên theo Diem giảm dần SELECT * FROM diem ORDER BY dToan DESC + Tìm kiếm có sử dụng Group by:

VD1: Cho xem DS SV trong bảng SV theo từng khoa SELECT * FROM sv GROUP BY MaKh

VD2: Cho biết maKh của các Khoa có số lượng SV >1000

SELECT DISTINCT MaKh FROM sv GROUP BY Makh HAVING count(*)>1000

+ Tìm kiếm với các hàm

• Các hàm thư viện của SQL:

o COUNT: Tính số lượng các bộ hiện có trong 1 quan hệ

o MAX: Cho giá trị cực đại của 1 trường

o MIN: Cho giá trị cực tiểu của 1 trường

o SUM: Tính tổng các giá trị xuất hiện trên cột • VD:

o SELECT Count(*) FROM sv WHERE MaLop=’T13B’

o SELECT Sum(Slg) FROM donhang WHERE MaH= ‘P1’

o SELECT Max(DTin) FROM diem WHERE MaLop=’T13B’

Tìm kiếm với câu hỏi phức tạp (sử dụng phép kết nối và ánh xạ lồng)

Một truy vấn con là một biểu thức SELECT lồng trong một truy vấn khác. Câu truy vấn con có thể xuất hiện trong câu SELECT, WHERE hay HAVING của câu truy vấn ngoài.

Để sử dụng truy vấn con ta phải tuân thủ các luật sau:

- Câu order by không được sử dụng trong truy vấn con, nhưng được phép trong truy vấn ngoài cùng.

- Danh sách các mục được liệt kê bởi truy vấn con SELECT phải chứa tên của một cột hoặc một biểu thức trừ khi câu truy vấn con này dùng từ khoá EXISTS.

- Các tên cột trong câu truy vấn con có thể tham chiếu đến bảng trong câu From của truy vấn ngoài.

- Khi một câu truy vấn con là một trong 2 toán hạng của một biểu thức so sánh thì truy vấn con này phải xuất hiện bên phải biểu thức so sánh.

Phép kết nối:

Để kết nối 2 bảng:

+ Miền trị của các cột tham gia kết nối là sánh được với nhau

+ Tên các bảng tham gia kết nối phải được liệt kê sau từ khoá From + Điều kiện kết nối phải được chỉ ra sau Where

+ Tên các cột trong bảng có thể phải chỉ ra tường minh cùng tên bảng theo dạng: tênbảng.têncột

VD: Cho xem thông tin cbộ, môn dạy, tên khoa của tất cả các cbgd SELECT TênCB,môn dạy, tênKH

FROM cbgd, khoa

WHERE cbgd.Mah= khoa.MaKH

Ánh xạ lồng:

Trong câu lệnh tìm kiếm có các khối lồng nhau theo nhiều mức lồng nhau. Tức là trong biểu thức điều kiện của khối này lại chứa một khối khác

WHERE MaL IN (SELECT MaL FROM lop

WHERE TenL=’D2 Công nghệ’)

Các từ khoá ALL, SOME, ANY trong SQL luôn đi kèm một câu hỏi con mà câu hỏi con này trả ra kết quả chỉ là một cột.

VD: Tìm sinh viên nhỏ tuổi hơn mọi sinh viên lớp T13B SELECT TenSV FROM sv WHERE NS>ALL (SELECT NS FROM sv WHERE MaL=’T13B’

(Ánh xạ lồng chỉ lấy được thông tin từ một quan hệ mà điều kiện thuộc về 1 quan hệ khác, chứ không lấy được thông tin ở cả hai quan hệ)

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

Trong SQL-92 có các phép UNION, INTERSECT, EXCEPT thao tác trên các quan hệ tương ứng với phép hợp, giao và trừ của đại số quan hệ. Các quan hệ tham gia trong phép toán này phải khả hợp. Các phép toán này tự động loại bỏ các bộ trùng nhau.

VD1: Xét CSDL QLDAYHOC nói trên giả sử có thêm quan hệ hoc (MaCB, TenCB, trinhđộ, chuyennganh) chứa thông tin về việc đi học của cbgd.

Ta cần MaCB, TenCB của những cán bộ đi học trình độ Tiến sỹ và dạy môn CSDL

(SELECT MaCB, TenCB FROM cbgd

WHERE Monday=’CSDL’) INTERSECT

(SELECT MaCB, TenCB FROM hoc

WHERE trinhdo=’Tiến sỹ’)

VD2: Cho biết MaCB, TenCB của những cán bộ đi học trình độ Tiến sỹ hoặc dạy môn CSDL

(SELECT MaCB, TenCB FROM cbgd

UNION

(SELECT MaCB, TenCB FROM hoc

WHERE trinhdo=’Tiến sỹ’)

VD3: Cho biết MaCB, TenCB của những cán bộ đi học trình độ Tiến sỹ nhưng không dạy môn CSDL

(SELECT MaCB, TenCB FROM hoc

WHERE trinhdo=’Tiến sỹ’) EXCEPT

(SELECT MaCB, TenCB FROM cbgd

WHERE Monday=’CSDL’)

Kết chương

Chương II đã giới thiệu một số ngôn ngữ thao tác dữ liệu như đại số quan hệ, ngôn ngữ tân từ và đặc biệt là ngôn ngữ hỏi có cấu trúc SQL có khuôn dạng và ví dụ cụ thể.

Câu hỏi và bài tập

Câu 1: Nêu các khái niệm cơ bản của mô hình quan hệ: Thuộc tính, Lược

đồ quan hệ, Miền trị, Quan hệ, Khóa, Khóa kết nối.

Câu 2: Khái niệm khả hợp Bài tập:

Bài 1: Cho 3 quan hệ

r1(A B C) r2 (D F) r3 (B E D) a1 b1 c1 d1 f1 b1 e1 d1 a2 b2 c2 d2 f2 b2 e2 d2 a1 b1 c3 d3 f3 b3 e3 d1 a2 b3 c1 r4 (A B C D) r5(C D) a b c d c d a b e f e f b c e f e d c d

e d e f

a b d e

Tính các biểu thức sau:

a) r1xr2 b)r1*r3 c)δD=d1(r1*r3) d)r1*r2*r3 e) ΠBC(r1*r2*r3) f) r4:r5

Bài 2: Cho CSDL gồm các lược đồ sau: congty(MaCT, TenCT, DC, DT)

mathang(MaMH, TenMH, Mau, TrongLuong) sanpham(MaCT, MaMH, Soluong)

Trả lời các câu hỏi sau bằng ngôn ngữ đại số quan hệ

a. Tìm MaCT của những công ty đã cung cấp mặt hàng có mã là P2 b. Tìm MaCT của những công ty cung ứng ít nhất 1 mặt hàng mầu đỏ c. Tìm MaMH của những mặt hàng do công ty có tên SamSung cung cấp

d. Tìm MaMH những mặt hàng chưa được công ty nào cung ứng e. Tìm TenCT đã cung cấp mặt hàng có tên là “Notebook”

Bài 3: Cho CSDL gồm các lược đồ sau:

nhanvien (ma_nv, ho_ten, ng_sinh, gioi_tinh, ma_dv, luong) phong (ma_dv, ten_phong, ma_tp)

dd_dvi(ma_dv, dia_diem)

du_an(ma_da, ten_da, dd_du_an, ma_dv) chamcong(ma_nv, ma_da, so_gio)

Trả lời các câu hỏi bằng đại số quan hệ a. Tìm tên dự án có mã số D4

b. Cho biết họ tên và lương của những nhân viên làm việc ở phòng ‘Nghiên cứu và phát triển’

c. Với mỗi dự án thực hiện ở Ninh Bình, hãy cho biết mã số dự án đồng thời, cho biết họ tên, ngày sinh của trưởng phòng quản lý dự án này

d. Tìm tên những nhân viên làm việc cho tất cả các dự án do phòng có mã P4 quản lý

e. Tìm mã số những dự án có sự tham gia của một người lãnh đạo phòng trực tiếp quản lý dự án này

Bài 4: Cho CSDL về các khách sạn gồm các lược đồ sau: Khach_san(ma_ks, ten_ks, dia_chi)

Phong(ma_ph, ma_ks, loai, gia)

Dat_phong(ma_ks, ma_khach, tu_ngay, den_ngay, ma_ph) Khach(ma_khach, ho_ten, dia_chi)

Hãy viết các biểu thức đại số quan hệ tương ứng với mỗi câu hỏi sau: a. Cho biết tên tất cả các khách sạn

b. Liệt kê tất cả các phòng có giá dưới 200.000 đ

c. Cho biết giá và loại của tất cả các phòng thuộc khách sạn Sao mai

d. Liệt kê họ tên của tất cả các khách đã đặt thuê phòng ở khách sạn Sao mai e. Cho biết thông tin chi tiết về các phòng của khách sạn Sao mai với những

phòng đang có người đặt thuê thì cho biết cả họ tên và địa chỉ của khách.

Bài 5: Xét CSDL gồm các lược đồ quan hệ sau: Nhan_vien (ht_nv, duong_pho, thanh_pho) Lam_viec (ht_nv, ten_cty, luong)

Cong_ty(ten_cty, thanh_pho) Quan_ly(ht_nv, ten_thu_truong)

Hãy biểu diễn các câu hỏi sau bằng ngôn ngữ đại số quan hệ.

a. Tìm họ tên và thành phố sinh sống của tất cả các nhân viên làm việc cho công ty FBC

b. Tìm họ tên, tên đường phố, thành phố sinh sống của tất cả các nhân viên làm việc cho FBC có lương lớn hơn 2triệu.

c. Tìm tất cả nhân viên trong CSDL sinh sống cùng thành phố của công ty nơi họ làm việc

d. Tìm tất cả nhân viên trong CSDL sống trong cùng thành phố và trong cùng phố với thủ trưởng của họ

e. Tìm tất cả các nhân viên không làm việc cho FBC

f. Tìm tất cả các nhân viên có lương cao hơn mọi nhân viên của công ty FBC g. Giả sử các công ty được đặt tại nhiều thành phố. Tìm tất cả các công ty

đặt tại mọi thành phố nơi có mặt công ty FBC

h. Tìm tất cả các nhân viên có lương cao hơn lương trung bình của mọi nhân viên công ty của họ

i. Tìm công ty có nhiều nhân viên nhất j. Tìm công ty có quỹ tiền lương nhỏ nhất

k. Tìm các công ty mà nhân viên đều có lương trung bình cao hơn lương trung bình tại FBC

Bài 6: Cho csdl gồm các lược đồ quan hệ sau: tacgia(MaTG, TenTG, Dt)

nxb(MaNXB, TenNXB, Dc, dt)

sach(MaS, TenS, NamXB, Slg, MaTG, MaNXB)

Trả lời các câu hỏi sau bằng ngôn ngữ SQL a. Cho biết tên cuốn sách xuất bản năm 2007

b. Cho biết Mã sách, tên sách xuất bản năm 2007 và số lượng xuất bản trên 1000 cuốn

c. Tên cuốn sách xuất bản năm 2000 của NXB GD d. Xoá tác giả “Nguyễn Văn Thành” trong CSDL trên

e. Thêm nhà xuất bản có mã “NB”, tên là “nhà xuất bản Ninh Bình”, Dc là “TP Ninh Bình”, dt là 0303888888)

f. Sửa Dt của tác giả có mã TT07 thành 0983.98.98.98

Bài 7: Cho CSDL gồm các lược đồ quan hệ sau: truong(MaTr, TenT, DC, DT, Hieu truong) khoa(MaTr, MaKh, TenKh, SoSV)

sinhvien(MaTr, MaKH, MaSV, TenSV, QQ)

Trả lời bằng Ngôn ngữ SQL

a. Cho biết tên trường ĐH có khoa CNTT

b. Tổng số SV khoa CNTT ở tất cả các trường ĐH c. Khoa nào của trường nào có số SV đông nhất d. Tên Tr có tổng số SV đông nhất

Bài 8: Cho CSDL gồm các lược đồ quan hệ: nhanvien (MaNV, HoTen, NgaySinh, MaPhong) phong (MaPhong, TenPhong, DiaDiem, Sodt) du_an(MaDA, TenDA, NganSach)

thamgia(MaNV, MaDA, SoGioThamGia)

Biểu diễn các câu tìm kiếm trên bằng Đại số quan hệ và ngôn ngữ SQL

a. Đưa ra danh sách (họ tên, ngày sinh) của các nhân viên tham gia Dự án có tên là đào tạo từ xa hoặc tham gia dự án có tên là QLTC

b. Đưa ra danh sách (tên phòng, địa điểm) của phòng có nhân viên mã số là ‘NV03’ làm việc

c. Cho biết danh sách (họ tên, ngày sinh, mãPh) của các nhân viên tham gia vào dự án

d. Cho biết có bao nhiêu dự án có ngân sách lớn hơn 100.000.000

Bài 9: Xét CSDL gồm các lược đồ quan hệ sau: Nhan_vien (ht_nv, duong_pho, thanh_pho) Lam_viec (ht_nv, ten_cty, luong)

Cong_ty(ten_cty, thanh_pho) Quan_ly(ht_nv, ten_thu_truong)

Hãy biểu diễn các câu hỏi sau bằng ngôn ngữ SQL.

a. Tìm họ tên và thành phố sinh sống của tất cả các nhân viên làm việc cho công ty FBC

b. Tìm họ tên, tên đường phố, thành phố sinh sống của tất cả các nhân viên làm việc cho FBC có lương lớn hơn 2triệu.

c. Tìm tất cả nhân viên trong CSDL sinh sống cùng thành phố của công ty nơi họ làm việc

d. Tìm tất cả nhân viên trong CSDL sống trong cùng thành phố và trong cùng phố với thủ trưởng của họ

e. Tìm tất cả các nhân viên không làm việc cho FBC

f. Tìm tất cả các nhân viên có lương cao hơn mọi nhân viên của công ty FBC g. Giả sử các công ty được đặt tại nhiều thành phố. Tìm tất cả các công ty

đặt tại mọi thành phố nơi có mặt công ty FBC

h. Tìm tất cả các nhân viên có lương cao hơn lương trung bình của mọi nhân viên công ty của họ

i. Tìm công ty có nhiều nhân viên nhất j. Tìm công ty có quỹ tiền lương nhỏ nhất

k. Tìm các công ty mà nhân viên đều có lương trung bình cao hơn lương trung bình tại FBC

CHƯƠNG III: THIẾT KẾ MỘT CƠ SỞ DỮ LIỆU

Một phần của tài liệu Nhập môn Cơ sở dữ liệu Phạm Thị Thanh (Trang 35 - 46)

Tải bản đầy đủ (DOC)

(93 trang)
w