1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài 10 Truy vấn dữ liệu pptx

20 375 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 322,9 KB

Nội dung

Trong bài này chúng ta sẽ xem xét kỹ các câu lệnh T-SQL dùng để truy xuất dữ liệu từ nhiều bảng.. Ví dụ, nếu chúng ta muốn hiển thị danh sách các tác giả từ bang CA trong bảng authors s

Trang 1

Bài 10 Truy vấn dữ liệu Mục đích bài học:

Cuối bài học viên có thể:

 Nắm vững cách truy vấn dữ liệu bằng các truy vấn T-SQL đơn giản.

 Dùng các truy vấn T-SQL để truy xuất dữ liệu theo điều kiện.

 Dùng các truy vấn T-SQL để truy xuất dữ liệu theo nhóm.

 Dùng các truy vấn T-SQL để truy xuất dữ liệu không trùng lặp.

 Nắm vững cách dùng các hàm tập hợp trong SQL Server.

 Nắm vững cách dùng INNER JOIN để truy xuất dữ liệu từ nhiều bảng.

Giới thiệu

Trong bài trước chúng ta đã học cách thêm, sửa và xoá dữ liệu trong bảng Chúng ta đã nắm được cách sử dụng các câu lệnh và các toán tử hỗ trợ bởi SQL Server Chúng ta đã học cú pháp của các câu lệnh INSERT, UPDATE và DELETE và sử dụng các câu lệnh này trong một số ví dụ Chúng

ta cũng đã bàn về khái niệm liên kết các bảng và cuối cùng chúng ta đã bàn về việc nhập và xuất

dữ liệu vào ra SQL Server bằng công cụ hỗ trợ DTS (Data Transformation Services)

Trong bài này chúng ta sẽ xem xét kỹ các câu lệnh T-SQL dùng để truy xuất dữ liệu từ nhiều bảng Chúng ta sẽ tìm hiểu chi tiết các truy vấn giúp truy xuất dữ liệu hiệu quả nhất từ nhiều bảng Chúng ta cũng sẽ tóm lược cách dùng các hàm tập hợp và cách sử dụng INNER JOIN để truy xuất dữ liệu từ nhiều bảng

10.1 Dùng T-SQL để truy xuất dữ liệu

Mục đích chính của SQL là dùng để giao tiếp với cơ sở dữ liệu Dữ liệu chỉ có ý nghĩa khi chúng

ta truy xuất và thao tác với chúng Truy vấn là một dạng câu hỏi được viết bằng Ngôn ngữ truy vấn có cấu trúc (SQL) Theo tên gọi thì SQL là ngôn ngữ tốt nhất để viết các câu truy vấn Dùng SQL ta có thể truy vấn bất kỳ thành phần dữ liệu nào trong các bảng của cơ sở dữ liệu quan hệ Chúng ta đã quen thuộc với các truy vấn dữ liệu từ một bảng Câu lệnh dùng để viết truy vấn là

SELECT Khi thực thi câu lệnh SELECT, thông tin lưu trữ trong bảng được hiển thị Chúng ta

có thể mở rộng câu lệnh này để tạo ra các câu truy vấn rất phức tạp và nhiều thành phần

SELECT là câu lệnh SQL quan trọng nhất Dùng SELECT chúng ta có thể:

 Hiển thị một số hay tất cả các trường trong bảng

 Hiển thị một số hay tất cả các bản ghi trong bảng

 Hiển thị các thông tin tính toán của dữ liệu trong bảng như giá trị trung bình hoặc tổng của các giá trị trong trường

 Liên kết thông tin từ hai hoặc nhiều bảng

Các câu truy vấn SQL khá đơn giản so với các ngôn ngữ lập trình khác

10.1.1 Truy vấn và cú pháp của SELECT

Câu lệnh SELECT đơn giản được xây dựng từ năm thành phần cơ bản sau:

Trang 2

SELECT <columnname(s)> FROM <tablename> ;

