Học SQL Server cơ bản

Bài 11: Truy vấn dữ liệu trong SQL Server (Phần 2)

Truy vấn dữ liệu trong SQL Server là thao tác trích xuất thông tin được lưu trữ trong các Table. Thông tin được truy xuất thông qua các cột và thông tin cần trích xuất có thể thuộc một hoặc nhiều bảng.
Thao tác này được sử dụng rất nhiều trong các hệ thống phần mềm hoặc website, chẳng hạn khi các bạn đăng nhập vào facebook thì hệ thống sẽ thực hiện truy vấn dữ liệu để kiểm tra tích hợp lệ của tài khoản đăng nhập, ….
Ta thao tác các ví dụ trên cơ sở dữ liệu sau, các bạn chỉ cần copy và chạy đoạn mã sau trong SQL Server, chúng ta sẽ có một cơ sở dữ liệu để demo:
-- 1/ Tạo DB + Sử dụng DB
	Create Database BKitSoftware
	Go
	Use BKitSoftware
	Go
	
-- 2/ Tạo table + Khoá chính
	create table GIAOVIEN
	(
		MAGV nchar(3),
		HOTEN nvarchar(50),
		LUONG float,
		PHAI nchar(3),
		NGSINH date,
		DIACHI nchar(50),
		GVQLCM nchar(3),
		MABM nchar(4),
		primary key (MAGV)
	)

--Nhập data cho bảng GIAOVIEN
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
	values ('001',N'Nguyễn Hoài An',2000.0,N'Nam','1973-02-15',N'25/3 Lạc Long Quân, Q.10,TP HCM')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
	values ('002',N'Trần Trà Hương',2500.0,N'Nữ','1960-06-20',N'125 Trần Hưng Đạo, Q.1, TP HCM')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
	values ('003',N'Nguyễn Ngọc Ánh',2200.0,N'Nữ','1975-05-11',N'12/21 Võ Văn Ngân Thủ Đức, TP HCM',N'002')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
	values ('004',N'Trương Nam Sơn',2300.0,N'Nam','1959-06-20',N'215 Lý Thường Kiệt,TP Biên Hòa')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
	values ('005',N'Lý Hoàng Hà',2500.0,N'Nam','1954-10-23',N'22/5 Nguyễn Xí, Q.Bình Thạnh, TP HCM')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
	values ('006',N'Trần Bạch Tuyết',1500.0,N'Nữ','1980-05-20',N'127 Hùng Vương, TP Mỹ Tho',N'004')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI)
	values ('007',N'Nguyễn An Trung',2100.0,N'Nam','1976-06-05',N'234 3/2, TP Biên Hòa')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
	values ('008',N'Trần Trung Hiếu',1800.0,N'Nam','1977-08-06',N'22/11 Lý Thường Kiệt,TP Mỹ Tho',N'007')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
	values ('009',N'Trần Hoàng nam',2000.0,N'Nam','1975-11-22',N'234 Trấn Não,An Phú, TP HCM',N'001')
	Insert Into GIAOVIEN(MAGV,HOTEN,LUONG,PHAI,NGSINH,DIACHI,GVQLCM)
	values ('010',N'Phạm Nam Thanh',1500.0,N'Nam','1980-12-12',N'221 Hùng Vương,Q.5, TP HCM',N'007')
GO

--Cập nhật thêm dữ liệu cho bảng GIAOVIEN
	update GIAOVIEN
	set MABM = 'MMT'
	where (MAGV = '001')
	update GIAOVIEN
	set MABM = 'HTTT'
	where (MAGV = '002')
	update GIAOVIEN
	set MABM = 'HTTT'
	where (MAGV = '003')
	update GIAOVIEN
	set MABM = 'VS'
	where (MAGV = '004')
	update GIAOVIEN
	set MABM = N'VLĐT'
	where (MAGV = '005')
	update GIAOVIEN
	set MABM = 'VS'
	where (MAGV = '006')
	update GIAOVIEN
	set MABM = 'HPT'
	where (MAGV = '007')
	update GIAOVIEN
	set MABM = 'HPT'
	where (MAGV = '008')
	update GIAOVIEN
	set MABM = 'MMT'
	where (MAGV = '009')
	update GIAOVIEN
	set MABM = 'HPT'
	where (MAGV = '010')
	GO
