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

Sử dụng SQL server

5.0 (8 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 3 năm trước 216.119 lượt xem 23 bình luận
Tác giả/Dịch giả: Kteam
Học nhanh

Danh sách bài học

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

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:


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

  1. Lấy ra Mã khoa và Tên khoa tương ứng

  1. Lấy ra Mã GV, tên GV và họ tên người thân tương ứng

  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)

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


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


Ví dụ 2: Xuất ra các giáo viên là nữ và có lương hơn 2000

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 )

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

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

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

Ví dụ 6: Lấy ra tên giáo viên và tên đề tài giáo viên đó tham gia


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

Ví dụ 2: Đếm số lượng người thân của Giáo viên có mã GV là 007


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

Ví dụ 2: Xuất ra trung bình lương của các giáo viê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

Ví dụ 2: Xuất ra tổng lương của giáo viên nam có năm sinh trước 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 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 likeshare để ủng hộ Kteam và tác giả nhé!

Project

Nếu việc thực hành theo hướng dẫn không diễn ra suôn sẻ như mong muốn. Bạn cũng có thể tải xuống PROJECT THAM KHẢO ở link bên dưới!


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.

Tác giả/Dịch giả

Khóa học

Sử dụng SQL server

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á

5.0
8 đánh giá
Đánh giá
5
8
4
3
2
1
Nahida đã đánh giá khoảng 1 năm trước

tnhu_chaycode đã đánh giá 2 năm trước

Cám ơn Kteam rất nhiều ạ

lp2411 đã đánh giá 2 năm trước

Siêu dễ hiểu

Hải Đại Đào đã đánh giá 3 năm trước

phamson287 đã đánh giá 3 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Nahida đã bình luận khoảng 1 năm trước

--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 GV1
WHERE GV1.GVQLCM = GV.MAGV
--2. Xuất ra số lượng giáo viên của khoa CNTT
SELECT COUNT(*) AS N'Số lượng giáo viên'
FROM dbo.GIAOVIEN AS GV, dbo.BOMON AS BM, dbo.KHOA AS K 
WHERE 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à đạt
SELECT GV.HOTEN, DT.TENDT
FROM dbo.GIAOVIEN AS GV, dbo.THAMGIADT AS TG, dbo.DETAI AS DT
WHERE GV.MAGV = TG.MAGV AND TG.MADT = DT.MADT AND TG.KETQUA = N'Đạt'

tuanhung đã bình luận 2 năm trước

--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 gv2
where gv.magv=gv2.gvqlcm
--Xuất ra số lượng giáo viên của khoa CNTT
select count(*) as N'Gv khoa CNTT'from giaovien as gv
join bomon as bm on bm.mabm=gv.mabm
join khoa as K on k.makhoa=bm.makhoa
where 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à đạt
select gv.magv,gv.hoten,dt.tendt from giaovien as gv
join thamgiadt as tg on tg.magv=gv.magv
join detai as dt on tg.madt=dt.madt
where tg.ketqua=N'Đạt'

phanthebao123 đã bình luận 3 năm trước

--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 GVCN
WHERE GV.GVQLCM = GVCN.MAGV
Go

--2. Xuất ra số lượng giáo viên của khoa cntt
SELECT COUNT(*) 
FROM dbo.GIAOVIEN AS GV, dbo.BOMON AS BM, dbo.KHOA AS KH
WHERE GV.MABM = BM.MABM
AND BM.MAKHOA = KH.MAKHOA
AND 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à đạt
SELECT GV.MAGV, GV.HOTEN, DT.TENDT, TGDT.KETQUA 
FROM dbo.GIAOVIEN AS GV, dbo.THAMGIADT AS TGDT, dbo.DETAI AS DT
WHERE GV.MAGV = TGDT.MAGV
AND TGDT.MADT = DT.MADT
AND TGDT.KETQUA = N'Đạt'
Go

trà nè đã bình luận 3 năm trước
  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.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

tungnt135qn đã bình luận 4 năm trước

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 khoa
select    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 BM
where 
        Gv.magv = pdt.MAGV and
        pdt.madt = dt.madt and
        gv.mabm = bm.mabm and
        bm.makhoa = k.makhoa

Không có video.