Hình 10.1 – Câu lệnh SELECT

1. SELECT là từ khoá đầu tiên trong truy vấn, theo sau là một dấu cách phân tách với danh

sách các trường

2. <columnname(s)> (tên các trường) phải là thành phần tiếp theo trong câu truy vấn Tên các

trường phải được phân tách bằng dấu phảy (,) và phải tồn tại trong bảng đang truy vấn

3. FROM phải là từ khoá tiếp theo trong câu truy vấn, được phân tách với danh sách các trường

bằng một dấu cách

4. <tablename> phải là thành phần tiếp theo trong câu truy vấn, được phân tách với từ khoá

FROM bằng một dấu cách

5 Thành phần cuối cùng trong câu truy vấn là một dấu chấm phảy (;) Ký tự này báo với SQL rằng câu truy vấn đã kết thúc và cần được thực thi Đây là một ký tự tuỳ chọn, nếu thiếu câu truy vấn vẫn được thực thi

Định dạng của câu lệnh SELECT như sau:

SELECT (nội dung gì?) Tên một hoặc nhiều trường Tên các trường phải được phân tách với nhau bằng dấu phảy (,) Chú ý tên trường cuối cùng không có dấu phảy FROM (từ đâu?) tên bảng

SELECT và FROM là hai từ khoá bắt buộc trong một câu lệnh SELECT

SELECT * FROM <tablename>;

Câu lệnh này truy xuất tất cả dữ liệu trong bảng Để truy xuất tất cả các trường trong bảng ta dùng ký tự sao (*) Bằng cách này ta không phải nhập đầy đủ tên các trường

Câu lệnh SELECT có rất nhiều lựa chọn và định dạng khác nhau Chúng ta mới chỉ xem qua định dạng đơn giản nhất, các lựa chọn khácnhư sau:

WHERE: Đây là phần tuỳ chọn của câu truy vấn Nó chỉ ra điều kiện truy vấn Nếu truy

vấn không có mệnh đề WHERE nó sẽ truy xuất tất cả các bản ghi của bảng Mệnh đề này

có thể chứa các điều kiện so sánh Ví dụ, để hiển thị tên các tác giả (authors) của bang

CA ta dùng câu lệnh truy vấn sau::

SELECT au_fname FROM authors WHERE state = ‘CA’;

GROUP BY: Đây cũng là phần tuỳ chọn của câu truy vấn Nó đươc dùng chỉ khi ta

muốn nhóm kết quả truy vấn theo một tiêu chí nào đó Ví dụ, khi ta muốn hiển thị các tác giả (authors) từ các bang (state) khác nhau được nhóm theo bang (state) ta dùng câu lệnh sau:

SELECT state FROM authors GROUP BY state

Trang 3

ORDER BY: Đây cũng là phần tuỳ chọn của câu truy vấn dùng để sắp xếp thứ tự các

bản ghi được hiển thị bởi câu truy vấn Ví dụ, nếu chúng ta muốn hiển thị danh sách các tác giả từ bang CA trong bảng authors sắp xếp theo tên (au_fname) chúng

ta dùng câu truy vấn sau:

SELECT * FROM authors WHERE state='CA' ORDER BY au_fname;

Chúng ta đã tìm hiểu các thành phần cơ bản của một câu lệnh SELECT và các thành phần tùy chọn của nó, bây giờ chúng ta sẽ xem xét chi tiết hơn

10.1.2

Câu lệnh SELECT đơn giản

Câu lệnh đơn giản nhất để truy xuất tất cả các trường trong bảng có định dạng như sau:

SELECT * FROM Stores;

Hình 10.1: Truy xuất tất cả dữ liệu trong bảng

Câu lệnh trên hiển thị tất cả các bản ghi và trường từ bảng Stores Các trường được hiển thị lần lượt theo thứ tự như khi ta tạo bảng

