+ Gồm 3 mệnh đề SELECT <danh sách các cột> FROM <danh sách các bảng> WHERE <điều kiện> Tên các cột cần được hiển thị trong kết quả truy vấn Tên các bảng liên quan đến câu truy vấn Biểu thức boolean xác định dòng nào sẽ được rút trích Nối các biểu thức: AND, OR, và NOT Phép toán: < , > , <= , >=, <> , =,LIKE và BETWEEN SQL và đại số quan hệ
Câu lệnh SELECT được dùng để truy xuất dữ liệu từ một bảng. Kết quả trả về dưới dạng bảng được lưu trong 1 bảng, gọi là bảng kết quả - result table (còn được gọi là tập kết quả - result set). a) Cú pháp Cú pháp của câu lệnh SELECT như sau: SELECT tên_các_cộtFROM tên_bảng b) Truy xuất nhiều cột Để truy xuất các cột mang tên LastName và FirstName, ta dùng một câu lệnh SELECT như sau: SELECT LastName, FirstName FROM Persons Bảng Persons: Kết quả trả về: c) Truy xuất tất cả các cột Để truy xuất tất cả các cột từ bảng Persons, ta dùng ký hiệu * thay cho danh sách các cột: SELECT * FROM Persons Kết quả trả về:
d) Tập kết quả Kết quả trả về từ một câu truy vấn SQL được lưu trong 1 tập kết quả (result set). Hầu hết các hệ thống chương trình CSDL cho phép duyệt qua tập kết quả bằng các hàm lập trình như Move-To-First-Record, Get-Record-Content, Move-To-Next-Record v.v... e) Dấu chẩm phảy (;) phía sau câu lệnh Dấu chẩm phảy là một cách chuẩn để phân cách các câu lệnh SQL nếu như hệ thống CSDL cho phép nhiều câu lệnh SQL được thực thi thông qua một lời gọi duy nhất. Các câu lệnh SQL trong bài viết này đều là các câu lệnh đơn (mỗi câu lệnh là một và chỉ một lệnh SQL). MS Access và MS SQL Server không đỏi hỏi phải có dấu chấm phảy ngay sau mỗi câu lệnh SQL, nhưng một số chương trình CSDL khác có thể bắt buộc bạn phải thêm dấu chấm phảy sau mỗi câu lệnh SQL (cho dù đó là câu lệnh đơn). Xin nhắc lại, trong bài viết này chúng ta sẽ không dùng dấu chấm phảy ở cuối câu lệnh SQL.
Mệnh đề WHERE được dùng để thiết lập điều kiện truy xuất. Để truy xuất dữ liệu trong bảng theo các điều kiện nào đó, một mệnh đề WHERE có thể được thêm vào câu lệnh SELECT. a) Cú pháp Cú pháp mệnh đề WHERE trong câu lệnh SELECT như sau: SELECT tên_cột[,…] FROM tên_bảng[,…]WHERE tên_cột phép_toán giá_trị[and/or …] Trong mệnh đề WHERE, các phép toán được sử dụng là Phép toán Mô tả= So sánh bằng<> So sánh không bằng> Lớn hơn< Nhỏ hơn>= Lớn hơn hoặc bằng<= Nhỏ hơn hoặc bằngBETWEEN Nằm giữa một khoảngLIKE So sánh mẫu chuỗi Lưu ý: Trong một số phiên bản của SQL, phép toán <> có thể được viết dưới dạng != b) Sử dụng mệnh đề WHERE Để lấy danh sách những người sống ở thành phố Sandnes, ta sử dụng mệnh đề WHERE trong câu lệnh SELECT như sau: SELECT * FROM PersonsWHERE City = 'Sandnes' Bảng Persons: Kết quả trả về: c) Sử dụng dấu nháy Lưu ý rằng ở ví dụ trên ta đã sử dụng hai dấu nháy đơn (') bao quanh giá trị điều kiện 'Sandnes'. SQL sử dụng dấu nháy đơn bao quanh các giá trị ở dạng chuỗi văn bản (text). Nhiều hệ CSDL còn cho phép sử dụng dấu nháy kép ("). Các giá trị ở dạng số không dùng dấu nháy để bao quanh. Với dữ liệu dạng chuỗi văn bản: Câu lệnh đúng:SELECT * FROM Persons WHERE FirstName = 'Tove' Câu lệnh sai:SELECT * FROM Persons WHERE FirstName = Tove Với dữ liệu dạng số: Câu lệnh đúng:SELECT * FROM Persons WHERE Year > 1965 Câu lệnh sai:SELECT * FROM Persons WHERE Year > '1965' d) Toán tử Like Toán tử like được sử dụng trong trường hợp so sánh gần đúng, có thể sử dụng các toán tử đại diện(wildcard operators) trong bảng dưới đây
Mệnh đề ORDER BY được sử dụng để sắp xếp kết quả trả về. Sắp xếp các dòng Mệnh đề ORDER BY được dùng để sắp xếp các dòng. Ví dụ bảng Orders:
Ví dụ: Để lấy danh sách các công ty theo thứ tự chữ cái (tăng dần): SELECT Company, OrderNumber FROM OrdersORDER BY Company Kết quả trả về: Ví dụ: Lấy danh sách các công ty theo thứ tự chữ cái (tăng dần) và hoá đơn đặt hàng theo thứ tự số tăng dần: SELECT Company, OrderNumber FROM OrdersORDER BY Company, OrderNumber Kết quả trả về: Ví dụ: Lấy danh sách các công ty theo thứ tự giảm dần: SELECT Company, OrderNumber FROM OrdersORDER BY Company DESC Kết quả trả về:
Trong quá trình truy vấn, dữ liệu có thể được lấy từ một hoặc nhiều bảng trong CSDL, nếu số lượng bảng từ 2 trở lên chúng ta phải thực hiện việc kết nối giữa các bảng, biểu thức kết nối ta sẽ đặt trong mệnh đề where (ở đây chúng ta đang đề cập đến kết nối bằng) Quay trở lại với CSDL quản lý vật tư trong bài 10, giả sử muốn hiển thị tên nhân viên đã xuất vật tư trong ngày ‘12/07/2008’, chúng ta sẽ thiết kế câu truy vấn như sau: SELECT TEN_NV FROM NHAN_VIEN, PHIEU_XUATWHERE MA_NV = MANV_XUAT AND NGAY_XUAT ='08/12/2008' Câu truy vấn trên thực hiện trên hai bảng là NHAN_VIEN và PHIEU_XUAT, điều kiện kết nối giữa hai bảng là MA_NV = MANV_XUAT.
Cho các bảng trong cơ sở dữ liệu quản lý vật tư ( hình vẽ ở dưới )
Hãy viết các câu truy vấn để trả lời các câu hỏi sau
|