Bài giảng Hệ quản trị cơ sở dữ liệu - Chương III: Ngôn ngữ SQL - Nguyễn Nhật Minh

pdf 22 trang phuongnguyen 2970
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ quản trị cơ sở dữ liệu - Chương III: Ngôn ngữ SQL - Nguyễn Nhật Minh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_he_quan_tri_co_so_du_lieu_chuong_iii_ngon_ngu_sql.pdf

Nội dung text: Bài giảng Hệ quản trị cơ sở dữ liệu - Chương III: Ngôn ngữ SQL - Nguyễn Nhật Minh

  1. CHƯƠNG III: NGÔN NGỮ SQL SQL (Structured Query Language) – ngôn ngữ truy vấn có cấu trúc là ngôn ngữ con dữ liệu quan hệ rất mạnh, dễ sử dụng. Hiện nay SQL được được cài đặt trong hầu hết các phần mềm hệ quản trị CSDL như Oracle, Dbase, Access, Foxpro, SQL server
  2. Các câu lệnh trong ngôn ngữ SQL được chia thành hai loại: • Các câu lệnh định nghĩa dữ liệu cho phép tạo các thành phần trong CSDL như bảng, cột (thuộc tính) và các chỉ dẫn. • Các câu lệnh thao tác dữ liệu để lấy về các mẫu tin (bản ghi) từ cơ sở dữ liệu
  3. 3.1. Các câu lệnh định nghĩa dữ liệu:
  4. Tạo bảng Câu lệnh tạo bảng có dạng tổng quát: CREATE TABLE Tablename(FieldName DataType [Not null], ) Trong đó: • FieldName là một từ đơn không có khoảng trống, bắt đầu là chữ cái tiếp theo là chữ cái (hoa hoặc thường) hoặc chữ số hoặc dấu nối. • DataType là kiểu dữ liệu
  5. Ví dụ: CREATE TABLE Sinhvien(Masv smalliterger, Ho char(18), Ten char(8), Ngsinh date, Gtinh char(3), Mtinh char(3), Mhuyen char(3), Mlop char(3), Cogiadinh logical)
  6. Thêm một trường mới ALTER TABLE ADD [COLUMN] DATATYPE( ) ADD [COLUMN] DATATYPE( ) Thêm vào bảng các trường mới có tên là có kiểu dữ liệu là DATATYPE với độ rộng là một cách tương ứng. Ví dụ: ALTER TABLE Sinhvien ADD Nganh char(3) ADD Ngaynhaphoc date
  7. Xoá bảng DROP TABLE TableName Xoá bảng được chỉ định bởi tên (TableName) ra khỏi CSDL • Ví dụ: • DROP TABLE SINHVIEN
  8. 3.2. Các câu lệnh truy tìm dữ liệu
  9. Dạng tổng quát của câu lệnh truy tim dữ liệu có dạng: SELECT *|[Field1|Expression1 [AS alias1], Field2| Expression2 [AS alias2], FieldN| ExpressionN [AS aliasN]] [DISTINCT] [FROM Table1 | View1, Table2 | View2, ,TableN | ViewN] [WHERE ] [GROUPE BY Field1, Field2, ,FieldN] [HAVING ] [ORDER BY [ASC | DESC]]
  10. Giải thích ý nghĩa các thành phần SELECT Xác định, tìm kiếm nội dung thông tin từ các trường: Dấu “*” hiểu là từ tất cả các trường. FROM Xác định nguồn thông tin: Thông tin có thể từ các bảng hoặc các khung nhìn trong danh sách liệt kê WHERE Xác định điều kiện: Điều kiện là một biểu thức Boolean, chỉ các bản ghi (bộ|hàng) thoả mãn điều kiện mới được đưa ra Mẫu câu lệnh thường dùng nhất là: SELECT *|[Field1|Expression1 [AS alias1], Field2| Expression2 [AS alias2], FieldN| ExpressionN [AS aliasN]] [DISTINCT] [FROM Table1 | View1, Table2 | View2, ,TableN | ViewN] [WHERE ]
  11. • GROUPE BY Phân nhóm hoặc gộp nhóm dữ liệu trong bảng: Có nghĩa rằng các bản ghi (bộ|hàng) có cùng giá trị trường sẽ được gộp thành nhóm, trong quan hệ kết quả ta chỉ thấy các giá trị đại diện của nhóm. Chú ý rằng danh sách cột sau mệnh đề GROUPE BY phải bao hàm danh sách trường sau mệnh đề SELECT. • HAVING thường đi kèm với GROUPE BY trong đó biểu thức điều kiện , trong quan hệ kết quả chỉ chứa các hàng thoả điều kiện . Trong biểu thức điều kiện (xem ) nếu có chứa toán hạng là một biến trường thì biến trường đó phải có mặt trong danh sách trường sau mệnh đề GROUPE BY. • ORDER BY [ASC | DESC] Khi tìm kiếm thông tin, các thông tin lấy về sẽ được sắp xếp theo giá trị của các cột chỉ ra trong danh sách theo thứ tự tăng nếu dùng ASC, giảm nếu dùng DESC (mặc định là ASC), các giá trị bằng nhau được sắp liên tiếp liền kề nhau. Nếu có nhiều trường thứ tự sắp xếp ưu tiên theo danh sách trường từ trái sang phải. Nếu trong lệnh có dùng GROUPE BY việc sắp xếp sẽ chỉ có tác dụng cho từng nhóm được tạo ra bởi GROUPE BY.
  12. Câu lệnh SQL với những tình huống phổ biến
  13. Tìm kiếm không điều kiện • SELECT * FROM Câu lệnh này có nghĩa rằng trả về tất cả các bản ghi với đầy đủ các trường của bảng chỉ ra bởi . Ví dụ: SELECT * FROM Sinhvien • SELECT FROM Câu lệnh này có nghĩa rằng trả về tất cả các bản ghi với các trường chỉ ra trong danh sách của bảng chỉ ra bởi . Ví dụ: SELECT ho, ten, lop, nganh FORM Sinhvien • SELECT DISTINCT FROM Câu lệnh này có nghĩa rằng trả về bản ghi với các trường chỉ ra trong danh sách của bảng chỉ ra bởi và không có bản ghi (bộ) nào trùng nhau. Ví dụ: SELECT Tinh, Huyen DISTINCT FROM Sinhvien
  14. Tìm kiếm theo điều kiện. dùng mệnh đề WHERE Ví dụ: SELECT Ho, Ten, Lop FROM Sinhvien WHERE nganh=404 Ví dụ: SELECT Ho, Ten, Lop FROM Sinhvien WHERE Mtinh BETWEEN “01” and “03” Ví dụ: SELECT Ho, Ten, Lop FROM Sinhvien WHERE nganh IN (“101”,”102”,”103”) Các phép so sánh, các phép toán BETWEEN, LIKE, IN được tổ hợp bởi các phép toán logic sẽ cho ta những mệnh đề logic biểu diễn các điều kiện phức tạp hơn trong phép lọc với mệnh đề WHERE. Ví dụ: SELECT Ho, Ten, Lop FROM Sinhvien WHERE Mtinh BETWEEN “01” and “03” and nganh IN (“101”,”103”) trong quan hệ kết quả gồm các cột ho, ten, lop các sinh viên có que quán thuộc các tỉnh có mã là 01, 02 hoặc 03 và có mã ngành học là 101 hoặc 103.
  15. Các câu lệnh truy vấn lồng Trong câu lệnh truy vấn (chính) thành phần sau HAVING hoặc WHERE ta lại có một câu lệnh SELECT gọi là câu lệnh SELECT phụ và ta nói có câu lệnh SELECT lồng.
  16. Biểu thức so sánh sau HAVING hoặc WHERE của các câu lệnh lồng có thể như sau: e[ANY | ALL | SOME] (SELECT ) trong đó e là biểu thức,  là phép so sánh nào đó, ANY hoặc SOME được hiểu là bất kỳ, ALL là tất cả Kết quả truy vấn ta sẽ được các mẩu tin của câu lệnh SELECT chính thoả mãn phép so sánh với bất kỳ (ANY | SOME) hoặc tất cả (ALL) mẩu tin thu được từ câu lệnh SELECT phụ Ví dụ: SELECT sobaodanh,hoten,nganh FROM Tuyensinh WHERE diemtong>= ALL(SELECT diemtong FROM Tuyensinh) Câu lệnh trên sẽ cho kết quả là danh sách những thí sinh đạt điểm cao nhất
  17. e [NOT] IN (SELECT ) ở đây e cũng là biểu thức. Kết quả của truy vấn là những bản ghi có giá trị bằng một giá trị trong kết quả của câu SELECT phụ. Ví dụ: SELECT DISTINCT MãsốNV FROM NHÂNVIÊN_DỰ ÁN WHERE (MãsốDA, Sốgiờ) IN (SELECT MãsốDA, Sốgiờ FROM NHÂNVIÊN_DỰ ÁN WHERE MãsốNV = ‘NV001’); Truy vấn này lấy ra mã nhân viêncủa tất cả các nhân viên có cặp (mãsốDA, Sốgiờ) bằng với nhân viên MãsốNV = ‘NV001’.
  18. [NOT] EXISTS (SELECT ) Kết quả của truy vấn là những bản ghi có mặt trong kết quả của câu SELECT phụ
  19. Nối nhiều bảng với mệnh đề INNER JOIN SELECT FROM Tablename1 INNER JOIN Tablename2 ON Tablename1.fieldname1  Tablename2.fieldname2 [WHERE ] Câu lệnh này tổ hợp bản ghi từ hai bảng Tablename1và Tablename2 nếu có giá trị so khớp bởi phép so sánh  các giá trị trên trường fieldname1 của bảng Tablename1 với trường fieldname2 của bảng Tablename2.
  20. Ví dụ có hai bảng sau KHACHHANG Makhach Hoten Congty 001 Trần Văn Chung Hoàng Hà 002 Nguyễn Tứ Kỳ Đông Đô 003 Lê Hồng Hải Bình Minh DONHANG Makhach Sodonhang 001 123 005 127 003 125
  21. Câu lệnh sau: SELECT Makhach, Hoten, Congty, Sodonhang FROM Khachhang INNER JOINT Donhang ON Khachhang.Makhach=Donhang.Makhach sẽ cho kết quả là: Makhach Hoten Congty Sodonhang 001 Trần Văn Chung Hoàng Hà 123 003 Lê Hồng Hải Bình Minh 125
  22. Các câu lệnh cập nhật dữ liệu • Nhập dữ liệu INSERT INTO TableName(Field1, Fiel2, Fieldn) VALUES (Val1, Val2, Valn) Khi các trường có vị trí cố định thì lệnh nhập có thể viết ngắn gọn: INSERT INTO TableName VALUES (Val1, Val2, Valn) Ví dụ: • Xoá bản ghi DELETE FROM [WHERE ] Xoá bản ghi thoả mãn điều kiện của mệnh đề WHERE của bảng Ví dụ: • Sửa đổi dữ liệu UPDATE SET WHERE . Các trường (sau SET) của những bản ghi thoả mãn của bảng được thay thế bằng các giá trị của biểu thức tương ứng.