Các bảng dữ liệu thường rất lớn và chứa nhiều bản ghi dữ liệu Do đó việc hiển thị tất cả các bản ghi của bảng trong câu truy vấn là không cần thiết và thiếu thực tế Với mệnh đề WHERE ta có thể truy xuất dữ liệu theo điều kiện Mệnh đề WHERE trong truy vấn đóng vai trò là bộ lọc, hạn chế số bản ghi theo điều kiện định sẵn Chỉ những bản ghi thỏa mãn điều kiện mới được hiển thị trong kết quả của câu truy vấn

Điều kiện trong mệnh đề WHERE được gọi là mệnh đề điều kiện Xem ví dụ sau:

SELECT * FROM titles WHERE type = ‘business’

Trang 4

Hình 10.2: Truy vấn dữ liệu theo điều kiện

Trong câu truy vấn, mệnh đề WHERE được dùng để giới hạn kết quả của câu truy vấn, chỉ hiển thị những bản ghi có trường type là ‘business’ Khi câu lệnh được thực thi, mỗi bản ghi trong bảng sẽ được so sánh với giá trị trong điều kiện Chỉ các bản ghi có giá trị thỏa mãn điều kiện mới được hiển thị Cần chú ý rằng trường dữ liệu được dùng trong mệnh đề điều kiện WHERE không nhất thiết phải được hiển thị trong kết quả truy vấn

Cú pháp: SELECT <Tên trường> FROM <Tên bảng>

WHERE <Điều kiện>

Mệnh đề điều kiện có thể chứa bất kỳ kiểu dữ liệu nào như ký tự, số hay ngày tháng Các toán tử logic như AND, OR và NOT có thể được dùng kết hợp trong mệnh đề điều kiện Ví dụ, để truy

xuất chi tiết các tác giả (author) sống tại bang (state) CA và thành phố (city) Oakland chúng ta

dùng câu lệnh sau:

SELECT au_id, au_fname, au_lname FROM authors

WHERE state='CA' and city='Oakland'

Các toán tử quan hệ cũng có thể được dùng trong mệnh đề điều kiện để xây dựng điều kiện chi tiết hơn Một mệnh đề điều kiện có thể là sự kết hợp của các loại toán tử như logic và toán tử quan hệ Bây giờ chúng ta sẽ xem một ví dụ phức tạp hơn, trong ví dụ này ta muốn hiển thị chi

tiết các tác giả (author) sống ở bang (state) CA và thành phố (city) Oakland và có ít nhất một hợp

đồng (contract), chúng ta dùng câu lệnh sau:

SELECT au_id, au_fname, au_lname FROM authors

WHERE state='CA' and city='Oakland' and contract>0

Trang 5

Hình 10.3: Dùng các toán tử logic và quan hệ trong mệnh đề WHERE

Chúng ta thấy rằng các bản ghi trong bảng không được sắp xếp Nếu chúng ta muốn các bản ghi

hiển thị theo thứ tự cụ thể, ta dùng mệnh đề ORDER BY Mệnh đề ORDER BY sắp xếp kết quả

truy vấn Nó có thể sắp xếp tăng dần (ASC) hay giảm dần (DESC) Mặc định các bản ghi được sắp xếp tăng dần

Câu lệnh SELECT sau sắp xếp dữ liệu trong bảng authors theo trường au_fname.

SELECT * from authors

ORDER BY au_fname

Trong ví dụ dưới đây, nếu ta muốn liệt kê danh sách các cuốn sách có giá lớn hơn 10.00 và sắp

xếp theo tiêu đề (title) từ bảng titles, ta dùng truy vấn sau:

SELECT title, price from titles WHERE price>10 ORDER BY title

Trang 6

Figure 10.4: Ordering data

Thứ tự sắp xếp có thể là tăng dần hay giảm dần Dùng các tham số DESC or ASC ta có thể sắp xếp các bản ghi theo thứ tự yêu cầu Nếu không có tham số nào trong câu lệnh truy vấn, thứ tự sắp xếp là tăng dần Trong ví dụ dưới đây mệnh đề ORDER BY được dùng với trường Category_Code

