Sử dụng SQL server

Sử dụng SQL server

Truy vấn với điều kiện trong SQL Server Truy vấn với điều kiện trong SQL Server Truy vấn với điều kiện trong SQL Server Truy vấn với điều kiện trong SQL Server Truy vấn với điều kiện trong SQL Server 3/5 (116 reviews)

Truy vấn với điều kiện trong SQL Server

Đã đăng 2017-04-05 04:42:07 bởi Kteam
8 bình luận 25063 lượt xem
Truy vấn với điều kiện trong SQL Server 3 /5 stars (4 reviews)
 

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é!


Nội dung chính

Để theo dõi tốt nhất bài này, bạn nên xem qua bài:

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

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	

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:

  1. Truy xuất thông tin của Table Tham gia đề tài

SELECT * FROM dbo.THAMGIADT
  1. Lấy ra Mã khoa và Tên khoa tương ứng

SELECT MAKHOA, TENKHOA FROM dbo.KHOA
  1. 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
  1. 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.

Howkteam,SQL server, key, constraint, select , from where, distinct top

Và mỗi MaGV chỉ ứng với một MaBM, Mỗi MaBM ứng với một MaKhoa.

Howkteam,SQL server, key, constraint, select , from where, distinct top

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!


Truy vấn có điều kiện

Cấu trúc:

SELECT [tính chất] <danh sách column>

FROM <danh sách Table/Query>

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<n> (lấy dữ liệu thứ n đầu tiên)

<danh sách column> 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: <tên Column> AS 'Tên thay thế'.

<danh sách table/query> 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: <tên table> AS <tên Alias>

<Đ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


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(<date>) để lấy ra năm của ngày <date>

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

Howkteam,SQL server, key, constraint, select , from where, distinct top

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(<Tên column>)
FROM <Tên table>
WHERE <Điều kiện>

Đếm số lượng của tất cả Record

SELECT COUNT(*) FROM <Tên Table>

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(<Tên column>)
FROM <Tên table>
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(<Tên column>)
FROM <Tên table>
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

Bài tập tự luyện

Sử dụng Database Howkteam đầu bài để thao tác các bài tập sau:

  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 đó
  2. Xuất ra số lượng giáo viên của khoa CNTT
  3. Xuất ra thông tin giáo viên và đề tài người đó tham gia khi mà kết quả là đạt​​​​​​​

Kết

Trong bài này, chúng ta đã biết cách TRUY VẤN CÓ ĐIỀU KIỆN cùng một số hàm tính toán cơ bản trong SQL Server.

Bài sau chúng ta sẽ tìm hiểu về TÌM KIẾM GẦN ĐÚNG TRONG SQL.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của bạn để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó

 



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 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 hoặc +1 Google để ủng hộ Kteam và tác giả nhé! 

​​​​​​​


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ÌNH LUẬ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. 

 

Chia sẻ:
Thảo luận Hỏi và đáp Báo lỗi bài viết
Hủy bỏ   hoặc  
Truy vấn với điều kiện trong SQL Server
Tuyền Lê 2018-04-01 14:46:37

CHO BIẾT GIÁO VIÊN LÀM VIỆC CÙNG BỘ MÔN VỚI GIÁO VIÊN '002' ?
AI GIÚP MÌNH CÂU NÀY VỚI

0 bình chọn
Reply
Truy vấn với điều kiện trong SQL Server
nhatyb1990 2018-02-28 23:14:12

SELECT gv2.*, gv1.MAGV, gv1.HOTEN FROM dbo.GIAOVIEN AS gv1, dbo.GIAOVIEN AS gv2
WHERE gv1.GVQLCM = gv2.MAGV

bài tập về nhà câu 1 làm này được không? thanks :D

1 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
Tuyền Lê 2018-03-31 17:33:32
SELECT TCH.MAGV, TCH.HOTEN, TCH2.MAGV AS MAGVQL,TCH2.HOTEN AS HOTENQL FROM GIAOVIEN AS TCH, GIAOVIEN AS TCH2 WHERE TCH2.MAGV=TCH.GVQLCM
0 bình chọn
Reply
Truy vấn với điều kiện trong SQL Server
nhatyb1990 2018-02-28 23:04:52

--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

 

- chỗ insert cho bảng giáo viên mình không thấy có insert MaBM, tại sao khi select * dbo.GiaoVien lại có nhỉ?
    

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
nhatyb1990 2018-02-28 23:24:01
nhìn thấy cập nhật rồi :D
0 bình chọn
Reply
Truy vấn với điều kiện trong SQL Server
1614117 2018-01-28 16:54:57

table giáo viên chủ nhiệm ở đâu ad

0 bình chọn
Reply
Truy vấn với điều kiện trong SQL Server
learning 2017-07-16 23:05:54

Hi Kteam,

 

 Mình xin thắc mắc về đáp án câu 4

SELECT GV.MAGV, GV.HOTEN, k.TENKHOA FROM dbo.GIAOVIEN AS GV, dbo.KHOA AS K

001    Nguyễn Hoài An    Công nghệ thông tin
002    Trần Trà Hương    Công nghệ thông tin
003    Nguyễn Ngọc Ánh    Công nghệ thông tin
004    Trương Nam Sơn    Công nghệ thông tin
005    Lý Hoàng Hà    Công nghệ thông tin
006    Trần Bạch Tuyết    Công nghệ thông tin
007    Nguyễn An Trung    Công nghệ thông tin
008    Trần Trung Hiếu    Công nghệ thông tin
009    Trần Hoàng nam    Công nghệ thông tin
010    Phạm Nam Thanh    Công nghệ thông tin
001    Nguyễn Hoài An    Hóa học
002    Trần Trà Hương    Hóa học
003    Nguyễn Ngọc Ánh    Hóa học
004    Trương Nam Sơn    Hóa học
005    Lý Hoàng Hà    Hóa học
006    Trần Bạch Tuyết    Hóa học
007    Nguyễn An Trung    Hóa học
008    Trần Trung Hiếu    Hóa học
009    Trần Hoàng nam    Hóa học
010    Phạm Nam Thanh    Hóa học
001    Nguyễn Hoài An    Sinh học
002    Trần Trà Hương    Sinh học
003    Nguyễn Ngọc Ánh    Sinh học
004    Trương Nam Sơn    Sinh học
005    Lý Hoàng Hà    Sinh học
006    Trần Bạch Tuyết    Sinh học
007    Nguyễn An Trung    Sinh học
008    Trần Trung Hiếu    Sinh học
009    Trần Hoàng nam    Sinh học
010    Phạm Nam Thanh    Sinh học
001    Nguyễn Hoài An    Vật lý
002    Trần Trà Hương    Vật lý
003    Nguyễn Ngọc Ánh    Vật lý
004    Trương Nam Sơn    Vật lý
005    Lý Hoàng Hà    Vật lý
006    Trần Bạch Tuyết    Vật lý
007    Nguyễn An Trung    Vật lý
008    Trần Trung Hiếu    Vật lý
009    Trần Hoàng nam    Vật lý
010    Phạm Nam Thanh    Vật lý

Mình vẫn thấy nó tra ve đáp án đúng, ko cần thiết phải thêm table BoMon vào ? Không biết mình làm sai hay hiểu sai gì ở câu này ko ?

Thanks.

0 bình chọn
Reply
View all 1 comments
Kteam - Howkteam Free Education
K9 2017-08-01 23:15:47
câu 4 đâu làm gì liên quan đến bộ môn đâu bạn. ý bạn là câu 5?
0 bình chọn
Reply
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  

Chiến dịch

Kteam - Howkteam Free Education