Ta có bảng GIAOVIEN như sau:

6. SQL Between

BETWEEN được dùng để lấy dữ liệu trong một khoảng.
Cú pháp:
BETWEEN value1 AND value2;
Ví dụ, ta muốn lấy thông tin của các giáo viên có mức lương nằm trong khoảng từ 2000 đến 3000, ta sử dụng câu lệnh sau:
SELECT * FROM GIAOVIEN WHERE LUONG BETWEEN 2000 AND 3000

7. SQL Like

Mệnh đề LIKE trong SQL được sử dụng để so sánh một giá trị với các giá trị tương tự bởi sử dụng các toán tử wildcard. Có hai wildcard được sử dụng kết hợp với toán tử LIKE là:
  1. Ký hiệu phần trăm (%)
  2. Dấu gạch dưới (_)
Ký hiệu phần trăm biểu diễn 0, 1 hoặc nhiều ký tự. Ký tự dấu gạch dưới biểu diễn một số hoặc một ký tự đơn. Cú pháp:
SELECT FROM ten_bang
WHERE column LIKE 'XXXX%'

hoac 

SELECT FROM ten_bang
WHERE column LIKE '%XXXX%'

hoac

SELECT FROM ten_bang
WHERE column LIKE 'XXXX_'

hoac

SELECT FROM ten_bang
WHERE column LIKE '_XXXX'

hoac

SELECT FROM ten_bang
WHERE column LIKE '_XXXX_'
Ví dụ, ta muốn lấy thông tin của những giáo viên có họ bắt đầu bằng chữ N, câu lệnh như sau:
SELECT * FROM GIAOVIEN WHERE HOTEN LIKE 'N%'

8. SQL Order by

Mệnh đề ORDER BY trong SQL được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc theo thứ tự giảm dần, trên một hoặc nhiều cột. Một số Database sắp xếp kết quả truy vấn theo thứ tự tăng dần theo mặc định.  
Cú pháp cơ bản của mệnh đề ORDER BY trong SQL như sau:
SELECT danh_sach_cot 
FROM ten_bang 
[WHERE dieu_kien] 
[ORDER BY cot1, cot2, .. cotN] [ASC | DESC];
Ví dụ, sắp xếp giáo viên theo mức lương giảm dần:
SELECT * FROM GIAOVIEN ORDER BY LUONG DESC

9. SQL Group by

Mệnh đề GROUP BY trong SQL được sử dụng kết hợp với lệnh SELECT để sắp xếp dữ liệu đồng nhất vào trong các nhóm.
Trong SQL, mệnh đề GROUP BY theo sau mệnh đề WHERE trong một lệnh SELECT và ở trước mệnh đề ORDER BY.
Cú pháp:
SELECT cot1, cot2
FROM ten_bang
WHERE [ dieu_kien ]
GROUP BY cot1, cot2
ORDER BY cot1, cot2
Ví du, ta cần tính xem với mỗi mức lương thì có bao nhiêu người,
SELECT LUONG, COUNT(LUONG) FROM GIAOVIEN GROUP BY LUONG

10. SQL Having

Mệnh đề HAVING cho phép bạn chỉ định các điều kiện lọc kết quả nhóm nào sẽ xuất hiện trong kết quả cuối cùng.
Mệnh đề WHERE đặt các điều kiện vào các cột đã chọn, trong khi mệnh đề HAVING đưa ra các điều kiện đối với các nhóm được tạo bởi mệnh đề GROUP BY.  
Cú pháp:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
Ví dụ, ta cần tính số lượng người với mỗi mức lương, nhưng chỉ hiển thị những mức lương có từ 2 người trở lên, câu lệnh cần dùng sẽ là:
SELECT LUONG, COUNT(LUONG) FROM GIAOVIEN GROUP BY LUONG Having COUNT(LUONG) > 1;
Như vậy, thông qua bài học này, mình đã giới thiệu phần còn lại trong bài Truy vấn dữ liệu trong SQL Server. Cảm ơn các bạn đã đọc.