Book_Code Category_Code

Ta cũng có thể sắp xếp dữ liệu dựa trên nhiều trường Xem ví dụ sau:

Trang 7

Hình 10.5: Sắp xếp theo nhiều trường dữ liệu

Ta có thể kết hợp các trường dữ liệu với các hằng số kiểu chuỗi để có kết quả dễ đọc và định dạng hợp lý Thông thường các hằng số này không tồn tại như một trường dữ liệu trong kết quả truy vấn mà được kết hợp với các trường khác để xây dựng kết quả hiển thị cho truy vấn

Ví dụ, để thêm vào các ký tự ‘:’ và ‘->’ trong kết quả truy vấn dữ liệu từ bảng titles ta tạo truy

vấn như sau:

Select title_id +':'+ title + ' -> ' + type

From titles

Mệnh đề AS có thể được dùng để thay đổi tiêu đề của trường dữ liệu hay gán tiêu đề cho trường

phát sinh trong kết quả của câu truy vấn Các trường hiển thị trong kết quả của câu truy vấn

thường có tiêu đề là tên trường trong bảng Để có tiêu đề dễ hiểu hơn ta dùng mệnh đề AS để tùy

biến

Ví dụ, để hiển thị tiêu đề “ROLL NUMBER” thay cho trường RollNo trong bảng Students ta

dùng câu lệnh SELECT sau:

Select RollNo as 'ROLL NUMBER' FROM Students

Các câu lệnh SELECT có thể được dùng với các ràng buộc Ví dụ, ràng buộc IDENTITY có thể được sử dụng trong truy vấn như sau:

Chú ý: Khi dùng toán tử + trong danh sách truy vấn, ta cần chú ý đến kiểu dữ liệu của các

trường Các trường là toán hạng của toán tử này phải có cùng kiểu dữ liệu, nếu không SQL Server sẽ báo lỗi

Trang 8

SELECT IDENTITY(datatype, seed, increment) AS ID_Number

INTO Table2

FROM Table1

Trong câu truy vấn trên Table1 là bảng có sẵn và Table2 là bảng mà ta muốn tạo ra và đưa các giá trị tự tăng vào

data_type là kiểu dữ liệu của trường tự tăng Trường này chỉ nhận các kiểu dữ liệu integer hay kiểu dữ liệu decimal

seed là giá trị gán cho bản ghi đầu tiên của bảng Các bản ghi tiếp theo được gán các giá trị tăng dần, các giá trị này được tính bằng tổng của giá trị IDENTITY cuối cùng cộng với giá trị tăng (increment)

Increment là giá trị tăng được cộng thêm cho các bản ghi tiếp theo của bảng dữ liệu

Từ khóa DISTINCT loại bỏ các bản ghi trùng lặp từ truy vấn Nếu không có từ khóa DISTINCT, truy vấn sẽ trả về tất cả các bản ghi bao gồm cả các bản ghi trùng lặp

Ví dụ, nếu chúng ta truy xuất trường MaterialType trong bảng Material không dùng từ khóa

DISTINCT ta sẽ nhận được một danh sách dài các giá trị MaterialTypes trùng lặp Nêu dùng

DISTINCT trong truy vấn SQL Server sẽ chỉ trả về các giá trị MaterialType duy nhất Câu truy

vấn này như sau:

SELECT DISTINCT MaterialType FROM Material

Mệnh đề TOP được dùng để hạn chế số bản ghi trả về trong kết quả truy vấn.

Câu lệnh SELECT này có cú pháp như sau:

Cú pháp: SELECT TOP n <tên trường> FROM <tên bảng>

Ví dụ: Để hiển thị 3 bản ghi đầu tiên trong bảng Students ta dùng:

SELECT TOP 3 * FROM Students

