Bài trước: CSDL_Thực hành (5) - Tạo khóa ngoại, nhập liệu
-----
6. Truy vấn dữ liệu
Truy vấn dữ liệu là quá trình tìm kiếm, lấy ra và xử lý thông tin từ một nguồn dữ liệu, thường là cơ sở dữ liệu.
Mục đích chính của truy vấn dữ liệu:
- Lấy thông tin cần thiết: giúp người dùng hoặc ứng dụng tìm kiếm và lấy ra thông tin cụ thể từ một lượng lớn dữ liệu được lưu trữ.
- Phân tích dữ liệu: có thể được sử dụng để lọc, sắp xếp, tính toán và tổng hợp dữ liệu, giúp người dùng hiểu rõ hơn về dữ liệu.
- Báo cáo dữ liệu: được sử dụng để tạo ra các báo cáo dữ liệu, hiển thị dữ liệu theo định dạng dễ hiểu.
- Tự động hóa tác vụ: có thể được sử dụng để tự động hóa các tác vụ quản lý dữ liệu, chẳng hạn như cập nhật dữ liệu, xóa dữ liệu hoặc tạo bản sao lưu dữ liệu.
6.1 Phép chọn
Phép chọn (SELECT) là gì?
Trong SQL (Structured Query Language), phép chọn (SELECT) là một trong những lệnh cơ bản và quan trọng nhất, được sử dụng để truy xuất dữ liệu từ một hoặc nhiều bảng trong cơ sở dữ liệu.
Chức năng chính của phép chọn:
- Truy xuất dữ liệu: lệnh SELECT cho phép bạn lấy dữ liệu từ các cột cụ thể hoặc tất cả các cột trong một bảng.
- Lọc dữ liệu: bạn có thể sử dụng mệnh đề WHERE để lọc dữ liệu dựa trên các điều kiện cụ thể.
- Sắp xếp dữ liệu: mệnh đề ORDER BY cho phép bạn sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần.
- Nhóm dữ liệu: mệnh đề GROUP BY cho phép bạn nhóm các bản ghi có giá trị giống nhau trong một cột.
- Kết hợp dữ liệu: lệnh SELECT có thể được sử dụng để kết hợp dữ liệu từ nhiều bảng khác nhau bằng cách sử dụng các phép kết nối (JOIN).
Cú pháp cơ bản:
SELECT cột1, cột2, ...
FROM tên_bảng
WHERE điều_kiện
ORDER BY cột1 [ASC|DESC]
GROUP BY cột1, cột2, ...
Ví dụ 1:
--query1: Lập danh sách | cho biết các nhân viên đang làm việc tại chi nhánh có mã chi nhánh là '01'
Select *
From NhanVien
Where MSCN = '01'
Hiểu lệnh trên như sau: duyệt dữ liệu trong bảng NhanVien (From NhanVien), chọn ra (Select) các hàng có giá trị tại cột MSCN là ‘01’ (Where MSCN = ‘01’), hiển thị kết quả gồm toàn bộ các giá trị của hàng được chọn (*) (hiển thị giá trị ở tất cả các cột trong bảng).
Kết quả:
MaNV Ho Ten NgaySinh NgayVaoLam MSCN
0001 Lê Văn Minh 1960-06-10 00:00:00.000 1986-05-02 00:00:00.000 01
0002 Nguyễn Thị Mai 1970-04-20 00:00:00.000 2001-07-04 00:00:00.000 01
Bạn để ý, dữ liệu khi nhập vào cho cột NgaySinh và NgayVaoLam chỉ có ngày/tháng/năm. Nhưng kết quả xuất ra của lệnh select lại có kiểu định dạng năm/tháng/ngày giờ-phút-giây. Làm sao để xuất theo định dạng ngày/tháng/năm.
Chúng ta sẽ sử dụng hàm convert():
select MaNV, Ho, Ten, convert(char(10), NgaySinh, 103) as NgaySinh, convert(char(10), NgayVaoLam, 103) as NgayVaoLam, MSCN
from NhanVien
where MSCN = '01'
Kết quả:
MaNV Ho Ten NgaySinh NgayVaoLam MSCN
0001 Lê Văn Minh 10/06/1960 02/05/1986 01
0002 Nguyễn Thị Mai 20/04/1970 04/07/2001 01
Cú pháp của hàm convert()
convert(data_type(length), expression, style)
Ví dụ:
convert(char(10), NgaySinh, 103) as NgaySinh
- convert: đổi kiểu dữ liệu
- data_type(length): kiểu dữ liệu đích
- expression: kiểu dữ liệu nguồn
- Định dạng dữ liệu đích
- as: đặt tên mới cho cột dữ liệu
- 103 là mã định dạng kiểu dd/mm/yyyy
Ví dụ 2:
--query2: Cho biết các nhân viên sinh sau năm 1975
select MaNV, Ho, Ten, convert(char(10), NgaySinh, 103) as NgaySinh, convert(char(10), NgayVaoLam, 103) as NgayVaoLam, MSCN
from NhanVien
where year(NgaySinh) > 1975
Kết quả:
MaNV Ho Ten NgaySinh NgayVaoLam MSCN
0005 Lý Anh Hân 01/12/1980 15/05/2004 02
0006 Phan Lê Tuấn 04/06/1976 25/10/2002 03
Giải thích: duyệt từng hàng dữ liệu trong bảng NhanVien, dùng hàm year(NgaySinh) để có được năm sinh của mỗi hàng, hàng nào có year(NgaySinh) > 1975 thì chọn để xuất ra kết quả.
Ví dụ 3:
--query3: cho biết các nhân viên có họ Lê
--cách 1, dùng hàm left và toán tử so sánh =
Select MaNV, Ho, Ten, convert(char(10), NgaySinh, 103) as NgaySinh,
convert(char(10), NgayVaoLam, 103) as NgayVaoLam, MSCN
From NhanVien
Where left(Ho,2) = N'Lê'
Kết quả:
MaNV Ho Ten NgaySinh NgayVaoLam MSCN
0001 Lê Văn Minh 10/06/1960 02/05/1986 01
0003 Lê Anh Tuấn 25/06/1975 01/09/1982 02
0007 Lê Tuấn Tú 15/08/1975 15/08/2000 03
Giải thích:
Hàm left(Ho,2): lấy 2 ký tự tính từ bên trái của cột Ho, nếu bằng với chuỗi ‘Lê’ thì chọn hàng dữ liệu tương ứng
--Cách 2, dùng toán tử like (khớp mẫu)
Select MaNV, Ho, Ten, convert(char(10), NgaySinh, 103) as NgaySinh,
convert(char(10), NgayVaoLam, 103) as NgayVaoLam, MSCN
From NhanVien
Where Ho like N'Lê %'
Giải thích:
Toán tử LIKE trong SQL được sử dụng để tìm kiếm các chuỗi ký tự khớp với một mẫu cụ thể. Nó thường được sử dụng trong mệnh đề WHERE của câu lệnh SELECT, UPDATE hoặc DELETE để lọc các hàng dựa trên sự khớp mẫu. Đọc thêm về các mẫu khớp (pattern).
Các ký tự đại diện (wildcards) thường được sử dụng với LIKE:
- %: đại diện cho không (0) hoặc nhiều ký tự bất kỳ.
- _: đại diện cho một ký tự bất kỳ.
Ví dụ 4:
--query4: Cho biết các nhân viên có họ Lê làm việc tại chi nhánh '03'
Select MaNV, Ho, Ten, convert(char(10), NgaySinh, 103) as NgaySinh,
convert(char(10), NgayVaoLam, 103) as NgayVaoLam, MSCN
From NhanVien
Where MSCN = '03' and Ho like N'Lê %'
Kết quả:
MaNV Ho Ten NgaySinh NgayVaoLam MSCN
0007 Lê Tuấn Tú 15/08/1975 15/08/2000 03
Giải thích:
Sử dụng toán tử and để kết hợp 2 điều kiện trong Where
6.2 Bài tập
Bài tập 6.1 Thực hiện lại các truy vấn chọn.
Câu hỏi 6.2 Phép chọn (SELECT) trong SQL được sử dụng để làm gì? Phát biểu nào sau đây không đúng?
A. Lệnh SELECT cho phép lấy dữ liệu từ các cột cụ thể hoặc tất cả các cột trong một bảng.
B. Mệnh đề WHERE được sử dụng để lọc dữ liệu dựa trên các điều kiện cụ thể.
C. Mệnh đề ORDER BY được sử dụng để nhóm các bản ghi có giá trị giống nhau trong một cột.
D. Mệnh đề GROUP BY cho phép nhóm các bản ghi có giá trị giống nhau trong một cột.
-----
Cập nhật: 19/3/2025
-----
Bài sau: