Bài giảng Cơ sở dữ liệu - Bài 5: Ngôn ngữ CSDL – SQL - Vũ Văn Định
Để người sử dụng có thể giao tiếp được
với CSDL phải có một hệ thống ngôn ngữ
giao tiếp bao gồm:
• Ngôn ngữ định nghĩa dữ liệu .
• Ngôn ngữ thao tác dữ liệu
• Ngôn ngữ truy vấn dữ liệu
• Ngôn ngữ quản lý dữ liệu
Mỗi hệ quản trị CSDL đều có cách
cài đặt các ngôn ngữ khác nhau
nhưng đều dựa trên chuẩn của ngôn
ngữ truy vấn có cấu trúc SQL (
Structured- Query Language)
mà ta có thể truy cập vào - GROUP BY : dùng để gộp nhóm các bộ cùng giá trị tương ứng ở các cột xuất hiện trong ds tên cột. - HAVING: dùng để lọc các nhóm thoả điều kiện - ORDER BY : quy định thứ tự trong các cột trả ra gồm : ASC ( tăng dần) và DESC ( giảm dần). Mặc định là ASC TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 1: Tìm tên các dự án và mã các phòng quản lý dự án tương ứng SELECT ten_da, ma_p FROM DU_AN; Kết quả tra ra : P1Giáo trình điện tử P3Mạng B P2Phần mềm A Ma_pTen_da TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Chú ý : a . Muốn hiển thị tất cả các cột trong bảng, ta có thể dùng dấu * để thay thế Ví dụ 2. Cho biết thông tin về nhân viên trong công ty . C1 : SELECT ma_nv, ho_ten, ng_sinh, gioi_tinh, ma_p, luong FROM NHAN_VIEN; C2: SELECT * FROM NHAN_VIEN ; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí b. Trong bảng kết quả, nếu muốn ta có thể đặt tên mới cho cột sau từ khoá As Ví dụ3 : Cho biết tên và lương mới của mỗi nhân viên biết họ được tăng 10% . Câu lệnh : C1: SELECT ho_ten, luong + luong*0.1 FROM NHAN_VIEN; C2: SELECT ho_ten, luong+luong*0.1 AS luong_moi FROM NHAN_VIEN; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí c. SQL dùng các phép so sánh : <= ( nhỏ hơn hoặc bằng) , >=( lớn hơn hoặc bằng) , ( khác) - Có thể kết hợp nhiều biểu thức logic bằng các phép AND, OR, NOT. TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 4:Tìm các nhân viên thuộc phòng có mã phòng là P2 và có lương >=2tr. SELECT ma_nv, ho_ten, ma_p, luong FROM NHAN_VIEN WHERE ma_p= 'P2' AND luong>=2000000; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 5: Lập danh sách ( gồm mã sinh viên,họ tên, ngày sinh, giới tính) của các sinh viên nữ có học lực từ khá trở lên và các sinh viên nam học lực giỏi. SELECT SV#, HT, NS, GT FROM SV WHERE (GT= 'Nữ' AND HL>=6.5) OR ( GT= 'Nam' AND HL >=8.0 ); TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí d. Tìm kiếm có xử lý xâu kí tự SQL dùng toán tử LIKE để so sánh xâu. SQL sử dụng kí tự ' %' để thay thế cho một xâu con, dấu phân cách '_' để thay thế cho một kí tự. VD: - A%B : xâu kí tự bất kì bắt dầu bằng chữ A và kết thúc bằng chữ B - A_B : xâu gồm 3 kí tự, có kí tự thứ hai bất kì TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 6: Cho biết mã và tên các dự án mà địa điểm có chứa từ UBND: SELECT ma_da, ten_da FROM DU_AN WHERE dia_diem_da LIKE '%UBND%'; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí e. SQL cho phép sử dụng các giá trị NULL để chỉ sự thiếu vắng thông tin về giá trị của một bộ tại một thuộc tính. Với từ khoá IS NULL, SQL cho phép kiểm tra xem một giá trị có là NULL hay không ? Ví dụ 7: Cho biết tên và mã số dự án mà cột địa điểm có giá trị là NULL. SELECT ma_da, ten_da FROM DU_AN WHERE dia_diem_da IS NULL; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí f. Truy vấn có sắp xếp thứ tự Kết quả của câu truy vấn SQL có thể được sắp theo thứ tự tăng dần (ASC ) hoặc giảm dần (DESC) bởi khoá ORDER BY. Mặc định là tăng dần. Ví dụ 8 : Liệt kê các nhân viên nữ theo thứ tự tăng dần của lương: SELECT * FROM NHAN_VIEN WHERE GT = ' Nữ' ORDER BY luong; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Việc sắp thứ tự có thể được thực hiện trên nhiều thuộc tính Ví dụ 9: Hiển thị các thông tin chấm công của các dự án có mã thuộc tập D1, D2, D8 theo thứ tự tăng dần của số giờ và giảm dần của mã dự án: SELECT * FROM CHAM_CONG WHERE ma_da IN ('D1', 'D2', 'D8') ORDER BY so_gio ASC, ma_da DESC; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí g. Tìm kiếm nhờ sử dụng IN và BETWEEN Ví dụ 10: Tìm những nhân viên có lương từ 2000000 đến 3000000 , sắp xếp tên theo thứ tự tăng dần. SELECT * FROM NHAN_VIEN WHERE luong BETWEEN 2000000 AND 3000000 ORDER BY ho_ten ASC; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 2. Các hàm thư viện SQL có 5 hàm kết tập được cài sẵn : - COUNT :đếm số giá trị - SUM : tính tổng các giá trị trong một cột - MAX : tính giá trị lớn nhất trong một cột - MIN : tính giá trị nhỏ nhất trong một cột - AVG : tính giá trị trung bình của một cột Chú ý : Các hàm sum và avg chỉ áp dụng cho các cột có kiểu số TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 1: Tìm lương cao nhất, lương thấp nhất, và trung bình cộng lương toàn cơ quan SELECT MAX (luong) AS max, MIN (luong) AS min, AVG (luong) AS tb FROM NHAN_VIEN; Kết quả câu truy vấn này trả ra như sau : 235000012000003000000 tbminmax TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 2: Cho biết số nhân viên thực hiện dự án có mã là D8 SELECT COUNT (*) FROM CHAM_CONG WHERE ma_da = 'D8'; Chú ý : - Hàm Count khi có đối số (*) có nghĩa là đếm số bản ghi thoả mãn yêu cầu mà không cần quan tâm đến bất kì cột nào . TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí - Dùng từ khoá DISTINCT ngay trước tên cột được áp dụng hàm, khi cần loại bỏ các bộ trùng nhau. Ví dụ 3: Đếm số tỉnh có sinh viên theo học SELECT COUNT (DISTINCT Que) FROM SINHVIEN; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 3.Tìm kiếm nhờ mệnh đề GROUP BY Ví dụ 1: In ra danh sách sinh viên theo từng quê của sinh viên? SELECT SV#, HT, NS FROM SV GROUP BY Que; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 4. Tìm kiếm có sử dụng mệnh đề HAVING Mệnh đề HAVING thường sử dụng cùng mệnh đề GROUP BY. Sau HAVING là biểu thức điều kiện. Biểu thức này không tác động vào toàn bảng mà chỉ tác động vào từng nhóm các bản ghi đã chỉ ra tại mệnh đề GROUP BY VÍ DỤ : Tìm mã số những sinh viên thực hiện ít nhất 2 đề tài: SELECT SV# FROM SD GROUP BY SV# HAVING COUNT (DT# ) >=2; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 5. Tìm kiếm với câu hỏi phức tạp Tìm kiếm với nhiều bảng qua việc sử dụng ánh xạ lồng nhau hoặc qua phép kết nối. Phép kết nối : ĐK: Các miền tham gia kết nối phải có miền trị là sánh được với nhau. Tên của các cột khác nhau có thể được viết tường minh qua tên bảng theo cú pháp : Tên_ bảng. Tên_ cột Ví dụ : Với mỗi đề tài có sinh viên tham gia thực tập. Hãy cho biết tên đề tài, tên chủ nhiệm đề tài và kinh phí thực hiện đề tài đó. TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Câu lệnh : SELECT TDT, CN, KP FROM DT, SD WHERE SD.DT# = DT.DT#; Chú ý : Trong câu truy vấn có hơn một bảng, nếu tên cột là không duy nhất thì bắt buộc phải viết tên cột dạng tường minh. TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ánh xạ lồng Ví dụ 1: Tìm tên những sinh viên thực tập tại Hà Nội . SELECT HT FROM SV WHERE SV# IN (SELECT SV# FROM SD WHERE NTT= ‘Hà Nội ‘); TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 2: Tìm những sinh viên thực hiện ít nhất một đề tài nào đó: SELECT * FROM SV WHERE EXISTS ( SELECT * FROM SD WHERE SV.SV# = SD.SV#); SQL còn có thể tìm kiếm trên nhiều bảng nhờ mênh đề EXISTS ( tồn tại ) TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Tìm kiếm có sử dụng lường từ ANY và ALL Ví dụ 3 : Tìm tên những đề tài mà sinh viên có mã số 5 đã thực hiện: SELECT TDT FROM DT WHERE DT# = ANY ( SELECT DT# FROM SD WHERE SV# = 5); TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ 4 : Tìm tên sinh viên có điểm học lực cao hơn tất cả các sinh viên SELECT HT FROM SV WHERE HL >= ALL ( SELECT HL FROM SV ); Mệnh đề trên tương đương với : SELECT HT FROM SV WHERE HL = ( SELECT MAX (HL) FROM SV ); TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí IV. CÁC MỆNH ĐỀ CẬP NHẬT DỮ LIỆU 1. Thêm một bộ : Dạng tổng quát : INSERT INTO Tên _ bảng ( ds_tên _cột) VALUES (các_ giá_trị ) [ câu hỏi con] Có thể bổ sung vào một tập các bản ghi là kết quả xử lý của một câu hỏi nào đó. VD: Chèn vào bảng SVG các sinh viên giỏi trong bảng SV. INSERT INTO SVG SELECT * FROM SV WHERE HL >= 8.0; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 2. Xoá bản ghi Có thể xoá một hay nhiều bản ghi thoả mãn một điều kiện nào đó. Dạng tổng quát: DELETE [tên_bảng] [FROM { Tên_bảng / Tên_ view}] [WHERE Biểu_ thức _điều _kiện] Ví dụ : Xoá những sinh viên có điểm HL kém (HL<=3.5): DELETE FROM SV WHERE HL<=3.5; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 3. Sửa đổi dữ liệu Sửa đổi các giá trị của các bản ghi theo một điều kiện nào đó: Dạng tổng quát : UPDATE [ tên_bảng] SET [ tên_cột = biểu_thức,...] FROM tên _ bảng WHERE Biểu _ thức _điều _kiện Ví dụ : Sửa điểm học lực của bạn Phan Ngọc Hà thành 8.5 UPDATE SV SET HL = 8.5 WHERE HT=‘ Phan Ngọc Hà’; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 4. Tạo chỉ mục. Việc tạo chỉ mục là tạo ra một bảng lưu trữ vị trí các bản ghi dựa trên giá trị tăng dần của một ( hay một số) cột nào đó. Việc này có tác dụng làm tăng tốc độ tìm kiếm thông tin trong CSDL. Dạng tổng quát : CREATE INDEX tên_bảng_chỉ_mục ON Tên_bảng ( tên _cột [ASC | DESC]); Bỏ chỉ mục thì sử dụng mệnh đề : DROP INDEX tên_chỉ_mục; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ví dụ : Tạo chỉ mục CMHT trên cột Ho_ten của bảng sinh viên: CREATE INDEX CMHT ON SV ( HT ASC); Ví dụ: Xoá chỉ mục CMHT ra khỏi bảng SV DROP INDEX CMHT; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 5. Tạo View của người sử dụng Tạo ra một khung nhìn của người sử dụng : Dạng tổng quát : CREATE VIEW Tên_View (Danh_ sách_ tên _cột) AS mệnh_đề_Select ; Ví dụ : Tạo View DSSVG gồm những sinh viên giỏi bao gồm thông tin về họ tên, ngày sinh, giới tính của các sinh viên từ bảng SV. CREATE VIEW DSSVG ( Hoten, NS, GT) AS SELECT HT , NS, GT FROM SV WHERE HL >= 8.0; TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí 6. SQL nhúng Có thể truy cập vào CSDL từ một ngôn ngữ lập trình bậc cao nếu có SQL "nhúng" trong ngôn ngữ này. Một ngôn ngữ trong đó các câu hỏi được SQL được nhúng vào gọi là ngôn ngữ chủ, còn các cấu trúc của SQL được phép trong ngôn ngữ này làm thành SQL nhúng - Sơ đồ xử lý các chương trình có nhúng câu lệnh SQL: TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí Ngôn ngữ chủ + SQL nhúng Tiền xử lý Ngôn ngữ chủ Các lời gọi hàm Biên dịch ngôn ngữ chủ Thư viện SQL Chương trình ngôn ngữ chủ + TopTaiLieu.Com | Chia Sẻ Tài Liệu Miễn Phí
File đính kèm:
- bai_giang_co_so_du_lieu_bai_5_ngon_ngu_csdl_sql_vu_van_dinh.pdf