Ký tự * trong câu truy vấn truy xuất tất cả các trường

Tương tự như vậy ta có thể truy xuất số bản ghi theo tỷ lệ phần trăm từ bảng dữ liệu Ví dụ, truy vấn:

SELECT TOP 40 PERCENT * FROM Students

sẽ truy xuất 40% bản ghi đầu tiên của bảng Students

10.2 Các hàm tập hợp và truy vấn theo nhóm

Truy vấn theo nhóm (group query) có thể được dùng để hiển thị dữ liệu hiệu quả hơn Truy vấn này thường được dùng khi ta muốn nhóm dữ liệu từ bảng theo một hay nhiều tiêu chí trước khi

Trang 9

hiển thị kết quả Truy vấn này có thể làm việc trên toàn bộ bản ghi của bảng hay trên một số bản ghi thỏa mãn điều kiện được chỉ ra trong mệnh đề WHERE Các hàm tập hợp (Aggregate Function) được dùng để tạo ra các giá trị duy nhất cho từng nhóm bản ghi, đồng thời tạo giá trị tổng

10.2.1 Mục đích và ý nghĩa của truy vấn theo nhóm

Truy vấn theo nhóm trả về một tập hợp kết quả với mỗi một bản ghi cho từng nhóm dữ liệu, nó chứa các các giá trị tổng hợp của từng nhóm Truy vấn này thường được dùng khi ta muốn truy xuất dữ liệu lớn, việc nhóm dữ liệu theo một tiêu chí nhất định sẽ hiển thị kết quả hiệu quả hơn

10.2.3 Các hàm tập hợp

Các hàm tập hợp như SUM, AVG, COUNT, MAX, MIN tạo ra các giá trị tổng hợp trong kết quả truy vấn

SQL Server hỗ trợ các hàm tập hợp sau:

 SUM

Hàm SUM trả về tổng số của tất cả các giá trị của trường dữ liệu trong biểu thức Ta có thể dùng DISTINCT với SUM để tính tổng cho các giá trị duy nhất của trường dữ liệu trong biểu thức Các

giá trị NULL được bỏ qua SUM chỉ có thể được dùng với các trường dữ liệu kiểu số (numeric).

Cú pháp: SUM(biểu thức)

Ví dụ, để tìm tổng số học viên đăng ký cho khóa học có CourseCode là 1 ta dùng hàm SUM trong câu lệnh SELECT như trong hình dưới đây:

Hình 10.6: Hàm SUM

Các hàm tập hợp còn có ý nghĩa khác khi dùng với mệnh đề GROUP BY Chúng ta sẽ bàn về mệnh đề GROUP BY trong phần sau

 AVG

Hàm AVG trả về giá trị trung bình của tất cả các giá trị của trường dữ liệu được chỉ ra trong biểu

thức AVG chỉ có thể được dùng với các trường số (numeric) và có thể tự loại bỏ các giá trị

NULL

Trang 10

Cú pháp: AVG([ALL|DISTINCT]biểu thức)

ALL: Là giá trị mặc định, có tác dụng với tất cả các giá trị

DISTINCT: Chỉ ra rằng AVG chỉ làm việc với một giá trị duy nhất của trường được chi

ra, bất kể các giá trị này xuất hiện bao nhiêu lần

Biểu thức :Có thể là bất kỳ biểu thức SQL Server nào, thường là tên trường dữ liệu

Ví dụ, để tìm trung bình giá trị các hóa đơn trong bảng Invoice ta dùng truy vấn như trong hình 10.7

Hình 10.7: Hàm AVG

 COUNT

Hàm COUNT đếm được các giá trị khác NULL trong biểu thức Nếu dùng với từ khóa

DISTINCT, COUNT đếm được các giá trị duy nhất Hàm COUNT có thể được dùng với các trường số và ký tự Các trường KHÓA CHÍNH và KHÓA NGOẠI dùng tốt nhất với hàm

