Cơ sở dữ liệu Demo
Trong khoá này, chúng ta sẽ sử dụng cơ sở dữ liệu mẫu được nhiều người biết đến là Northwind.
Bên dưới là một lựa chọn từ bảng “Customers”:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany | |
Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico | |
Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico | |
Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK | |
Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Ví dụ – Câu lệnh không có điều kiện ELSE
Vì ELSE là không bắt buộc nên câu lệnh có thể khuyết thiếu điều kiện này.
DECLARE @nhanvien_salary INT; SET @nhanvien_salary = 15000000; IF @nhanvien_salary < 10000000 PRINT 'Chuyen vien'; GO
Ở câu lệnh này, chương trình sẽ đưa ra kết quả là Chuyen vien nếu như biến @nhanvien_salary < 10000000. Không dùng ELSE khi bạn chắc chắn rằng lệnh này luôn đưa ra kết quả TRUE.
3) Trên bản ghi (record)
Nhớ thêm phần biểu thức điều kiện
Nhớ thêm phần ký tự thay thế
insert..values: thêm các bản ghi vào bảng
insert into SinhVien (MaSV, TenSV, QueQuan)values (1, N’Nguyễn Văn A’, 1)
insert..select: thêm các bản ghi từ bảng khác vào bảng
insert into DocGiaselect MaSV, TenSV, QueQuan from SinhVien insert into DocGia select MaGV, TenGV, QueQuan from GiaoVien
select..into: đưa kết quả lựa chọn vào bảng mới
select MaSV, TenSV, Dieminto SinhVienKha from SinhVien where Diem > 7.0
delete: xóa các bản ghi từ bảng
delete from SinhViendelete from SinhVien where MaSV=1234
truncate: xóa toàn bộ bản ghi của bảng
truncate table SinhVien
update: sửa các bản ghi trong bảng
update SinhVienset NhomTruong = 1 where MaSV < 4 update SinhVien set NhomTruong = 4 where (MaSV > 3 and MaSV < 8)
Nội dung chính
Để theo dõi tốt nhất bài này, bạn nên xem qua bài:
- Khởi tạo và thao tác với DATABASE, TABLE trong SQL.
- KIỂU DỮ LIỆU trong SQL.
- Insert, Delete, Update Table trong SQL.
- KHÓA CHÍNH, KHÓA NGOẠI trong SQL.
- TRUY VẤN CƠ BẢN trong SQL.
Trong bài này, chúng ta sẽ cùng nhau tìm hiểu một số vấn đề sau:
- Database mẫu
- Giải bài tập truy vấn cơ bản
- Truy vấn có điều kiện
- Một số ví dụ khác
- Bài tập tự luyện
4) Truy vấn (query)
Hỗ trợ truy vấn: distinct, top, as, identity
Phép toán tập hợp: in, like, between
Các hàm tổng nhóm: sum, max, min, avg
4.1) Truy vấn đơn giản
select *: Hiện tất cả bảng
select *from SinhVien
select: Hiện một số cột
select TenSV, DiemTBfrom SinhVien
select..where: Hiện một số dòng / bản ghi
select TenSV, DiemTBfrom SinhVien where DiemTB > 6.0
select..order by: Hiện và sắp xếp theo điểm rồi theo tên
select TenSV, DiemTBfrom SinhVien order by DiemTB desc, TenSV asc // asc sắp sếp tăng dần, desc là giảm dần
select..distinct: Hiện danh sách giá trị không trùng lặp
select distinct QueQuanfrom SinhVien
select..top: Hiện các dòng đầu tiên trong bảng
select top 3 TenSV, DiemTBfrom SinhVien order by DiemTB desc, TenSV asc
4.2) Truy vấn lồng nhau (nested query)
select..where (select)
Hiện tất cả những người trong bảng nhân viên có lương bằng lương lớn nhất của những người có trong công ty:
select TenNV, Luongfrom NhanVien where Luong = (select max(Luong) from NhanVien)
select..where (in)
Hiện tất cả những người trong bảng nhân viên có lương lớn nhất hoặc lớn nhì của những người có trong công ty:
select TenNV, Luongfrom NhanVien where Luong in (select top 2 Luong from NhanVien order by Luong)
Câu lệnh select trong sẽ tạo ra một tập hai giá trị (top 2) đó là lương lớn nhất và lương lớn nhì. Và câu lệnh select thứ nhất sẽ chọn ra những người mà lương nằm trong tập lớn nhất và lớn nhì
select..where (in sub)
Hiện ra tất cả những người có lương lớn nhất phòng của anh ta (không phải lớn nhất trong công ty mà lớn nhất trong phòng hoặc đơn vị mà anh ta thuộc về)
select nv1.TenNV, nv1.Luongfrom NhanVien as nv1 where nv1.Luong = (select max(Luong) from NhanVien where Phong=nv1.Phong)
Câu lệnh select trong sẽ trả về giá trị lương lớn nhất nhưng không phải lớn nhất trong toàn công ty mà lớn nhất trong phòng của nv1. Sau đó câu lệnh select ngoài cùng sẽ xác định xem nv1 có được chọn không bằng cách kiểm tra lương anh ta với lương lớn nhất của phòng anh ta.
4.3) Truy vấn tổng nhóm (subtotal query / grouping query)
select..group by: Thống kê theo tiêu chí
Hiện ra số lượng các nhân viên ứng với từng quê
select QueQuan, count(*)from NhanVien group by QueQuan
Đếm số nam và số nữ trong công ty
select GioiTinh, count(*)from NhanVien group by GioiTinh
Tính tổng thu nhập theo từng phòng
select Phong, sum(Luong)from NhanVien group by Phong
select..having: Hiện ra một số nhóm phù hợp
Chỉ đếm số lượng người ở Hải Phòng và số lượng người ở Hà nội
select QueQuan, count(*)from NhanVien group by QueQuan having (QueQuan = ‘HP’, QueQuan = ‘HN’)
Chỉ hiện ra những phòng nào có tổng thu nhập lớn hơn 500000
select Phong, sum(Luong)from NhanVien group by Phong having sum(Luong) > 5000000
Chỉ hiện ra những tỉnh nào có số lượng người lớn hơn 10
select QueQuan, count(*)from NhanVien group by QueQuan having count(*) > 10
4.4) Truy vấn liên bảng (cross table query / joining query)
select..inner join: ghép các cặp bản ghi thỏa mãn điều kiện
Ghép bảng nhân viên và hiện ra tên nhân viên và tên địa phương
select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien inner join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP
select..left outer join: lấy tất cả phía trái và ghép (nếu có) với phải
Lấy tất cả những nhân viên kể cả những nhân viên có quê quán không hợp lệ (nghĩa là mã quê quán không có trong bảng địa phương)
select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien left outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP
select..right outer join: lấy tất cả phía phải và ghép (nếu có) với phía trái
Lấy tất cả những địa phương ghép với nhân viên, các địa phương không hợp lệ sẽ được ghép với bộ dữ liệu rỗng. Không hiện ra các nhân viên không có mã quê quán phù hợp
select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien right outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP
select..full outer join: lấy từ hai phía và ghép nếu có
Lấy tất cả những nhân viên (nếu không có quê quán phù hợp thì ghép với bộ dữ liệu rỗng) và tất cả những địa phương kể cả không có nhân viên.
select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien right outer join DiaPhuong on NhanVien.QueQuan = DiaPhuong.MaDP
select..cross join: trả về tất cả các cặp có thể ghép
Ghép từng nhân viên với tất cả các địa phương. Như vậy nếu có m nhân viên và có n địa phương thì bảng đích sẽ có m*n dòng. n dòng đầu cho nhân viên thứ nhất ghép với các địa phương. n dòng sau cho nhân viên thứ hai ghép với các địa phương. và tiếp tục như thế tới nhân viên thứ m.
select NhanVien.TenNV, DiaPhuong.TenDP from NhanVien cross join DiaPhuong
Các toán tử trong câu lệnh điều kiện WHERE
Các toán tử dưới đây có thể sử dụng trong câu lệnh điều kiện
WHERE
:
Toán tử | Mô tả |
Bằng | |
Không bằng. Lưu ý: Trong một số phiên bản SQL, toán tử này có thể được viết như sau != | |
Lớn hơn | |
Nhỏ hơn | |
Lớn hơn hoặc bằng | |
Nhỏ hơn hoặc bằng | |
Nằm giữa một khoảng | |
Tìn kiếm một mẫu | |
Để xác định nhiều giá trị có thể cho một cột |
IF ELSE – Lệnh rẽ nhánh
Nội dung
Dẫn nhập
Trong bài trước, Kteam đã hướng dẫn bạn cách TRUY VẤN CƠ BẢN TRONG SQL. Chúng ta đã biết cách truy vấn như thế nào? Lấy toàn bộ dữ liệu như thế nào? Xuất dữ liệu theo column mong muốn như thế nào? Gom nhiều table như thế nào?
Tuy nhiên, trong bài trước chúng ta còn vài vấn đề trong câu truy vấn còn vướng mắc, cùng Kteam giải quyết những vấn đề đó với TRUY VẤN CÓ ĐIỀU KIỆN nhé!
ref: Các khái niệm cơ bản của cơ sở dữ liệu
Các mô hình dữ liệu (data model)
+ Mô hình thứ bậc (hierarchical)
+ Mô hình mạng lưới (network)
+ Mô hình quan hệ (relational)
Các vấn đề của lưu trữ
+ Sự dư thừa (redundance)
+ Sự nhất quán (consistence)
+ Tính toàn vẹn (integrity)
+ Sự an toàn (security)
+ Sự chia sẻ (sharing)
Các khái niệm cơ bản
+ Cơ sở dữ liệu (database)
+ Bảng (table) hoặc quan hệ (relation)
+ Bản ghi (record) hoặc dòng (row) hoặc bộ (tuple)
+ Trường (field) hoặc cột (column)
+ Mối quan hệ (relationship) được biểu hiện bằng bảng (table) hoặc khóa (key)
Mối quan hệ giữa các
+ Tại sao phải lưu mối quan hệ
+ Phương pháp lưu các mối quan hệ (dùng khóa, dùng bảng)
+ Khóa chính (primary key) và khóa ngoài (foreign key)
+ Vấn đề toàn vẹn tham chiếu (referential integrity)
Ngôn ngữ định nghĩa và xử lý dữ liệu
+ Thao tác trên các đối tượng như cơ sở dữ liệu, bảng, cột
+ Phần định nghĩa cơ sở dữ liệu và bảng: create, drop, alter
+ Phần cập nhật dữ liệu: insert, delete, update
+ Phần truy vấn dữ liệu: join, union, projection, selection, sort, group
+ Phần lập trình và thao tác: declare, set, use, go
Giải bài tập truy vấn cơ bản
Trong phần cuối của bài Truy vấn cơ bản trong SQL chúng ta có một số câu thực hành tự luyện, sẽ được giải đáp ngay dưới đây sử dụng database mẫu Howkteam:
-
Truy xuất thông tin của Table Tham gia đề tài
SELECT * FROM dbo.THAMGIADT
-
Lấy ra Mã khoa và Tên khoa tương ứng
SELECT MAKHOA, TENKHOA FROM dbo.KHOA
-
Lấy ra Mã GV, tên GV và họ tên người thân tương ứng
SELECT GV.MAGV, HOTEN, NT.TEN FROM dbo.GIAOVIEN AS GV, dbo.NGUOITHAN AS NT
-
Lấy ra Mã GV, tên GV và tên khoa tương ứng mà giáo viên đó làm việc. (Gợi ý: Bộ môn nằm trong khoa)
SELECT gv.MAGV, gv.HOTEN, k.TENKHOA FROM dbo.GIAOVIEN AS GV,dbo.BOMON AS BM, dbo.KHOA AS K
Nếu đây là đáp án của bạn thì chúc mừng, bạn đã hoàn thành bài tập! Tuy nhiên, nếu bạn để ý, chúng ta có chút vấn đề nho nhỏ.
Theo dữ liệu sẵn có tại database Howkteam ta thấy mỗi giáo viên được đại diện bằng MaGV chỉ tương ứng với 0 – 3 Tên người thân.
Và mỗi MaGV chỉ ứng với một MaBM, Mỗi MaBM ứng với một MaKhoa.
Nhưng kết quả của câu 3 và 4 lại là tích Descartes đáp án mà bạn truy vấn được.
Vậy để có kết quả đúng có phải cần có điều kiện ràng buộc trong câu truy vấn? Cùng tìm hiểu cấu trúc câu truy vấn có điều kiện nào!
Lọc khi có nhiều hơn một điều kiện
Với lọc khi có nhiều hơn một điều kiện, ta có thể sử dụng toán tử AND và toán tử OR.
- Toán tử AND.
Toán tử AND nhằm kết hợp các điều kiện với nhau.
Cú pháp của AND:
WHERE Condition 1 AND Condition 2,…
- Condition 1, Condition 2: Điều kiện kết hợp.
Ví dụ: Từ bảng SalesLT.Product thuộc bộ dữ liệu adventureworks. Truy vấn các cột Name, Color, StandardCost, Weight. Với điều kiện cột StandardCost >= 1000 và cột Weight > 300.
- Toán tử OR.
Toán tử OR nhằm chọn hoặc thoả mãn điều kiện 1 hoặc điều kiện 2.
Cú pháp của AND:
WHERE Condition 1 OR Condition 2,…
- Condition 1, Condition 2: Điều kiện 1 hoặc điều kiện 2.
Ví dụ: Từ bảng SalesLT.Product thuộc bộ dữ liệu adventureworks. Truy vấn các cột Name, Color, StandardCost, Weight. Với điều kiện cột StandardCost >= 1000 hoặc cột Weight > 300.
- Trong SQL, mặc định cụm điều kiện AND sẽ được thực hiện trước OR.
Ví dụ: Từ bảng SalesLT.Product thuộc bộ dữ liệu adventureworks. Truy vấn các cột Name, Color, StandardCost, Weight. Với điều kiện cột StandardCost > 1000 hoặc cột Weight > 300 và StandardCost > 2000.
Giải thích câu lệnh truy vấn:
- FROM: Dữ liệu được lấy từ bảng SalesLT.Product.
- WHERE: Lọc bản ghi thoả mãn hoặc StandardCost >1000 hoặc cột Weight > 300 và StandardCost > 2000.
Trên thực tế, SQL sẽ chạy truy vấn điều kiện cột Weight > 300 và StandardCost > 2000, sau đó mới truy vấn điều kiện cột StandardCost >1000.
Database mẫu
Để thao tác tốt với bài này, chúng ta sử dụng database HowKteam sau:
-- 1/ Tạo DB + Sử dụng DB Create Database HowKteam Go Use HowKteam Go -- 2/ Tạo các table + Khoá chính Create Table THAMGIADT ( MAGV nchar(3), MADT nchar(4), STT int, PHUCAP float, KETQUA nvarchar(10), Primary Key (MAGV,MADT,STT) ) go Create Table KHOA ( MAKHOA nchar (4), TENKHOA nvarchar (50), NAMTL int, PHONG char(3), DIENTHOAI char(10), TRUONGKHOA nchar(3), NGAYNHANCHUC datetime, primary key (MAKHOA) ) go create table BOMON ( MABM nchar(4), TENBM nchar (50), PHONG char(3), DIENTHOAI char(11), TRUONGBM nchar(3), MAKHOA nchar (4), NGAYNHANCHUC date, primary key (MABM) ) go create table CONGVIEC ( MADT nchar(4), SOTT int, TENCV nvarchar(50), NGAYBD datetime, NGAYKT datetime, primary key (MADT,SOTT) ) go create table DETAI ( MADT nchar(4), TENDT nvarchar(50), CAPQL nchar(20), KINHPHI float, NGAYBD date, NGAYKT date, MACD nchar(4), GVCNDT nchar(3), primary key (MADT) ) go create table CHUDE ( MACD nchar(4), TENCD nvarchar(30), primary key (MACD) ) go 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) ) go create table NGUOITHAN ( MAGV nchar(3), TEN nchar(12), NGSINH datetime, PHAI nchar(3), primary key (MAGV,TEN) ) go create table GV_DT ( MAGV nchar(3), DIENTHOAI char (10), primary key (MAGV,DIENTHOAI) ) go -- 3/ Tạo khoá ngoại --Tạo khoá ngoại ở bảng THAMGIADT Alter table THAMGIADT add constraint FK_HG1_MADT foreign key (MADT, STT) references CONGVIEC(MADT,SOTT) go --Tạo khóa ngoại ở bảng CONGVIEC Alter table CONGVIEC add constraint FK_HG2_MADT foreign key (MADT) references DETAI(MADT) go --Tạo khóa ngoại ở bảng DETAI Alter table DETAI add constraint FK_HG3_MACD foreign key (MACD) references CHUDE(MACD) go --Tạo khóa ngoại ở bảng DETAI Alter table DETAI add constraint FK_HG4_GVCNDT foreign key (GVCNDT) references GIAOVIEN(MAGV) go --Tạo khóa ngoại ở bảng THAMGIADT Alter table THAMGIADT add constraint FK_HG5_MAGV foreign key (MAGV) references GIAOVIEN(MAGV) go --Tạo khóa ngoại ở bảng GIAOVIEN Alter table GIAOVIEN add constraint FK_HG6_GVQLCM foreign key (GVQLCM) references GIAOVIEN(MAGV) go --Tạo khóa ngoại ở bảng KHOA Alter table KHOA add constraint FK_HG7_TRUONGKHOA foreign key (TRUONGKHOA) references GIAOVIEN(MAGV) go --Tạo khóa ngoại ở bảng NGUOITHAN Alter table NGUOITHAN add constraint FK_HG8_MAGV foreign key (MAGV) references GIAOVIEN(MAGV) go --Tạo khóa ngoại ở bảng GIAOVIEN Alter table GIAOVIEN add constraint FK_HG9_MABM foreign key (MABM) references BOMON(MABM) go --Tạo khóa ngoại ở bảng BOMON Alter table BOMON add constraint FK_HG10_MAKHOA foreign key (MAKHOA) references KHOA(MAKHOA) go --Tạo khóa ngoại ở bảng BOMON Alter table BOMON add constraint FK_HG11_TRUONGBM foreign key (TRUONGBM) references GIAOVIEN(MAGV) go --Tạo khóa ngoại ở bảng GV_DT Alter table GV_DT add constraint FK_HG12_MAGV foreign key (MAGV) references GIAOVIEN(MAGV) go -- 4/ Nhập data --Nhập data cho bảng CHUDE Insert Into CHUDE(MACD,TENCD) values ('NCPT', N'Nghiên cứu phát triển') Insert Into CHUDE(MACD,TENCD) values ('QLGD', N'Quản lý giáo dục') Insert Into CHUDE(MACD,TENCD) values ('UDCN', N'Ứng dụng công nghệ') go --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 --Nhập data cho bảng DETAI Insert Into DETAI(MADT,TENDT,CAPQL,KINHPHI,NGAYBD,NGAYKT,MACD,GVCNDT) values ('001',N'HTTT quản lý các trường ĐH',N'ĐHQG',20.0,'2007-10-20','2008-10-20',N'QLGD','002') Insert Into DETAI(MADT,TENDT,CAPQL,KINHPHI,NGAYBD,NGAYKT,MACD,GVCNDT) values ('002',N'HTTT quản lý giáo vụ cho một Khoa',N'Trường',20.0,'2000-10-12','2001-10-12',N'QLGD','002') Insert Into DETAI(MADT,TENDT,CAPQL,KINHPHI,NGAYBD,NGAYKT,MACD,GVCNDT) values ('003',N'Nghiên cứu chế tạo sợi Nanô Platin',N'ĐHQG',300.0,'2008-05-15','2010-05-15',N'NCPT','005') Insert Into DETAI(MADT,TENDT,CAPQL,KINHPHI,NGAYBD,NGAYKT,MACD,GVCNDT) values ('004',N'Tạo vật liệu sinh học bằng màng ối người',N'Nhà nước',100.0,'2007-01-01','2009-12-31',N'NCPT','004') Insert Into DETAI(MADT,TENDT,CAPQL,KINHPHI,NGAYBD,NGAYKT,MACD,GVCNDT) values ('005',N'Ứng dụng hóa học xanh',N'Trường',200.0,'2003-10-10','2004-12-10',N'UDCN','007') Insert Into DETAI(MADT,TENDT,CAPQL,KINHPHI,NGAYBD,NGAYKT,MACD,GVCNDT) values ('006',N'Nghiên cứu tế bào gốc',N'Nhà nước',4000.0,'2006-10-12','2009-10-12',N'NCPT','004') Insert Into DETAI(MADT,TENDT,CAPQL,KINHPHI,NGAYBD,NGAYKT,MACD,GVCNDT) values ('007',N'HTTT quản lý thư viện ở các trường ĐH',N'Trường',20.0,'2009-05-10','2010-05-10',N'QLGD','001') go --Nhập data cho bảng CONGVIEC Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('001',1,N'Khởi tạo và Lập kế hoạch','2007-10-20','2008-12-20') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('001',2,N'Xác định yêu cầu','2008-12-21','2008-03-21') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('001',3,N'Phân tích hệ thống','2008-03-22','2008-05-22') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('001',4,N'Thiết kế hệ thống','2008-05-23','2008-06-23') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('001',5,N'Cài đặt thử nghiệm','2008-06-24','2008-10-20') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('002',1,N'Khởi tạo và lập kế hoạch','2009-05-10','2009-07-10') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('002',2,N'Xác định yêu cầu','2009-07-11','2009-10-11') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('002',3,N'Phân tích hệ thống','2009-10-12','2009-12-20') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('002',4,N'Thiết kế hệ thống','2009-12-21','2010-03-22') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('002',5,N'Cài đặt thử nghiệm','2010-03-23','2010-05-10') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('006',1,N'Lấy mẫu','2006-10-20','2007-02-20') Insert Into CONGVIEC(MADT,SOTT,TENCV,NGAYBD,NGAYKT) values ('006',2,N'Nuôi cấy','2007-02-21','2008-09-21') go --Nhập data cho bảng THAMGIADT Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP) values ('001','002',1,0.0) Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP) values ('001','002',2,2.0) Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP,KETQUA) values ('002','001',4,2.0,N'Đạt') Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP,KETQUA) values ('003','001',1,1.0,N'Đạt') Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP,KETQUA) values ('003','001',2,0.0,N'Đạt') Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP,KETQUA) values ('003','001',4,1.0,N'Đạt') Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP) values ('003','002',2,0.0) Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP,KETQUA) values ('004','006',1,0.0,N'Đạt') Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP,KETQUA) values ('004','006',2,1.0,N'Đạt') Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP,KETQUA) values ('006','006',2,1.5,N'Đạt') Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP) values ('009','002',3,0.5) Insert Into THAMGIADT(MAGV,MADT,STT,PHUCAP) values ('009','002',4,1.5) go --Nhập data cho bảng KHOA Insert Into KHOA(MAKHOA,TENKHOA,NAMTL,PHONG,DIENTHOAI,TRUONGKHOA,NGAYNHANCHUC) values (N'CNTT',N'Công nghệ thông tin',1995,'B11','0838123456','002','2005-02-20') Insert Into KHOA(MAKHOA,TENKHOA,NAMTL,PHONG,DIENTHOAI,TRUONGKHOA,NGAYNHANCHUC) values (N'HH',N'Hóa học',1980,'B41','0838456456','007','2001-10-15') Insert Into KHOA(MAKHOA,TENKHOA,NAMTL,PHONG,DIENTHOAI,TRUONGKHOA,NGAYNHANCHUC) values (N'SH',N'Sinh học',1980,'B31','0838454545','004','2000-10-11') Insert Into KHOA(MAKHOA,TENKHOA,NAMTL,PHONG,DIENTHOAI,TRUONGKHOA,NGAYNHANCHUC) values (N'VL',N'Vật lý',1976,'B21','0838223223','005','2003-09-18') go --Nhập data cho bảng NGUOITHAN Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('001',N'Hùng','1990-01-14',N'Nam') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('001',N'Thủy','1994-12-08',N'Nữ') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('003',N'Hà','1998-09-03',N'Nữ') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('003',N'Thu','1998-09-03',N'Nữ') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('007',N'Mai','2003-03-26',N'Nữ') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('007',N'Vy','2000-02-14',N'Nữ') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('008',N'Nam','1991-05-06',N'Nam') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('009',N'An','1996-08-19',N'Nam') Insert Into NGUOITHAN(MAGV,TEN,NGSINH,PHAI) values ('010',N'Nguyệt','2006-01-14',N'Nữ') go --Nhập data cho bảng GV_DT Insert Into GV_DT(MAGV,DIENTHOAI) values ('001','0838912112') Insert Into GV_DT(MAGV,DIENTHOAI) values ('001','0903123123') Insert Into GV_DT(MAGV,DIENTHOAI) values ('002','0913454545') Insert Into GV_DT(MAGV,DIENTHOAI) values ('003','0838121212') Insert Into GV_DT(MAGV,DIENTHOAI) values ('003','0903656565') Insert Into GV_DT(MAGV,DIENTHOAI) values ('003','0937125125') Insert Into GV_DT(MAGV,DIENTHOAI) values ('006','0937888888') Insert Into GV_DT(MAGV,DIENTHOAI) values ('008','0653717171') Insert Into GV_DT(MAGV,DIENTHOAI) values ('008','0913232323') go --Nhập data cho bảng BOMON Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA) values (N'CNTT',N'Công nghệ tri thức','B15','0838126126',N'CNTT') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA) values (N'HHC',N'Hóa hữu cơ','B44','0838222222',N'HH') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA) values (N'HL',N'Hóa Lý','B42','0838878787',N'HH') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC) values (N'HPT',N'Hóa phân tích','B43','0838777777','007',N'HH','2007-10-15') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC) values (N'HTTT',N'Hệ thống thông tin','B13','0838125125','002',N'CNTT','2004-09-20') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC) values (N'MMT',N'Mạng máy tính','B16','0838676767','001',N'CNTT','2005-05-15') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA) values (N'SH',N'Sinh hóa','B33','0838898989',N'SH') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,MAKHOA) values (N'VLĐT',N'Vật lý điện tử','B23','0838234234',N'VL') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC) values (N'VLUD',N'Vật lý ứng dụng','B24','0838454545','005',N'VL','2006-02-18') Insert Into BOMON(MABM,TENBM,PHONG,DIENTHOAI,TRUONGBM,MAKHOA,NGAYNHANCHUC) values (N'VS',N'Vi Sinh','B32','0838909090','004',N'SH','2007-01-01') 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
Ví dụ về câu lệnh điều kiện WHERE
Câu lệnh SQL bên dưới lựa chọn tất cả khách hàng đến từ quốc gia “Mexico”, trong bảng “Customers”:
Ví dụ
SELECT * FROM Customers WHERE Country='Mexico';
Kết quả (dựa vào mẫu 5 bản ghi ở trên):
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico | |
Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
Ví dụ
- Cú pháp 1:
DECLARE @ngay_sinh date = CAST(‘1970-01-13′ AS date) DECLARE @tuoi tinyint DECLARE @thong_bao nvarchar(100) = N’Bạn còn trẻ’ SET @tuoi = YEAR(GETDATE()) – YEAR(@ngay_sinh) IF @tuoi >= 50 BEGIN SET @thong_bao = N’Bạn đã già’ PRINT CONCAT(N’Tuổi: ‘,@tuoi) PRINT @thong_bao END
- Cú pháp 2:
DECLARE @ngay_sinh date = CAST(‘1971-01-13′ AS date) DECLARE @tuoi tinyint DECLARE @thong_bao nvarchar(100) SET @tuoi = YEAR(GETDATE()) – YEAR(@ngay_sinh) IF @tuoi >= 50 BEGIN SET @thong_bao = N’Bạn đã già’ PRINT CONCAT(N’Tuổi: ‘,@tuoi) PRINT @thong_bao END ELSE BEGIN SET @thong_bao = N’Bạn còn trẻ’ PRINT CONCAT(N’Tuổi: ‘,@tuoi) PRINT @thong_bao END
Trong các bài viết trước,
BAC
đã giới thiệu đến bạn đọc câu lệnh lấy dữ liệu trong SQL là SELECT. Tuy nhiên, nếu chỉ dùng SELECT thì việc lấy dữ liệu khá hạn chế và không thực sự chính xác. Vì thế, chúng ta sẽ cần thêm một mệnh đề điều kiện để lấy được những dữ liệu đúng nhu cầu công việc.
Mệnh đề WHERE trong SQL
Mệnh đề WHERE được dùng để lọc các bản ghi.
Nó thường được dùng để chỉ trích xuất các bản ghi đáp ứng những điều kiện cụ thể.
Lưu ý
: Mệnh đề WHERE chỉ được sử dụng trong câu lệnh SELECT, nó cũng được dùng trong UPDATE, DELETE,…!.
Ví dụ về mệnh đề WHERE
Để thực hiện ví dụ này, bạn cần nhập cơ sở dữ liệu mẫu Northwind vào SQL Server Management Studio. Hãy xem bài viết hướng dẫn ngay dưới đây:
Tham khảo:
Hướng dẫn tải và cài đặt dữ liệu mẫu Northwind trong SQL Server Management Studio
Câu lệnh SQL dưới đây sẽ chọn tất cả các khách hàng đến từ quốc gia Mexico trong bảng Customers:
SELECT * FROM Customers
WHERE Country = ‘Mexico’;
Các trường chữ và các trường số
SQL yêu cầu dấu ngoặc đơn xung quanh các giá trị văn bản (hầu hết các hệ thống cơ sở dữ liệu cũng sẽ cho phép dấu ngoặc kép).
Tuy nhiên, các trường số không được đặt trong dấu ngoặc kép.
Ví dụ:
SELECT * FROM Categories
WHERE CategoryID=1;
Các toán tử trong mệnh đề WHERE
Bạn có thể sử dụng các toán tử này để lấy được những dữ liệu mong muốn.
- (=) dấu bằng
- (>) dấu lớn hơn
- (<) dấu nhỏ hơn
- (>=) dấu lớn hơn hoặc bằng
- (<=) dấu nhỏ hơn hoặc bằng
- (<>) dấu không bằng, trong một vài phiên bản SQL có thể dùng dấu (!=)
- BETWEEN – giữa một phạm vi nhất định
- LIKE – Tìm kiếm một mẫu
- IN – Để chỉ định nhiều giá trị có thể có cho một cột
Bây giờ, bạn đã biết chính xác cách mệnh đề WHERE được dùng trong SQL. Hãy khám phá bằng cách sử dụng các toán tử để lấy các phần dữ liệu mà bạn mong muốn. Trong một số trường hợp bạn có thể gặp lỗi do kiểu dữ liệu không phù hợp, chúng ta sẽ nhắc đến trong các bài viết khác sẽ được cập nhật tại website
bacs.vn
, đừng quên đón đọc.
Nguồn tham khảo:
Nhu cầu đào tạo doanh nghiệp
BAC
là đơn vị đào tạo BA đầu tiên tại Việt Nam. Đối tác chính thức của
IIBA
quốc tế. Ngoài các khóa học public,
BAC
còn có các khóa học in house dành riêng cho từng doanh nghiệp. Chương trình được thiết kế riêng theo yêu cầu của doanh nghiệp, giúp doanh nghiệp giải quyết những khó khăn và tư vấn phát triển.
Tham khảo chương trình đào tạo:
BAC – Biên soạn và tổng hợp nội dung
Trong các bài viết trước,
BAC
đã giới thiệu đến bạn đọc câu lệnh lấy dữ liệu trong SQL là SELECT. Tuy nhiên, nếu chỉ dùng SELECT thì việc lấy dữ liệu khá hạn chế và không thực sự chính xác. Vì thế, chúng ta sẽ cần thêm một mệnh đề điều kiện để lấy được những dữ liệu đúng nhu cầu công việc.
Mệnh đề WHERE trong SQL
Mệnh đề WHERE được dùng để lọc các bản ghi.
Nó thường được dùng để chỉ trích xuất các bản ghi đáp ứng những điều kiện cụ thể.
Lưu ý
: Mệnh đề WHERE chỉ được sử dụng trong câu lệnh SELECT, nó cũng được dùng trong UPDATE, DELETE,…!.
Ví dụ về mệnh đề WHERE
Để thực hiện ví dụ này, bạn cần nhập cơ sở dữ liệu mẫu Northwind vào SQL Server Management Studio. Hãy xem bài viết hướng dẫn ngay dưới đây:
Tham khảo:
Hướng dẫn tải và cài đặt dữ liệu mẫu Northwind trong SQL Server Management Studio
Câu lệnh SQL dưới đây sẽ chọn tất cả các khách hàng đến từ quốc gia Mexico trong bảng Customers:
SELECT * FROM Customers
WHERE Country = ‘Mexico’;
Các trường chữ và các trường số
SQL yêu cầu dấu ngoặc đơn xung quanh các giá trị văn bản (hầu hết các hệ thống cơ sở dữ liệu cũng sẽ cho phép dấu ngoặc kép).
Tuy nhiên, các trường số không được đặt trong dấu ngoặc kép.
Ví dụ:
SELECT * FROM Categories
WHERE CategoryID=1;
Các toán tử trong mệnh đề WHERE
Bạn có thể sử dụng các toán tử này để lấy được những dữ liệu mong muốn.
- (=) dấu bằng
- (>) dấu lớn hơn
- (<) dấu nhỏ hơn
- (>=) dấu lớn hơn hoặc bằng
- (<=) dấu nhỏ hơn hoặc bằng
- (<>) dấu không bằng, trong một vài phiên bản SQL có thể dùng dấu (!=)
- BETWEEN – giữa một phạm vi nhất định
- LIKE – Tìm kiếm một mẫu
- IN – Để chỉ định nhiều giá trị có thể có cho một cột
Bây giờ, bạn đã biết chính xác cách mệnh đề WHERE được dùng trong SQL. Hãy khám phá bằng cách sử dụng các toán tử để lấy các phần dữ liệu mà bạn mong muốn. Trong một số trường hợp bạn có thể gặp lỗi do kiểu dữ liệu không phù hợp, chúng ta sẽ nhắc đến trong các bài viết khác sẽ được cập nhật tại website
bacs.vn
, đừng quên đón đọc.
Nguồn tham khảo:
Nhu cầu đào tạo doanh nghiệp
BAC
là đơn vị đào tạo BA đầu tiên tại Việt Nam. Đối tác chính thức của
IIBA
quốc tế. Ngoài các khóa học public,
BAC
còn có các khóa học in house dành riêng cho từng doanh nghiệp. Chương trình được thiết kế riêng theo yêu cầu của doanh nghiệp, giúp doanh nghiệp giải quyết những khó khăn và tư vấn phát triển.
Tham khảo chương trình đào tạo:
BAC – Biên soạn và tổng hợp nội dung
Huy Bui
6,484
19-04-2022
Cùng Cole điểm mặt 26 câu lệnh phổ biến trong câu lệnh sql, lưu về và dùng ngay nhé. Tham khảo khóa học SQL data analyst Cole tại đây: https://blog.cole.vn/khoa-hoc-sql-cho-data-analyst/
SELECT là lệnh được dùng để lấy kết quả từ một; hoặc nhiều bảng trong CSDL của SQL Server.
Cú pháp lệnh SELECT
Ở dạng đơn giản, cú pháp của lệnh SELECT như sau: SELECT “biểu thức” FROM “bảng” [WHERE “điều kiện”]; Ở dạng đầy đủ, cú pháp của lệnh SELECT trong SQL Server sẽ là: SELECT [ ALL | DISTINCT ] [ TOP (gia_tri_dau) [ PERCENT ] [ WITH TIES ] ] “Biểu thức” FROM “bảng” [WHERE “điều kiện”] [GROUP BY “biểu thức”] [HAVING “điều kiện”] [ORDER BY “biểu thức” [ ASC | DESC ]]; Tên biến hoặc giá trị biến: ALL: Tùy chọn. Trả lại tất cả các hàng phù hợp. DISTINCT: Tùy chọn. Loại bỏ tất cả các giá trị trùng lặp khỏi bộ kết quả. TOP (gia_tri_dau): Tùy chọn. Nếu chỉ định cụ thể sẽ trả về những giá trị đầu trong bộ kết quả dựa trên gia_tri_dau đã chon. Ví dụ TOP(10) sẽ trả về 10 hàng đầu tiên trong bộ kết quả. PERCENT: Tùy chọn. Nếu chỉ định cụ thể thì các hàng đầu tiên dựa theo phần trăm trên bộ kết quả (chỉ định bằng gia_tri_dau). Ví dụ TOP(10) PERCENT sẽ trả về top 10% kết quả đầu tiên trong bộ kết quả. WITH TIES: Tùy chọn. Nếu chỉ định cụ thể thì các hàng cố định ở cuối trong kết quả có giới hạn sẽ được trả về. Điều này có thể khiến cho số hàng trả về nhiều hơn biến TOP cho phép. Biểu thức: Cột hay giá trị tính toán mà bạn muốn lấy về. Dùng * nếu muốn lấy tất cả các cột. Bảng: Bảng mà bạn muốn lấy kết quả về. Phải có ít nhất 1 bảng được liệt kê trong lệnh FROM. WHERE “điều kiện”: Tùy chọn. Điều kiện mà kết quả trả về phải đáp ứng được. GROUP BY “biểu thức”: Tùy chọn. Thu thập dữ liệu từ nhiều bản ghi và nhóm kết quả theo một hoặc nhiều cột. HAVING “điều kiện”: Tùy chọn. Dùng kết hợp với GROUP BY để giới hạn nhóm các hàng trả về khi điều kiện được đáp ứng là TRUE. ORDER BY “biểu thức”: Tùy chọn. Được dùng để lọc bộ kết quả. ASC sẽ lọc theo thứ tự tăng dần và DESC sẽ lọc theo thứ tự giảm dần. |
Trong SQL Server (Transact-SQL); mệnh đề DISTINCT được dùng để loại bỏ trùng lặp trong bộ kết quả trả về. Mệnh đề DISTINCT chỉ có thể dùng trong lệnh SELECT.
Cú pháp mệnh đề DISTINCT
SELECT DISTINCT “biểu thức” FROM “bảng” [WHERE “điều kiện”]; Tên biến hoặc giá trị biến “biểu thức” Cột hoặc giá trị tính toán mà bạn muốn lấy “bảng” Bảng dùng để lấy bản ghi. Phải có ít nhất 1 bảng trong mệnh đề FROM. WHERE “điều kiện” Tùy chọn. Điều kiện mà bản ghi phải đáp ứng để được chọn. |
Lưu ý
Trong SQL Server; mệnh đề DISTINCT không bỏ qua giá trị NULL. Vậy nên; khi dùng mệnh đề này trong lệnh; kết quả trả về sẽ có cả giá trị NULL duy nhất.
Trong SQL Server (T-SQL); mệnh đề WHERE được dùng để lọc kết quả từ các lệnh SELECT; INSERT; UPDATE hoặc DELETE.
Cú pháp mệnh đề WHERE
WHERE “điều kiện”; Tên các biến hoặc giá trị biến Điều kiện – Là các điều kiện mà bản ghi phải đáp ứng được để được chọn. |
Khi kết hợp 2 điều kiện này; cần phải nhớ dùng dấu ngoặc đơn để cơ sở dữ liệu biết được thứ tự thực hiện từng điều kiện.
Cú pháp kết hợp điều kiện AND và điều kiện OR
WHERE “điều kiện 1” AND “điều kiện 2” OR “điều kiện n”; Tên biến và giá trị biến điều kiện 1, điều kiện 2… điều kiện n Các điều kiện được đánh giá để xác định xem bản ghi có được lựa chọn hay không. |
Lưu ý:
Điều kiện IN được dùng trong SQL Server (Transact-SQL); để giảm thiểu việc phải sử dụng quá nhiều điều kiện OR trong các lệnh SELECT; INSERT; UPDATE hoặc DELETE.
Cú pháp điều kiện IN
biểu thức IN (giá trị 1, giá trị 2, … giá trị n); Tên biến hoặc giá trị biến biểu thức Giá trị để kiểm tra giá trị 1, giá trị 2, … giá trị n Các giá trị để kiểm tra với biểu thức |
Lưu ý
Trong SQL Server (Transact-SQL); điều kiện BETWEEN được dùng để lấy dữ liệu trong một khoảng; trong lệnh SELECT; INSERT; UPDATE hoặc DELETE.
Cú pháp điều kiện BETWEEN
bieu_thuc BETWEEN giatri1 AND giatri2 ; Tên biến hoặc giá trị biến bieu_thuc cột hoặc trường thông tin giatri1 và giatri2 các giá trị tạo nên khoảng mà bieu_thuc sẽ đối chiếu, bao gồm cả 2 giá trị đầu cuối. |
Lưu ý
Điều kiện BETWEEN sẽ trả về tất cả các bản ghi mà bieu_thuc nằm trong khoảng từ giatri1 tới giatri2; bao gồm 2 giá trị đầu cuối.
Điều kiện LIKE trong SQL Server (Transact-SQL) cho phép dùng wildcard (các kí hiệu đại diện) trong mệnh đề WHERE ở các lệnh SELECT; INSERT; UPDATE và DELETE; dùng để đối sánh mẫu.
Cú pháp điều kiện LIKE
“biểu thức” LIKE “mẫu” [ ESCAPE ‘Escape_Character’ ] Tên biến hoặc giá trị biến biểu thức Biểu thức kí tự như cột hoặc trường thông tin. mẫu BIểu thức kí tự có chứa đối chiếu mẫu. Các mẫu có thể chọn từ bảng dưới đây. Escape Character Tùy chọn. Tạm dịch là ký tự bỏ qua. Cho phép kiểm tra xem ký tự đại diện như % hay _ có được dùng theo đúng nghĩa đen (dưới dạng hằng số); chứ không được dùng như một kí tự đặc biệt. |
Mệnh đề ORDER BY được dùng để lọc bản ghi trong bộ kết quả trả về của SQL Server. Mệnh đề này chỉ có thể dùng trong lệnh SELECT.
Cú pháp mệnh đề ORDER BY
SELECT “biểu thức” FROM “bảng” [WHERE “điều kiện”] ORDER BY “biểu thức” [ ASC | DESC ]; Tên các biến và giá trị biến Biểu thức – cột hoặc giá trị tính toán bạn muốn lấy. Bảng – bảng mà bạn muốn dùng để lấy bản ghi. Phải có ít nhất 1 bảng trong mệnh đề FROM. WHERE “điều kiện” – tùy chọn. Các điều kiện phải được đáp ứng thì bản ghi mới được chọn. ASC – tùy chọn. Lọc kết quả theo thứ tự tăng dần của biểu thức (mặc định nếu không chỉ định rõ). DESC – tùy chọn. Lọc kết quả theo thứ tự giảm dần của biểu thức. |
Lưu ý:
Nếu không chọn cụ thể ASC hay DESC trong mệnh đề ORDER BY; thì kết quả sẽ mặc định được sắp xếp theo thứ tự tăng dần. Tương đương với ORDER BY “biểu thức” ASC.
Mệnh đề GROUP BY trong SQL Server cho phép bạn sắp xếp các hàng của truy vấn theo nhóm. Các nhóm được xác định bởi các cột mà bạn chỉ định trong mệnh đề GROUP BY. Thông thường; GROUP BY được sử dụng để tính tổng theo điều kiện; đếm bản ghi thỏa mãn điều kiện nào đó hoặc tìm dữ liệu MIN; MAX.
Cú pháp mệnh đề GROUP BY trong SQL Server
SELECT bieu_thuc1, bieu_thuc2,… bieu_thuc_n, ham_tong_hop (bieu_thuc) FROM ten_bang [WHERE dieukien] GROUP BY bieu_thuc1, bieu_thuc2,…; Tên biến hoặc giá trị biến: |
Hàm COUNT trong SQL Server dùng để đếm số lượng bản ghi (dữ liệu; hàng) có trong một bảng dữ liệu. Những giá trị NULL bỏ qua không tính.
Cú pháp hàm COUNT SQL Server
Để sử dụng hàm COUNT trong SQL Server; ta dùng cú pháp như sau: SELECT COUNT(cot) FROM bang [WHERE dieukien]; Tham số: |
Lưu ý:
Mệnh đề HAVING được dùng kết hợp với mệnh đề GROUP BY trong SQL Server (Transact-SQL): để giới hạn nhóm các hàng trả về; chỉ khi điều kiện được được đáp ứng là TRUE.
Cú pháp mệnh đề HAVING trong SQL Server
SELECT bieuthuc1, bieuthuc2, … bieuthuc_n, ham_tong (bieuthuc) FROM bang [WHERE dieukien] GROUP BY bieuthuc1, bieuthuc2, … bieuthuc_n HAVING dieukien_having; Tên biến hoặc giá trị biến ham_tong Có thể là các hàm như SUM, COUNT, MIN, MAX hoặc AVG. bieuthuc1, bieuthuc2, … bieuthuc_n Biểu thức không nằm bên trong hàm tổng và phải nằm trong mệnh đề GROUP BY. WHERE dieukien Tùy chọn. Các điều kiện mà bản ghi phải đáp ứng để được chọn. HAVING dieukien_having Đây là điều kiện thêm chỉ áp dụng với kết quả tổng để giới hạn các nhóm của những hàng được trả về. Chỉ các nhóm mà điều kiện được đánh giá là TRUE mới nằm trong bộ kết quả. |
Lệnh CREATE TABLE trong SQL dùng để tạo một bảng mới. Việc tạo bảng mới cơ bản liên quan đến việc đặt tên cho bảng; xác định các cột của nó & kiểu dữ liệu của mỗi cột.
Cú pháp lệnh CREATE TABLE
Câu lệnh SQL CREATE TABLE có cú pháp như sau: CREATE TABLE ten_bang( cot1 kieu_du_kieu, cot2 kieu_du_kieu, cot3 kieu_du_kieu, ….. cotN kieu_du_kieu, PRIMARY KEY( mot hoac nhieu cot ) ); |
Trong SQL; lệnh DROP TABLE được dùng để xóa định nghĩa bảng và tất cả các dữ liệu; chỉ mục; ràng buộc; thông số của bảng.
Trước khi sử dụng lệnh DROP TABLE bạn phải xem xét; cân nhắc cẩn thận. Vì khi lệnh này được thực hiện; toàn bộ dữ liệu trong bảng sẽ bị xóa vĩnh viễn.
Cú pháp của lệnh DROP TABLE:
DROP TABLE ten_bang; |
Câu lệnh CREATE INDEX được sử dụng để tạo chỉ mục trong bảng.
Các chỉ mục được sử dụng để lấy dữ liệu từ cơ sở dữ liệu nhanh hơn so với cách khác. Người dùng không thể nhìn thấy các chỉ mục; chúng chỉ được sử dụng để tăng tốc độ tìm kiếm / truy vấn.
Cú pháp CREATE INDEX
Tạo chỉ mục trên bảng. Các giá trị trùng lặp được phép: CREATE INDEX index_name ON table_name (column1, column2, …); |
Cú pháp DROP INDEX
DROP INDEX ten_index; |
Bạn nên cẩn thận trong khi xóa một chỉ mục. Vì khi đó hiệu suất có thể chậm hơn hoặc không được cải thiện.
Lệnh TRUNCATE TABLE được dùng để xóa tất cả bản ghi từ 1 bảng trong SQL Server. Lệnh này hoạt động tương tự như lệnh DELETE nhưng không có mệnh đề WHERE.
Cú pháp lệnh TRUNCATE TABLE trong SQL Server
TRUNCATE TABLE [ten_CSDL.] [ten_schema.] ten_bang [ WITH (PARTITIONS (so_phanvung | so _phanvung TO so _phanvung ) ] ; Tên biến hoặc giá trị biến ten_CSDL Tùy chọn. Nếu được chỉ định thì đây là tên của cơ sở dữ liệu. ten_scheme Tùy chọn. Đây là tên của schema (tạm dịch là lược đồ hay không gian tên) mà bảng đó thuộc về. ten_bang Bảng mà bạn muốn xóa bản ghi. WITH (PARTITIONS (so_phanvung | so _phanvung TO so _phanvung ) Tùy chọn và chỉ có thể dùng với bảng phân vùng (partition). Nếu được chỉ định, so_phanvung là số của vùng mà bạn muốn xóa trong bảng này. Để xóa nhiều vùng; dùng dấu phẩy phân tách các giá trị hoặc khoảng giá trị số phân vùng. Nếu dùng mệnh đề này với bảng không phân vùng thì SQL Server sẽ báo lỗi. Tính năng này không có trong tất cả các phiên bản của SQL Server. |
Lưu ý
Trong SQL Server, lệnh ALTER TABLE được dùng để thêm cột; chỉnh sửa cột; xóa cột; đổi tên cột hoặc đổi tên bảng.
Cú pháp
ALTER TABLE ten_bang ADD ten_cot dinh_nghia_cot; |
Có thể dùng lệnh ALTER TABLE để đổi tên cột trong bảng. Có thể dùng sp_rename nhưng Microsoft khuyến khích xóa & tạo lại bảng; để kịch bản & các quy trình lưu trữ không bị hỏng.
Cú pháp
sp_rename ‘ten_bang.ten_cot_cu’, ‘ten_cot_moi’, ‘COLUMN’; |
Cú pháp của lệnh INSERT INTO:
Lệnh INSERT INTO có 2 cú pháp cơ bản, chúng ta sẽ cùng tìm hiểu cả 2 cú pháp trong bài này. Lệnh INSERT INTO, cú pháp 1: INSERT INTO TEN_BANG (cot1, cot2, cot3,…cotN) VALUES (gia_tri1, gia_tri2, gia_tri3,…gia_triN); Ở đây, cot1, cot2, cot3,… cotN là tên các cột trong bảng mà bạn muốn chèn thêm dữ liệu. gia_tri1, gia_tri2, gia_tri3,…gia_triN là giá trị cần thêm vào tương ứng với các cột. Nếu bạn muốn thêm giá trị vào tất cả các cột trong bảng thì có thể sử dụng lệnh INSERT INTO với cú pháp 2 dưới đây: INSERT INTO TEN_BANG VALUES (gia_tri1, gia_tri2, gia_tri3,…gia_triN); Bạn thấy sự khác biệt không? Ở cú pháp 2; bạn không cần liệt kê tên các cột trong bảng. Chỉ cần đảm bảo rằng thứ tự các giá trị bạn muốn thêm vào đúng với thứ tự của các cột trong bảng là được. |
Trong SQL Server (Transact-SQL); lệnh UPDATE được dùng để cập nhật các bản ghi hiện có trên một bảng trong cơ sở dữ liệu của SQL Server. Có 3 cú pháp cho lệnh UPDATE. Phụ thuộc vào việc bạn cập nhật theo kiểu truyền thống hay cập nhật một bảng bằng dữ liệu từ 1 bảng khác.
Cú pháp lệnh UPDATE
UPDATE bang SET cot1 = bieuthuc1, cot2 = bieuthuc2, [WHERE dieu_kien] ; Cú pháp cập nhật 1 bảng bằng dữ liệu từ 1 bảng khác trong SQL Server, kết hợp lệnh SELECT. UPDATE bang1 SET cot1 = (SELECT bieuthuc1 FROM bang2 WHERE dieu_kien) [WHERE dieu_kien]; Hoặc cú pháp khác để cập nhật một bảng bằng dữ liệu từ 1 bảng khác UPDATE bang1 SET bang1.cot = bang2.bieuthuc1 FROM bang1 INNER JOIN bang2 ON (bang1.cot1 = bang2.cot1) [WHERE dieu_kien]; Tên biến hoặc giá trị biến cot1, cot2 Cột cần cập nhật. bieuthuc1, bieuthuc2 Giá trị mới cần chỉ định cho cot1, cot2. Cot1 sẽ gán giá trị của bieuthuc1, cot2 gán giá trị của bieuthuc2… WHERE dieu_kien Tùy chọn. Điều kiện phải đáp ứng để bản ghi được cập nhật. |
Lệnh DELETE trong SQL Server (Transact-SQL) được dùng để xóa một hoặc nhiều bản ghi (hàng) từ một bảng trong SQL Server.
Bạn có thể xóa những bản ghi thỏa mãn điều kiện nhất định hoặc xóa toàn bộ bản ghi trong bảng một cách dễ dàng với DELETE.
Cú pháp lệnh DELETE trong SQL Server
Cú pháp đơn giản của lệnh DELETE như sau: DELETE FROM bang [WHERE dieu_kien]; Cú pháp đầy đủ của lệnh DELETE như dưới đây: DELETE [ TOP (giatri_dau) [PERCENT] ] FROM bang [WHERE dieu_kien]; Tên biến hoặc giá trị biến: bang: Bảng cần xóa bản ghi. WHERE dieu_kien: Tùy chọn. Điều kiện mà bản ghi phải đáp ứng để bị xóa. TOP (giatri_dau): Tùy chọn. Nếu được nêu ra cụ thể sẽ chèn giá trị đầu của hàng dựa trên giatri_dau. Ví dụ TOP(10) sẽ chèn 10 hàng đầu tiên từ bộ kết quả. PERCENT: Tùy chọn. Nếu được nêu ra cụ thể thì các hàng đầu tiên dựa trên số phần trăm giatri_dau của bộ kết quả. Ví dụ như TOP(10) PERCENT sẽ chèn 10% giá trị đầu trong bộ kết quả. |
Lưu ý:
* Lưu ý mệnh đề WHERE trong câu lệnh DELETE. Mệnh đề WHERE chỉ định (các) bản ghi nào nên được xóa. Nếu bạn bỏ qua mệnh đề WHERE; tất cả các bản ghi trong bảng sẽ bị xóa!
* Không cần liệt kê các trường trong lệnh DELETE vì bạn sẽ xóa toàn bộ hàng trong bảng.
Cú pháp của lệnh CREATE DATABASE
CREATE DATABASE ten_co_so_du_lieu; |
Lưu ý: Trong một RDBMS thì ten_co_so_du_lieu luôn luôn là duy nhất.
Cú pháp của lệnh DROP DATABASE trong SQL
DROP DATABASE ten_co_so_du_lieu; ten_co_so_du_lieu luôn là duy nhất trong RDBMS. |
Khi có nhiều cơ sở dữ liệu trong SQL Schema; để bắt đầu một hành động nào đó bạn cần chọn cơ sở dữ liệu để thực thi những hành động đó.
Lệnh USE trong SQL được sử dụng để chọn bất kỳ cơ sở dữ liệu nào đã có trong SQL Schema.
Cú pháp của lệnh USE trong SQL
USE ten_co_so_du_lieu; ten_co_so_du_lieu luôn phải là duy nhất trong RDBMS. |
Transaction kết thúc với một trong hai câu lệnh COMMIT hoặc ROLLBACK.
Khi một Transaction hoàn chỉnh được hoàn thành thì lệnh COMMIT phải được gọi ra. Lệnh này sẽ giúp lưu những thay đổi tới cơ sở dữ liệu
Cú pháp cơ bản của lệnh COMMIT:
COMMIT; |
Lệnh ROLLBACK là lệnh điều khiển Transaction được sử dụng để trao trả Transaction về trạng thái trước khi có các thay đổi mà chưa được lưu tới Database. Lệnh ROLLBACK chỉ có thể được sử dụng để undo các Transaction trước khi xác nhận bằng lệnh Commit hay Rollback cuối cùng.
Cú pháp cơ bản của lệnh ROLLBACK:
ROLLBACK; |
Ngoài 26 câu lệnh sql bên trên, các bạn cũng có thể tìm hiểu một số mệnh đề khác và thông tin lịch sử của ngôn ngữ sql đa-zi năng này nhé.
Câu lệnh SELECT là một câu lệnh quen thuộc trong SQL, được sử dụng để lấy về các kết quả ở các bảng trong CSDL ở SQL server. Cùng tìm hiểu chi tiết hơn về câu lệnh này nhé.
Mục lục
Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Nội dung bài viết
Khóa học
Với hệ thống nhỏ, chúng ta hoàn toàn có thể lưu trữ dữ liệu bằng file để khi tắt ứng dụng dữ liệu chúng ta vẫn còn được lưu giữ. Nhưng với hệ thống lớn, truy vấn tìm kiếm, thao tác với dữ liệu trên file không còn dễ dàng và hiệu quả nữa. Và SQL ra đời để giải quyết vấn đề đó.
Chúng ta cùng nhau tìm hiểu về SQL và SQL Server thông qua serial HƯỚNG DẪN SỬ DỤNG SQL SERVER nhé!
Đánh giá
Bình luận
–BT:–1. Xuất ra thông tin giáo viên và Giáo viên quản lý chủ nhiệm của người đóSELECT GV1.*, GV.*FROM dbo.GIAOVIEN AS GV, dbo.GIAOVIEN AS GV1WHERE GV1.GVQLCM = GV.MAGV–2. Xuất ra số lượng giáo viên của khoa CNTTSELECT COUNT(*) AS N’Số lượng giáo viên’FROM dbo.GIAOVIEN AS GV, dbo.BOMON AS BM, dbo.KHOA AS KWHERE GV.MABM = BM.MABM AND BM.MAKHOA = K.MAKHOA–3. Xuất ra thông tin của giáo viên và đề tài người đó tham gia khi mà kết quả là đạtSELECT GV.HOTEN, DT.TENDTFROM dbo.GIAOVIEN AS GV, dbo.THAMGIADT AS TG, dbo.DETAI AS DTWHERE GV.MAGV = TG.MAGV AND TG.MADT = DT.MADT AND TG.KETQUA = N’Đạt’
–Xuất ra thông tin giáo viên và Giáo viên quản lý chủ nhiệm của người đóselect gv.magv, gv.hoten,gv.ngsinh,gv.diachi ,gv2.magv as N’Mã gvqlcm’,gv2.hoten as N’Giáo viên chủ nghiệm’ from giaovien as gv,giaovien as gv2where gv.magv=gv2.gvqlcm–Xuất ra số lượng giáo viên của khoa CNTTselect count(*) as N’Gv khoa CNTT’from giaovien as gvjoin bomon as bm on bm.mabm=gv.mabmjoin khoa as K on k.makhoa=bm.makhoawhere K.makhoa=’CNTT’–Xuất ra thông tin giáo viên và đề tài người đó tham gia khi mà kết quả là đạtselect gv.magv,gv.hoten,dt.tendt from giaovien as gvjoin thamgiadt as tg on tg.magv=gv.magvjoin detai as dt on tg.madt=dt.madtwhere tg.ketqua=N’Đạt’
–Bài tập–1. Xuất ra thông tiN giáo viên và giáo viên quản lý chủ nhiệm của người đóSELECT GV.MAGV AS N’Mã giáo viên’, GV.HOTEN AS N’Tên giáo viên’, GVCN.MAGV AS N’Mã giáo viên chủ nhiệm’, GVCN.HOTEN AS N’Tên giáo viên chủ nhiệm’FROM dbo.GIAOVIEN AS GV, dbo.GIAOVIEN AS GVCNWHERE GV.GVQLCM = GVCN.MAGVGo
–2. Xuất ra số lượng giáo viên của khoa cnttSELECT COUNT(*)FROM dbo.GIAOVIEN AS GV, dbo.BOMON AS BM, dbo.KHOA AS KHWHERE GV.MABM = BM.MABMAND BM.MAKHOA = KH.MAKHOAAND BM.MAKHOA = ‘SH’Go
–3. Xuất ra thông tin giáo viên và đề tài người đó tham gia khi mà kết quả là đạtSELECT GV.MAGV, GV.HOTEN, DT.TENDT, TGDT.KETQUAFROM dbo.GIAOVIEN AS GV, dbo.THAMGIADT AS TGDT, dbo.DETAI AS DTWHERE GV.MAGV = TGDT.MAGVAND TGDT.MADT = DT.MADTAND TGDT.KETQUA = N’Đạt’Go
- Xuất ra thông tin giáo viên và Giáo viên quản lý chủ nhiệm của người đó
SELECT GV1.HOTEN AS ‘TEN GIAO VIEN’,GV2.HOTEN AS ‘GIAO VIEN QUAN LI BO MON’FROM DBO.GIAOVIEN AS GV1, DBO.GIAOVIEN AS GV2, DBO.BOMON AS BM WHERE GV1.MABM=BM.MABM AND GV2.MAGV=BM.TRUONGBM
Kteam ơi. mình có thử đưa ra để bài ntn và làm. vì sao nó lại trùng lặp kết quả ạ?. Mình đang không biết lỗi ở đâu
— Truy xuất bảng tham gia đề tài lấy ra mã giáo viên => tên đề tài => tên giáo viên => lương => tên khoa => trưởng khoaselect GV.magv As N’Mã Giáo viên’,pdt.madt as N’Mã đề tài’,GV.HOTEN as N’Tên giáo viên’,DT.tenDT as N’Tên Đề Tài’,GV.luong as N’Lương tháng’,k.TENKHOA as N’Tên khoa’,k.TRUONGKHOA as N’Số trưởng Khoa’from dbo.THAMGIADT as pdt, dbo.DETAI as DT, dbo.GIAOVIEN as GV, dbo.KHOA as K, dbo.BOMON as BMwhereGv.magv = pdt.MAGV andpdt.madt = dt.madt andgv.mabm = bm.mabm andbm.makhoa = k.makhoa
Lệnh IF…ELSE trong SQL Server
If trong SQL Server là gì? If Else trong SQL Server được dùng như thế nào? Hãy cùng Quantrimang.com tìm hiểu nhé!
Nếu hỏi ngành nghề nào có mức lương cao và được “săn đón” nhất hiện nay, chắc chắn lập trình là câu trả lời bạn nhận được nhiều nhất. Công nghệ thông tin phát triển rõ ràng đã khiến cuộc sống của con người thoải mái, dễ chịu và đạt được nhiều thành tựu tiến bộ hơn. Chính vì thế, ngày càng có nhiều người muốn tham gia vào lĩnh vực này.
Lập trình thực sự là một bộ môn khó, tuy nhiên, nếu bạn thực sự đam mê, vẫn hoàn toàn có thể chinh phục được nó. Chỉ cần chọn một ngôn ngữ mà bạn thực sự thích, sau đó bắt đầu tìm hiểu từ những kiến thức cơ bản nhất.
Dù lựa chọn ngôn ngữ lập trình nào, bạn cũng đều nên biết về SQL Server. Đây là một sản phẩm của Microsoft. Nó không phải là một ngôn ngữ lập trình, mà là một phần mềm hệ thống quản trị cơ sở dữ liệu quan hệ do Microsoft phát triển vào năm 1988.
Hiện SQL Server được sử dụng cho việc tạo, duy trì và triển khai hệ thống quản lý dữ liệu. Khi học SQL Server, nhất định bạn nên biết về lệnh điều kiện hay if else.
Tên biến hoặc giá trị biến
2.1 Tên biến và giá trị
Ngoài ra khi kết hợp với câu lệnh SELECT chúng ta sẽ kết hợp các biến sau
ALL – Tùy chọn. Kết quả trả về tất cả các hàng phù hợp
DISTINCT – Tùy chọn. Loại tất cả các giá trị bị trùng khỏi kết quả trả về.
TOP (gia_tri_dau) – Tùy chọn. Trả về toàn bộ kết quả ở hàng đầu tiên dựa vào gia_tri_dau đã chọn. Ví dụ TOP(5) thì kết quả trả về là 5 hàng đầu tiên.
WITH TIES – Tùy chọn. Nếu chỉ định cụ thể thì các hàng cố định ở cuối trong kết quả có giới hạn sẽ được trả về. Điều này có thể khiến cho số hàng trả về nhiều hơn biến TOP cho phép.
PERCENT – Tùy chọn. Nếu chỉ định cụ thể thì các hàng đầu tiên dựa theo phần trăm trên bộ kết quả (chỉ định bằng gia_tri_dau). Ví dụ TOP(5) PERCENT sẽ trả về top 5% kết quả đầu tiên trong bộ kết quả.
Biểu thức – Cột hoặc giá trị tính toán mà bạn muốn lấy. Dùng dấu * nếu bạn muốn lấy toàn bộ các cột.
Bảng – Kết quả trả về sẽ là bảng của bạn chọn. Phải có ít nhất 1 bảng được liệt kê trong lệnh FROM.
WHERE “điều kiện” – Tùy chọn. Kết quả trả về sẽ phải đáp ứng được điều kiện được đặt ra.
GROUP BY “biểu thức” – Tùy chọn. Nhóm các kết quả theo một hay nhiều cột từ dữ liệu thu thập được thông qua các bảng ghi.
HAVING “điều kiện” – Tùy chọn. Dùng lệnh này kết hợp với GROUP BY để giới hạn nhóm các hàng trả về khi đáp ứng được điều kiện.
ORDER BY “biểu thức” – Tùy chọn. Được dùng để lọc các kết quả. Sử dụng ASC để lọc theo thứ tự tăng dần và DESC để lọc theo thứ tự giảm dần.
2.2 Các ví dụ
Chọn toàn bộ trường trong một bảng
SELECT *
FROM hangtonkho
WHERE soluong > 10
ORDER BY hangtonkho_id ASC;
Sử dụng dấu * để chọn tất cả các giá trị trong bảng hangtonkho nhưng phải thỏa mãn giá trị là soluong > 10. Kết quả trả về sẽ được sắp xếp theo thứ tự tăng dần dựa trên bảng hangtonkho_id
Chọn một vài trường trong bảng
SELECT hangtonkho_id, hangtonkho_type, soluong
FROM hangtonkho
WHERE hangtonkho_id >= 555
AND hangtonkho_type = ‘phanmem’
ORDER BY soluong DESC, hangtonkho_id ASC;
Ở lệnh trên, kết quả trả về sẽ là số lượng, id, loại hàng và được lấy từ bảng hangtonkho khi thỏa mãn điều kiện id >= 555, loại hàng cũng cần thỏa mãn là “phanmem” (phần mềm).
Các kết quả trả về sẽ được sắp xếp theo số lượng giảm dần và tăng dần của id
Chọn từ nhiều bảng khác nhau
SELECT hangtonkho.hangtonkho_id, sanpham.sanpham_ten, hangtonkho.soluong
FROM hangtonkho
INNER JOIN sanpham
ON hangtonkho.sanpham_id = sanpham.sanpham_id
ORDER BY hangtonkho_id;
Trong ví dụ này tôi sẽ chọn ra từ các bảng hantonkho và sanpham để lấy ra các giá trị hangtonkho_id, sanpham_ten và soluong. Để làm được như vậy thì ID ở bảng hangtonkho phải giống với bảng sanpham.
Kết quả trả về sẽ được sắp xêm theo thứ tự tăng dần của ID.
Sử dụng keyword TOP
SELECT TOP(3)
hangtonkho_id, hangtonkho_type, soluong
FROM hangtonkho
WHERE hangtonkho_type = ‘phanmem’
ORDER BY hangtonkho_id ASC;
Trong ví dụ này thì tôi sẽ lấy ra 3 hàng đầu tiên trong bảng hangtonkho và thỏa mãn điều kiện loại hàng là “phanmem” (phần mềm). Kết quả trả về gồm id, loại hàng, số lượng và được sắp xếp từ tăng dần theo mã id.
Sử dụng keyword TOP PERCENT
SELECT TOP(10) PERCENT
hangtonkho_id, hangtonkho_type, soluong
FROM hangtonkho
WHERE hangtonkho_type = ‘phanmem’
ORDER BY hangtonkho_id ASC;
Gần tương tự như trên nhưng chỉ 10% giá trị đầu tiên được trả về thỏa mãn điều kiện là loại sản phẩm là phần mềm. 90% còn lại không được hiện ra.
Như vậy là chúng ta lại hoàn thành thêm một bài học khá hữu ích về lệnh SELECT trong SQL Server. Đón xem các bài viết tiếp theo của tôi nhé.
Trong các bài viết trước,
BAC
đã giới thiệu đến bạn đọc câu lệnh lấy dữ liệu trong SQL là SELECT. Tuy nhiên, nếu chỉ dùng SELECT thì việc lấy dữ liệu khá hạn chế và không thực sự chính xác. Vì thế, chúng ta sẽ cần thêm một mệnh đề điều kiện để lấy được những dữ liệu đúng nhu cầu công việc.
Mệnh đề WHERE trong SQL
Mệnh đề WHERE được dùng để lọc các bản ghi.
Nó thường được dùng để chỉ trích xuất các bản ghi đáp ứng những điều kiện cụ thể.
Lưu ý
: Mệnh đề WHERE chỉ được sử dụng trong câu lệnh SELECT, nó cũng được dùng trong UPDATE, DELETE,…!.
Ví dụ về mệnh đề WHERE
Để thực hiện ví dụ này, bạn cần nhập cơ sở dữ liệu mẫu Northwind vào SQL Server Management Studio. Hãy xem bài viết hướng dẫn ngay dưới đây:
Tham khảo:
Hướng dẫn tải và cài đặt dữ liệu mẫu Northwind trong SQL Server Management Studio
Câu lệnh SQL dưới đây sẽ chọn tất cả các khách hàng đến từ quốc gia Mexico trong bảng Customers:
SELECT * FROM Customers
WHERE Country = ‘Mexico’;
Các trường chữ và các trường số
SQL yêu cầu dấu ngoặc đơn xung quanh các giá trị văn bản (hầu hết các hệ thống cơ sở dữ liệu cũng sẽ cho phép dấu ngoặc kép).
Tuy nhiên, các trường số không được đặt trong dấu ngoặc kép.
Ví dụ:
SELECT * FROM Categories
WHERE CategoryID=1;
Các toán tử trong mệnh đề WHERE
Bạn có thể sử dụng các toán tử này để lấy được những dữ liệu mong muốn.
- (=) dấu bằng
- (>) dấu lớn hơn
- (<) dấu nhỏ hơn
- (>=) dấu lớn hơn hoặc bằng
- (<=) dấu nhỏ hơn hoặc bằng
- (<>) dấu không bằng, trong một vài phiên bản SQL có thể dùng dấu (!=)
- BETWEEN – giữa một phạm vi nhất định
- LIKE – Tìm kiếm một mẫu
- IN – Để chỉ định nhiều giá trị có thể có cho một cột
Bây giờ, bạn đã biết chính xác cách mệnh đề WHERE được dùng trong SQL. Hãy khám phá bằng cách sử dụng các toán tử để lấy các phần dữ liệu mà bạn mong muốn. Trong một số trường hợp bạn có thể gặp lỗi do kiểu dữ liệu không phù hợp, chúng ta sẽ nhắc đến trong các bài viết khác sẽ được cập nhật tại website
bacs.vn
, đừng quên đón đọc.
Nguồn tham khảo:
Nhu cầu đào tạo doanh nghiệp
BAC
là đơn vị đào tạo BA đầu tiên tại Việt Nam. Đối tác chính thức của
IIBA
quốc tế. Ngoài các khóa học public,
BAC
còn có các khóa học in house dành riêng cho từng doanh nghiệp. Chương trình được thiết kế riêng theo yêu cầu của doanh nghiệp, giúp doanh nghiệp giải quyết những khó khăn và tư vấn phát triển.
Tham khảo chương trình đào tạo:
BAC – Biên soạn và tổng hợp nội dung
Trong các bài viết trước,
BAC
đã giới thiệu đến bạn đọc câu lệnh lấy dữ liệu trong SQL là SELECT. Tuy nhiên, nếu chỉ dùng SELECT thì việc lấy dữ liệu khá hạn chế và không thực sự chính xác. Vì thế, chúng ta sẽ cần thêm một mệnh đề điều kiện để lấy được những dữ liệu đúng nhu cầu công việc.
Mệnh đề WHERE trong SQL
Mệnh đề WHERE được dùng để lọc các bản ghi.
Nó thường được dùng để chỉ trích xuất các bản ghi đáp ứng những điều kiện cụ thể.
Lưu ý
: Mệnh đề WHERE chỉ được sử dụng trong câu lệnh SELECT, nó cũng được dùng trong UPDATE, DELETE,…!.
Ví dụ về mệnh đề WHERE
Để thực hiện ví dụ này, bạn cần nhập cơ sở dữ liệu mẫu Northwind vào SQL Server Management Studio. Hãy xem bài viết hướng dẫn ngay dưới đây:
Tham khảo:
Hướng dẫn tải và cài đặt dữ liệu mẫu Northwind trong SQL Server Management Studio
Câu lệnh SQL dưới đây sẽ chọn tất cả các khách hàng đến từ quốc gia Mexico trong bảng Customers:
SELECT * FROM Customers
WHERE Country = ‘Mexico’;
Các trường chữ và các trường số
SQL yêu cầu dấu ngoặc đơn xung quanh các giá trị văn bản (hầu hết các hệ thống cơ sở dữ liệu cũng sẽ cho phép dấu ngoặc kép).
Tuy nhiên, các trường số không được đặt trong dấu ngoặc kép.
Ví dụ:
SELECT * FROM Categories
WHERE CategoryID=1;
Các toán tử trong mệnh đề WHERE
Bạn có thể sử dụng các toán tử này để lấy được những dữ liệu mong muốn.
- (=) dấu bằng
- (>) dấu lớn hơn
- (<) dấu nhỏ hơn
- (>=) dấu lớn hơn hoặc bằng
- (<=) dấu nhỏ hơn hoặc bằng
- (<>) dấu không bằng, trong một vài phiên bản SQL có thể dùng dấu (!=)
- BETWEEN – giữa một phạm vi nhất định
- LIKE – Tìm kiếm một mẫu
- IN – Để chỉ định nhiều giá trị có thể có cho một cột
Bây giờ, bạn đã biết chính xác cách mệnh đề WHERE được dùng trong SQL. Hãy khám phá bằng cách sử dụng các toán tử để lấy các phần dữ liệu mà bạn mong muốn. Trong một số trường hợp bạn có thể gặp lỗi do kiểu dữ liệu không phù hợp, chúng ta sẽ nhắc đến trong các bài viết khác sẽ được cập nhật tại website
bacs.vn
, đừng quên đón đọc.
Nguồn tham khảo:
Nhu cầu đào tạo doanh nghiệp
BAC
là đơn vị đào tạo BA đầu tiên tại Việt Nam. Đối tác chính thức của
IIBA
quốc tế. Ngoài các khóa học public,
BAC
còn có các khóa học in house dành riêng cho từng doanh nghiệp. Chương trình được thiết kế riêng theo yêu cầu của doanh nghiệp, giúp doanh nghiệp giải quyết những khó khăn và tư vấn phát triển.
Tham khảo chương trình đào tạo:
BAC – Biên soạn và tổng hợp nội dung
Bài viết được sự cho phép của tác giả Lê Chí Dũng
Các toán tử phổ biến
Bạn có thể sử dụng câu lệnh logic có điểu kiện (Predicates) ở câu lệnh SQL
Một số các điều kiện toán tử phổ biến (Predicate operator)
Toán tử so sánh
Ví dụ: Từ bảng SalesLT.Product thuộc bộ dữ liệu adventureworks. Truy vấn các cột Name, Color, StandardCost, ListPrice. Với 3 điều kiện đồng thời xảy ra: ListPrice > 1000, StandardCost < 9000, màu sắc của sản phẩm khác màu đen.
Toán tử logic
a) Toán tử so sánh giá trị tương đối (LIKE)
‘LIKE’ được sử dụng để lọc ký tự thoả mãn một mẫu tìm kiếm (Pattern) đã được chỉ định sẵn.
Cú pháp của LIKE:
WHERE col_name LIKE pattern
- col_name: Cột mà bạn muốn thực hiện so sánh mẫu.
- pattern: Mẫu tìm kiếm bạn muốn sử dụng, có thể chứa các ký tự đại diện như ‘%’ (thay thế bất kỳ chuỗi ký tự) và ‘_’ (thay thế một ký tự).
- Với ký tự đại diện %
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn ProductID, Name, ProductNumber. Với điều kiện sản phẩm có chứa có tên ‘AWC Logo Cap’.
- Với ký tự đại diện _
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn ProductID, Name, ProductNumber. Với điều kiện, sản phẩm có tổng số ký tự trong tên là 7 ký tự, và tên kết thúc bằng Fork.
- Với ký tự đại diện [ ]
Ví dụ: Từ bảng DimProduct thuộc bộ dữ liệu AdventureWorksDW2019, truy vấn ProductAlternateKey, EnglishProductName, ReorderPoint. Với điều kiện, EnglishProductName có ký tự đầu tiên nằm trong khoảng từ A đến L và có các ký tự còn lại lần lượt là ‘L Crankarm’.
- Với ký tự đại diện [^ ]
Ví dụ: Từ bảng Customer thuộc bộ dữ liệu adventureworks, truy vấn FirstName, CompanyName, SalesPerson. Với điều kiện, FirstName có tên bắt đầu với chuỗi ký tự ‘Andre’ và kết thúc khác với ký tự ‘a’.
Wildcard character ngoài được sử dụng với mệnh đề WHERE và toán tử LIKE, để so sánh tương đối với mẫu ký tự và lọc dòng thoả mãn thì còn được sử dụng trong hàm xử lý string là hàm PATINDEX
HÀM PATINDEX
Tương tự như CHARINDEX nhưng PATINDEX cho phép sử dụng mẫu ký tự như ‘%’ và ‘_’.
Cú pháp của hàm PATINDEX:
PATINDEX(‘%pattern%’, expression)
- %pattern%: Là một chuỗi ký tự mẫu (pattern) bạn muốn tìm kiếm, % đại diện cho ký tự.
- expression: Là biểu thức hoặc cột chứa dữ liệu mà bạn muốn kiểm tra.
Ví dụ: Vị trí của chuỗi ký tự ‘sleeve’ trong tên sản phẩm là vị trí thứ mấy?
Giải thích câu lệnh truy vấn:
- FROM: Dữ liệu được truy vấn từ bảng SalesLT.Product.
- SELECT: Truy vấn các cột Name, vị trí của chuỗi ký tự ‘Logo’ bằng hàm CHARINDEX, vị trí của ký tự gồm 4 chữ cái bắt đầu bằng ‘Lo’ bằng hàm PATINDEX.
- Hàm CHARINDEX: Xác định vị trí chính xác của chữ ‘Logo’ là vị trí 13.
- Hàm PATINDEX: Xác định vị trí của ký tự thoả mãn mẫu: Có ít nhất 4 ký tự trong chuỗi và 2 ký tự đầu là ‘Lo’.
Vậy nên chữ ‘Long’ thoả mãn ký tự yêu cầu nên trả về vị trí thứ 1.
CHARINDEX sẽ tìm vị trí bắt đầu của ký tự chính xác.
PATINDEX có thể sử dụng được với các wildcard character để xác định vị trí xuất hiện mẫu ký tự mà không cần định nghĩa ký tự chính xác của nó.
b) Toán tử lọc trong tập giá trị (IN)
Toán tử IN được sử dụng nhằm lọc xem một giá trị có thuộc tập giá trị đã xác định.
Cú pháp của IN:
WHERE col_name IN(val_1, val_2, val_3 …)
- col_name: Cột mà bạn muốn thực hiện so sánh mẫu.
- val_1, val_2, val_3: Danh sách giá trị mà bạn muốn so sánh với cột.
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn cột ProductID, Name, ProductNumber, Color với điều kiện những sản phẩm được chọn là sản phẩm có màu đen hoặc trắng hoặc đỏ.
-> Bản chất của IN tương đương với việc sử dụng phép OR để viết điều kiện với cùng 1 cột. Người ta sẽ sử dụng IN để ngắn gọn hơn.
c) Toán tử truy vấn giá trị trong khoảng (BETWEEN)
Toán tử BETWEEN sử dụng để lọc các giá trị thoả mãn trong khoảng xác định.
Cú pháp của BETWEEN:
WHERE col_name BETWEEN val_1 AND val_2
- col_name: Cột mà bạn muốn thực hiện so sánh.
- val_1, val_2: Giới hạn của khoảng xác định.
- Đối với dữ liệu dạng string
Ví dụ: Từ bảng Customer thuộc bộ dữ liệu adventureworks, truy vấn các cột FirstName, CompanyName, SalesPerson. Với điều kiện, CompanyName nằm trong khoảng từ ‘A Bike Store’ đến ‘Big Cycle Mall’. Kết quả được sắp xếp từ A đến Z theo cột CompanyName.
Bảng dữ liệu gốc gồm 847 hàng.
Giải thích câu lệnh truy vấn:
- ORDER BY: Sắp xếp từ A đến Z theo cột CompanyName.
Kết quả truy vấn gồm 58 hàng.
- Đối với dữ liệu dạng datetime
Ví dụ: Từ bảng Customer thuộc bộ dữ liệu adventureworks, truy vấn các cột FirstName, CompanyName, SalesPerson, ModifiedDate. Với điều kiện, ModifiedDate nằm trong khoảng từ ‘2005-08-01’ đến ‘2006-07-01’.
- Đối với dữ liệu dạng số
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn ProductID, Name, ProductNumber, Color, StandardCost với điều kiện StandardCost trong khoảng giá từ 1000-3000.
Lưu ý: Về bản chất, BETWEEN 1000 AND 3000 sẽ tương ứng với việc thực hiện phép lọc >= 1000 và <= 3000.
d) Toán tử xử lý NULL
Toán tử IS NULL sử dụng để lọc các giá trị thoả mãn điều kiện là NULL.
Cú pháp của IS NULL:
WHERE col_name IS NULL.
- col_name: Cột mà bạn muốn thực hiện so sánh.
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn ProductID, Name, ProductNumber, Color với điều kiện những sản phẩm được chọn là sản phẩm không tồn tại màu sắc.
e) Toán tử phủ định điều kiện (NOT)
Toán tử NOT được sử dụng để xác định các hàng hoặc giá trị không thỏa mãn một điều kiện cụ thể.
NOT không đi một mình, mà đi kèm cùng với các toán tử khác như là: IN, BETWEEN, LIKE, IS NOT NULL.
Lưu ý: Toán tử NOT không trả về các giá trị không tồn tại (NULL).
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn ProductID, Name, ProductNumber, Color truy vấn những sản phẩm tồn tại giá trị màu sắc.
Giải thích câu lệnh truy vấn:
- FROM: Dữ liệu được lấy từ bảng SalesLT.Product.
- WHERE: Lọc bản ghi thoả mãn sản phẩm tồn tại màu sắc.
- SELECT: Truy vấn các cột ProductID, Name, ProductNumber, Color.
Bây giờ bạn đã biết cách sử dụng các khái niệm này để có thể áp dụng chúng cho các dự án và truy vấn của riêng mình. Một số cách bạn sử dụng hàm WHERE và điều kiện lọc trong SQL là gì? Chia sẻ suy nghĩ và kinh nghiệm của bạn trong phần bình luận bên dưới để DATAPOT biết với nhé.
Tại sao cần lệnh điều kiện?
Lệnh điều kiện trong SQL Server giúp bạn xác định các logic và hành động khác nhau cho các điều kiện khác nhau. Nó cho phép bạn triển khai hành động dựa trên điều kiện đã định trong lệnh. Thực tế, bạn thực hiện nhiều hành động dựa trên kết quả của một số hoạt động hoặc tình huống khác.
Một số ví dụ thực tế của lệnh điều kiện trong SQL Server là:
- Nếu ngày mai trời mưa, tôi sẽ lên kế hoạch đi đường bộ.
- Nếu vé máy bay thấp hơn 400 USD, tôi sẽ đi du lịch ở Châu Âu và tham quan một thắng cảnh gần đó.
Hành động ở đây là chuyến đi đường bộ là điều kiện phụ thuộc vào kết quả của hoạt động khác (trời mưa).
Lệnh if là một phần của hàm luồng điều khiển trong SQL Server. Thông thường, nó là lệnh đưa ra quyết định trong các ngôn ngữ lập trình khác mà trả về một giá trị dựa trên điều kiện được cung cấp. Lệnh này chạy code nằm trong khối IF khi điều kiện đưa ra đánh giá là true và khi điều kiện đánh giá false, lệnh ELSE sẽ được thực thi.
Lệnh IF
Sau đây là cú pháp minh họa cách dùng lệnh IF trong SQL Server:
IF boolean_expression BEGIN { statement_block } END
Ở cú pháp trên, statement_block trong khối BEGIN…END được thực thi khi boolean_expression đáp ứng điều kiện. Nếu không, khối này sẽ bị bỏ qua và điều khiển chương trình được chuyển sang lệnh này sau từ khóa END. Khi đó, bạn sẽ biết nếu biểu thức chứa lệnh SELECT, bạn cần bao gồm chúng trong dấu ngoặc.
Ví dụ – Các câu lệnh IF…ELSE lồng nhau
Vì chúng ta không thể viết điều kiện ELSE IF trong SQL Server như những ngôn ngữ khác nên cần dùng nhiều câu lệnh IF…ELSE lồng nhau để đạt được hiệu quả mong muốn.
DECLARE @nhanvien_salary INT; SET @nhanvien_salary = 15000000; IF @nhanvien_salary > 12000000 PRINT 'Giam doc'; ELSE BEGIN IF @nhanvien_salary > 10000000 PRINT 'Truong phong'; ELSE PRINT 'Chuyen vien'; END; GO
Ví dụ đưa ra được hiểu là, nếu lương lớn hơn 12 triệu kết quả đưa ra sẽ là Giám đốc, nếu không đat điều kiện này ta xét tiếp xuống điều kiện 2, nếu lương lớn hơn 10 triệu kết quả sẽ là Trưởng phòng, các trường hợp khác là Chuyên viên.
Trên đây là những điều bạn cần biết về cách dùng lệnh SQL Server IF Else. Về cơ bản, bạn cần ghi nhớ những điều sau:
- Biến là các đối tượng hoạt động như placeholder.
- Từ khóa BEGIN sẽ được dùng để bắt đầu khối lệnh và từ khóa END phải dùng để đóng nó.
- Cách dùng ELSE trong lệnh IF… ELSE là tùy chọn.
- Bạn cũng có thể lồng lệnh IF…ELSE vào bên trong lệnh IF…ELSE. Tuy nhiên, lồng lệnh IF trong một lệnh khác là ý tưởng tồi vì nó chỉ khiến code khó đọc và duy trì.
Bài trước: PROCEDURE (Thủ tục) trong SQL Server
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Truy vấn với điều kiện trong SQL Server dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!
ref: Tham khảo thêm một số lệnh
Xem tất cả các CƠ SỞ DỮ LIỆU người dùng trong MÁY CHỦ
Mỗi khi một cơ sở dữ liệu được tạo ra, bảng sysdatabase trong cơ sở dữ liệu master sẽ chứa thông tin về bảng mới tạo ra đó. Do vậy chúng ta có thể liệt kê tất cả các cơ sở dữ liệu trong một máy chủ bằng cách liệt kê các bản ghi trong bảng sysdatabase
select * from master.dbo.sysdatabases where sid <> 1
Xem tất cả các BẢNG người dùng trong CƠ SỞ DỮ LIỆU
Mỗi khi một bảng được tạo ra trong một cơ sở dữ liệu, thông tin về bảng đó sẽ được chứa trong bảng sysobjects của chính cơ sở dữ liệu chứa bảng vừa tạo. Vì vậy chúng ta có thể xem danh sách các bảng trong cơ sở dữ liệu bằng cách truy vấn bảng sysobjects. Các bảng do người dùng tạo có kiểu là ‘U’
select * from Northwind.dbo.sysobjects where xtype='U'
Trong ví dụ này, chúng ta lấy tất cả các bản ghi bảng sysobjects của cơ sở dữ liệu Northwind nhưng chỉ lấy những bảng người dùng, nghĩa là những bảng có xtype là ‘U’
Xem tất cả các CỘT thuộc về một BẢNG
Mỗi khi một cột trong bảng được tạo, bảng syscolumns trong cơ sở dữ liệu sẽ chứa thông tin về cột vừa tạo. Thuộc tính id của cột sẽ chứa định danh của bảng mà cột đó thuộc về. Vì vậy để xem các cột trong một bảng dữ liệu, chúng ta có thể truy vấn bảng syscolumns
declare @x intset @x = (select id from sysobjects where name='Employees') select * from syscolumns where id = @x
Trong ví dụ này, ta khai báo biến @x kiểu int, sau đó lấy id của bảng Employees vào biến @x, rồi ta lấy tất cả các cột trong bảng syscolumns mà có id bằng @x, cũng có nghĩa là id của bảng Employees. Do vậy ta sẽ liệt kê được tất cả các cột trong bảng Employees
Sử dụng bảng tạm
Khai báo bảng, cập nhật bảng, và hiện bảng
declare @x table(MaSV int, TenSV nvarchar(20)) insert into @x values(1, N'Thưởng') insert into @x values(2, N'Yến') select * from @x
Khai báo bảng, tải bảng khác từ trong cơ sở dữ liệu lên bảng vừa khai báo, và hiện bảng
declare @x table(MaSV int, TenSV nvarchar(20)) insert into @x select EmployeeID, firstname from Northwind.dbo.Employees select * from @x
Sử dụng biến tạm
declare @t moneyset @t = (select max(UnitPrice) from Northwind.dbo.products) select * from Northwind.dbo.products where UnitPrice >= @t
Cú pháp lệnh SELECT trong SQL
1.1 Cú pháp ở dạng đơn giản
Câu lệnh SELECT đơn giản nhất thường là:
SELECT “biểu thức”
FROM “bảng”
[WHERE “điều kiện”];
1.2 Cú pháp ở dạng đầy đủ
Còn dạng đầy đủ câu lệnh sẽ dài hơn với
SELECT [ ALL | DISTINCT ] [ TOP (gia_tri_dau) [ PERCENT ] [ WITH TIES ] ]
“Biểu thức”
FROM “bảng”
[WHERE “điều kiện”] [GROUP BY “biểu thức”] [HAVING “điều kiện”] [ORDER BY “biểu thức” [ ASC | DESC ]];
Truy vấn có điều kiện
Cấu trúc:
SELECT [tính chất]
FROM
WHERE <điều kiện>
Trong đó:
[tính chất] có thể là một trong các từ khóa * (Lấy tất cả dữ liệu), DISTINCT (lấy dữ liệu không trùng lặp) , TOP
(lấy dữ liệu thứ n đầu tiên)
tên các bảng cột cần hiển thị ở kết quả truy vấn
- Các column được ngăn cách với nhau bằng dấu phẩy (,)
-
Có thể gán tên cho các column với cú pháp:
AS ‘Tên thay thế’.
tên các bảng, nguồn để lấy dữ liệu khi truy vấn
- Các table được ngăn cách bằng dấu phẩy (,)
-
Alias là bí danh (hay còn gọi là tên gọi tắt) của table dùng cho các table có tên quá dài, hoặc một table được dùng nhiều lần trong câu truy vấn. Có thể đặt Alias theo cú pháp:
AS
<Điều kiện> là điều kiện để lọc dữ liệu, trích xuất các record chứa dữ liệu thỏa điều kiện. Có sử dụng các toán tử logic, toán tử so sánh (đã nêu trong bài INSERT, DELETE, UPDATE TABLE TRONG SQL )
Ví dụ:
Sử dụng truy vấn có điều kiện cho câu 3 và câu 4 ở bài tập trên
-- 3. Lấy ra Mã GV, tên GV và họ tên người thân tương ứng SELECT GV.MAGV, HOTEN, NT.TEN FROM dbo.GIAOVIEN AS GV, dbo.NGUOITHAN AS NT WHERE GV.MAGV=NT.MAGV -- 4. Lấy ra Mã GV, Tên GV và Tên khoa của giáo viên đó làm việc. Gơi ý: Bộ môn nằm trong khoa SELECT gv.MAGV, gv.HOTEN, k.TENKHOA FROM dbo.GIAOVIEN AS GV,dbo.BOMON AS BM, dbo.KHOA AS K WHERE GV.MABM=BM.MABM AND BM.MAKHOA=K.MAKHOA
IF…ELSE trong SQL là gì?
Trong SQL Server, câu lệnh IF…ELSE dùng để thực thi các lệnh có điều kiện, nếu lệnh đúng thì thực thi lệnh đó, nếu sai sẽ thực thi một lệnh khác.
Cú pháp sử dụng IF…ELSE
Để sử dụng câu lệnh rẽ nhánh IF…ELSE trong SQL Server, ta sử dụng cú pháp như dưới đây:
IF dieukien{…câu lệnh thực thi khi điều kiện là TRUE…}[ ELSE{…câu lệnh thực thi khi điều kiện là FALSE…} ]
Ghi chú:
- Không bắt buộc sử dụng ELSE. Bạn sẽ sử dụng điều kiện ELSE khi bạn muốn thực hiện một tập hợp các câu lệnh mà điều kiện IF được đánh giá là FALSE (ví dụ: điều kiện không được đáp ứng).
- Không có điều kiện ELSE IF nằm trong câu lệnh IF…ELSE. Thay vào đó bạn phải sử dụng nhiều câu lệnh IF.. ELSE lồng nhau để đạt được hiệu quả mong muốn.
Giới thiệu về mệnh đề WHERE
Để tạo điều kiện lọc trong một câu lệnh truy vấn, bạn có thể sử dụng mệnh đề WHERE đi kèm với điều kiện:
SELECT Col_name, Col_name FROM table_name WHERE predicate {AND|OR predicate}
Ví dụ: Từ bảng Product thuộc bộ dữ liệu adventureworks, truy vấn các cột Name, ProductNumber, Color, StandardCost. Với điều kiện, StandardCost lớn hơn 1000.
Giải thích câu lệnh truy vấn:
- FROM: Dữ liệu được truy vấn từ bảng SalesLT.Product.
- WHERE: Lọc bản ghi thoả mãn StandardCost >1000.
- SELECT: Truy vấn các cột Name, ProductNumber, Color, StandardCost.
1) Trên cơ sở dữ liệu (database)
Các phiên bản của SQL Server: Enterprise, Personal, Desktop, Developer,..
Các bộ phận của SQL Server: Enterprise Manager, Query Analyzer, Books Online,..
Các loại tập tin của SQL Server: data file (primary, secondary), log file
Các loại cơ sở dữ liệu của SQL Server: system database, user database
create database: tạo cơ sở dữ liệu
create database HoSoSinhViencreate database HoSoSinhVien on (name=’HSSV_data’, filename=’c:HSSV_data.mdf’) log on (name=’HSSV_log’, filename=’c:HSSV_log.ldf’)
drop database: xóa cơ sở dữ liệu
drop database HoSoSinhVien
alter database: sửa các thông tin của cơ sở dữ liệu
alter database HoSoSinhVienmodify name = HSSV
exec sp_dboption: sửa các thông tin của cơ sở dữ liệu
exec sp_dboption HoSoSinhVien, ‘read only’, ‘true’exec sp_dboption HoSoSinhVien, ‘autoshrink’, ‘true’ exec sp_dboption HoSoSinhVien, ‘single_user’
dbcc: điều khiển cơ sở dữ liệu
dbcc shrinkdatabase(HoSoSinhVien, 10)
Nhớ các kiểu số liệu: text, binary, numberic, money, datetime, bit, variant
Nhớ các các ràng buộc: default, check, unique, foreign, primary
Nhớ các kiểu toàn vẹn: entity, domain, referential, user
Nhớ các thuộc tính bổ trợ: identity, null
create table: tạo bảng
- Tạo bảng với các cột
create table SinhVien (MaSV int,TenSV nchar(50))
- Tạo với các ràng buộc
create table SinhVien (MaSV int primary key,TenSV nvarchar(50) not null,QueQuan int references DiaPhuong(MaDP))
drop table: xóa bảng
drop table SinhVien
alter table..add: thêm cột
Thêm cột bằng cách dùng lệnh alter table
alter table SinhVienadd QueQuan int
alter table..drop column: xóa cột
alter table SinhVien drop column QueQuan
alter table..alter column: thêm thuộc tính not null
alter table SinhVienalter column TenSV nchar(50) not null
alter table..add primary key: thêm khóa chính
Thêm ràng buộc khóa chính cần phải biến một cột null thành not null trước khi thêm. Nếu để lệnh chuyển đổi thuộc tính not null ngay cạnh lệnh thêm khóa chính thì phải chèn từ khóa go vào vì có thể lệnh trên chưa được thực hiện do đó lệnh dưới báo lỗi
alter table SinhVienalter column MaSV int not null go alter table SinhVien add primary key (MaSV)
alter table..add foreign key: thêm ràng buộc khóa ngoài
alter table SinhVien add foreign key (QueQuan) references DiaPhuong(MaDP)
alter table..add default: thêm ràng buộc mặc định
alter table SinhVien add default 'khong ten' for TenSV
exec sp_help: xem thông tin bảng
exec sp_help SinhVien
Tham khảo các vị trí tuyển dụng SQL lương cao tại Topdev.
Một số ví dụ khác
Để hiểu thêm về cách truy vấn cơ bản, chúng ta cùng nhau đi đến một số ví dụ đơn giản. Kteam khuyến khích bạn tự thao tác để có thể hiểu bài tốt hơn.
Ví dụ 1: Xuất ra giáo viên có lương hơn 2000
SELECT * FROM dbo.GIAOVIEN WHERE LUONG > 2000
Ví dụ 2: Xuất ra các giáo viên là nữ và có lương hơn 2000
SELECT * FROM dbo.GIAOVIEN WHERE LUONG > 2000 AND PHAI = N'Nữ'
Ví dụ 3: Lấy ra những giáo viên lớn hơn 40 tuổi. Trong câu này ta sử dụng thêm hàm
YEAR(
) để lấy ra năm của ngày
GETDATE() lấy ra ngày hiện tại. ( Đã nêu ở INSERT, DELETE, UPDATE TABLE TRONG SQL )
SELECT * FROM dbo.GIAOVIEN WHERE YEAR(GETDATE()) - YEAR(NGSINH) > 40
Ví dụ 4: Lấy ra họ tên, năm sinh, tuổi của các giáo viên nhỏ hơn 40 tuổi
SELECT HOTEN, NGSINH, YEAR(GETDATE()) - YEAR(NGSINH) FROM dbo.GIAOVIEN WHERE YEAR(GETDATE()) - YEAR(NGSINH) <= 40
Lúc này column tuổi không có tên xác định bạn có thể gán tên cho column như sau
SELECT HOTEN, NGSINH, YEAR(GETDATE()) - YEAR(NGSINH) AS 'TUOI' FROM dbo.GIAOVIEN WHERE YEAR(GETDATE()) - YEAR(NGSINH) <= 40
Ví dụ 5: Lấy ra tất cả thông tin của giáo viên là trưởng bộ môn
SELECT GV.* FROM dbo.GIAOVIEN AS GV, dbo.BOMON AS BM WHERE BM.TRUONGBM = GV.MAGV
Ví dụ 6: Lấy ra tên giáo viên và tên đề tài giáo viên đó tham gia
-- Lấy ra tên giáo viên và tên đề tài người đó tham gia SELECT HOTEN, TENDT FROM dbo.GIAOVIEN, dbo.THAMGIADT, dbo.DETAI WHERE GIAOVIEN.MAGV = THAMGIADT.MAGV AND DETAI.MADT = THAMGIADT.MADT
COUNT()
Hàm COUNT() là một hàm rất hữu ích, dùng để đếm số lượng record được chỉ định.
Cấu trúc:
SELECT COUNT(
FROM
WHERE <Điều kiện>
Đếm số lượng của tất cả Record
SELECT COUNT(*) FROM
Ví dụ:
Ví dụ 1: Đếm số lượng giáo viên có trong Table Giáo Viên
SELECT COUNT(*) AS N'Số lượng giáo viên' FROM dbo.GIAOVIEN
Ví dụ 2: Đếm số lượng người thân của Giáo viên có mã GV là 007
-- Đếm số lượng người thân của Giáo viên có mã GV là 007 SELECT COUNT(*) AS N'Số lượng người thân' FROM dbo.GIAOVIEN, dbo.NGUOITHAN WHERE GIAOVIEN.MAGV = '007' AND GIAOVIEN.MAGV = NGUOITHAN.MAGV
AVG()
Hàm AVG() là một hàm tính toán, dùng để lấy giá trị trung bình của một column có giá trị số được chỉ định.
Cấu trúc:
SELECT AVG(
FROM
WHERE <Điều kiện>
Ví dụ:
Ví dụ 1: Xuất ra mức lương trung bình của các giáo viên
SELECT AVG(LUONG) AS 'TBLUONG' FROM dbo.GIAOVIEN
Ví dụ 2: Xuất ra trung bình lương của các giáo viên nữ
SELECT AVG(LUONG) AS 'TBLUONG' FROM dbo.GIAOVIEN WHERE PHAI= N'Nữ'
SUM()
Hàm SUM() là hàm tính toán, dùng để lấy tính tổng giá trị số của một column được chỉ định.
Cấu trúc:
SELECT SUM(
FROM
WHERE <Điều kiện>
Ví dụ:
Ví dụ 1: Xuất ra tổng kinh phí dành cho các đề tài có thời gian kết thúc trước năm 2009
SELECT SUM(KINHPHI) AS 'TONG KINH PHI' FROM dbo.DETAI WHERE YEAR(NGAYKT) < 2009
Ví dụ 2: Xuất ra tổng lương của giáo viên nam có năm sinh trước 1960
SELECT SUM(LUONG) AS N'Tổng lương' FROM dbo.GIAOVIEN WHERE PHAI= N'Nam'AND YEAR(NGSINH) <1960
ref: Liên quan tới định nghĩa bảng
Các vấn đề về toàn vẹn dữ liệu
+ Toàn vẹn thực thể (entity integrity): primary key, unique, identity
+ Toàn vẹn tham chiếu (referential integrity): foreign key, check
+ Toàn vẹn miền dữ liệu (domain integrity): default, foreign key, check, not null
+ Toàn vẹn người dùng (user integrity): rules, stored procedures, triggers
Các hỗ trợ với toàn vẹn
+ Ràng buộc kiểm tra (check constraint): phải thỏa mãn điều kiện nào đó
+ Ràng buộc mặc định (default constraint): phải có một giá trị mặc định
+ Ràng buộc duy nhất (unique constraint): các giá trị trong cột không được trùng lặp
+ Ràng buộc khóa ngoài (foreign key constraint): các giá trị phải hợp lệ với cột khóa chính tương ứng
+ Ràng buộc khóa chính (primary key constraint): phải duy nhất và không trống
+ Thuộc tính định danh (identity property): có thể được tăng tự động
+ Thuộc tính không trống (not null property): không được phép để trống
Các kiểu dữ liệu
Giá trị nhị phân: bit
Các số nguyên: bigint, int, smallint, tinyint
Các số thực xấp xỉ: float, real
Giá trị số thực chính xác: decimal, numberic
Giá trị tiền tệ: money, smallmoney
Giá trị hời gian: datetime, smalldatetime
Các chuỗi: char, varchar, text, nchar, nvarchar, ntext,
Các chuỗi nhị phân: binary, varbinary, image
Các kiểu khác: cursor, table, variant, timestamp, uniqueidentifier
Bài viết gốc được đăng tải tại lcdung.top
Có thể bạn quan tâm:
Xem thêm Việc làm ngành IT hấp dẫn trên TopDev
Nếu bạn đang làm việc với các bộ dữ liệu lớn trong SQL, chắc hẳn bạn sẽ biết tầm quan trọng của việc có thể lọc được kết quả của mình. Đó là nơi hàm WHERE xuất hiện. Bằng cách sử dụng chức năng này để thực hiện truy vấn có điều kiện trong SQL, bạn có thể dễ dàng chỉ chọn các hàng đáp ứng các tiêu chí cụ thể, giúp phân tích dữ liệu của bạn dễ dàng hơn và rút ra kết luận có ý nghĩa.
Mục lục
Trường văn bản và trường số
SQL yêu cầu dấu nháy đơn quanh văn bản (hầu hết các hệ thống cơ sở dữ liệu sẽ yêu cầu dấu nháy kép cơ).
Dù sao, trường số không cần phải đưa vào trong dấu nháy:
Ví dụ
SELECT * FROM Customers WHERE CustomerID=1;
Kết quả:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
Keywords searched by users: câu lệnh điều kiện trong sql
Categories: Tóm tắt 64 Câu Lệnh Điều Kiện Trong Sql
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/