COUNT vì các trường này không chứa giá trị NULL

Ta cũng có thể dùng ký tự sao (*) thay cho biểu thức trong hàm COUNT Với cách dùng này ta sẽ đếm tất cả các bản ghi mà không quan tâm đến bất kỳ trường dữ liệu nào

Cú pháp: COUNT(Biểu thức) hay

COUNT(*)

Ví dụ, để đếm số khóa học trong bảng Course ta dùng:

Trang 11

Hình 10.8: Hàm COUNT

 MAX

Hàm MAX trả về giá trị lớn nhất trong biểu thức Hàm MAX có thể được dùng với các kiểu dữ

liệu số, chuỗi và ngày tháng MAX trả về giá trị lớn nhất trong toàn bộ giá trị sau khi đã đối chiếu MAX bỏ qua các giá trị NULL

Cú pháp: MAX(Biểu thức)

Ví dụ, để tìm giá trị hóa đơn lớn nhất trong bảng Invoice ta dùng:

Hình 10.9: Hàm MAX

 MIN

Hàm MIN trả về giá trị nhỏ nhất trong biểu thức Hàm này có thể được dùng với các trường số,

chuỗi và ngày tháng Khi MIN được dùng với các trường kiểu chuỗi, MIN trả về giá trị nhỏ nhất trong danh sách so sánh MIN bỏ qua các giá trị NULL

Cú pháp: MIN(Biểu thức)

Ví dụ, để tìm giá trị hóa đơn nhỏ nhất trong bảng Invoice ta dùng truy vấn như trong hình 10.10:

Ngày đăng: 21/07/2014, 23:21

HÌNH ẢNH LIÊN QUAN

Hình 10.1 – Câu lệnh SELECT - Bài 10 Truy vấn dữ liệu pptx
Hình 10.1 – Câu lệnh SELECT (Trang 2)
Hình 10.1: Truy xuất tất cả dữ liệu trong bảng - Bài 10 Truy vấn dữ liệu pptx
Hình 10.1 Truy xuất tất cả dữ liệu trong bảng (Trang 3)
Hình 10.2: Truy vấn dữ liệu theo điều kiện - Bài 10 Truy vấn dữ liệu pptx
Hình 10.2 Truy vấn dữ liệu theo điều kiện (Trang 4)
Hình 10.3: Dùng các toán tử logic và quan hệ trong mệnh đề WHERE - Bài 10 Truy vấn dữ liệu pptx
Hình 10.3 Dùng các toán tử logic và quan hệ trong mệnh đề WHERE (Trang 5)
Hình 10.5: Sắp xếp theo nhiều trường dữ liệu - Bài 10 Truy vấn dữ liệu pptx
Hình 10.5 Sắp xếp theo nhiều trường dữ liệu (Trang 7)
Hình 10.6: Hàm SUM - Bài 10 Truy vấn dữ liệu pptx
Hình 10.6 Hàm SUM (Trang 9)
Hình 10.7: Hàm AVG - Bài 10 Truy vấn dữ liệu pptx
Hình 10.7 Hàm AVG (Trang 10)
Hình 10.8: Hàm COUNT - Bài 10 Truy vấn dữ liệu pptx
Hình 10.8 Hàm COUNT (Trang 11)
Hình 10.9: Hàm MAX - Bài 10 Truy vấn dữ liệu pptx
Hình 10.9 Hàm MAX (Trang 11)
Hình 10.11: GROUP BY - Bài 10 Truy vấn dữ liệu pptx
Hình 10.11 GROUP BY (Trang 12)
Hình 10.12: GROUP BY với HAVING - Bài 10 Truy vấn dữ liệu pptx
Hình 10.12 GROUP BY với HAVING (Trang 13)
Hình 10.13: Dùng INNER JOIN trong truy vấn - Bài 10 Truy vấn dữ liệu pptx
Hình 10.13 Dùng INNER JOIN trong truy vấn (Trang 17)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w