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

Bài 4 Truy vấn nâng cao (Thực hành) pdf

10 650 3

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 10
Dung lượng 544,08 KB

Nội dung

Bài 4 Truy vấn nâng cao Thực hành Mục tiêu bài học: Kết thúc chương này,bạn có thể:  Viết các câu lệnh T-SQL để thực thi các sub-queries  Viết các câu lệnh T-SQL sử dụng mệnh đề EXIST

Trang 1

Bài 4 Truy vấn nâng cao (Thực hành) Mục tiêu bài học:

Kết thúc chương này,bạn có thể:

 Viết các câu lệnh T-SQL để thực thi các sub-queries

 Viết các câu lệnh T-SQL sử dụng mệnh đề EXISTS

 Thực thi truy vấn dữ liệu trên các tập kết quả

 Sử dụng từ khoá DISTINCT để lọc queries

 Sử dụng mệnh đề COMPUTE và COMPUTE BY để thực thi các query tổng kết

 Sử dụng cấu trúc SELECT INTO đẻ chuyển dữ liệu giữa hai bảng

Các bước nêu trong bài này khá chi tiết, toàn diện và xuyên suốt toàn bài Bài này đã đựoc biên soạn để thực hiệnc các mục tiêu đề ra và để nắm vững bộ công cụ Hãy bám sát các bước sau.

Mục tiêu của bài thực hành này là để học viên làm quen với cách viết các subquery, sử dụng mệnh đề EXIST và mệnh đề DISTINCT, lọc query sử dụng COMPUTE và COMPUTE BY Học viên cũng sẽ biết cách lưu kết quả truy vấn dùng cấu trúc SELECT INTO Về tổng thể học viên

sẽ thu nhận được nhiều kiến thức phong phú để thực thi các truy vấn nâng cao với SQL Server và T-SQL

Như chúng ta đã học có ba cách để kết hợp dữ liệu từ nhiều bảng:

1Subqueries - Là một query được gói bên trong một query khác.

2Unions - Kết hợp các dòng từ nhiều bảng

3Joins - Kết hợp các cột từ nhiều bảng.

Sử dụng subquery

Chúng ta có thể sử dụng một câu lệnh SELECT để trả về các bản ghi mà sẽ được sử dụng bởi câu

lệnh SELECT khác Câu lệnh bao ở bên ngoài gọi là parent query và câu lệnh bên trong gọi là subquery

Select <Column Name> from <table> WHERE

Ví dụ, giả sử chúng ta muốn biết tên các sản phẩm mà đã đựoc đặt hàng, chúng ta có thể sử dụng câu lệnh sau:

Trang 2

Hình 4.1: Sử dụng subqueries

Như chúng ta đã biêt trong bài trước, những điểm sau cần nhớ khi sử dụng các subqueries: 1Chúng ta có thể sử dụng một subquery để thay thế cho một giá trị trong mệnh đề SELECT, như

là một phần của mệnh đề WHERE Điều này sẽ được chỉ ra ở ví dụ dưới đây

2Khi sử dụng các toán tử so sánh với sub-query, có một số giới hạn với việc trả lại số lượng dòng

và cột của sub-query Các giới hạn được tổng kết trong bảng 3.1

Một dòng Sử dụng =, >, < và các toán

tử so sánh khác

Sử dụng EXISTS Nhiều dòng Sử dụng ANY, ALL, IN và

EXISTS

Sử dụng EXISTS

Table 4.1

Ví dụ, subquery ở dưới đây sẽ trả về nhiều dòng và một cột Trong trường hợp này có thể sử dụng ANY hoặc ALL hoặc IN hoặc EXISTS

1Nếu sử dụng một toán tử so sánh cùng với subquery và subquery này trả về nhiều hơn một dòng, SQL Server sẽ báo lỗi

Trang 3

2Nhiều subquery có thể viết lại bằng lệnh joins

Sử dụng từ khoá EXISTS và NOT EXISTS

Khi một subquery có từ EXISTS, nó có chức năng kiểm tra sự tồn tại Từ khoá EXISTS đựoc sử dùng để kiểm tra sự tồn tại của các dòng trả về bởi subquery Subquery lúc này không thực sự trả lại dữ liệu, mà nó trả về một giá trị TRUE hoặc FALSE

Một subquery bao gồm từ EXISTS có cú pháp như sau:

WHERE [NOT] EXISTS (Subquery)

Ví dụ, giả sử chúng ta muốn biết chỉ những sản phẩm loại 1 đã được đặt hàng Chúng ta có thể sử dụng từ khoá EXISTS để kiểm tra nếu thông tin về sản phẩm tồn tại trong bảng order details Câu lệnh và kêt quả của nó được chỉ ra trong hình 4.2

Hình 4.2: Sử dụng mệnh đề EXISTS

Ví dụ, chúng ta muốn chỉ ra những sản phẩm loại 1 mà chưa được đặt hàng Chúng ta sẽ sử dụng

từ khoá NOT EXISTS để lấy về kết quả mong muốn

Trang 4

Câu lệnh và kết quả của nó được chỉ ra trong hình 4.3

HÌnh 4.3: Sử dụng mệnh đề NOT EXISTS

Có hai kiểu subquery: Nested queries và Correlated queries

Nested Subqueries

Có thể mở rộng khái niệm subquery đã học để có một subquery có thể gọi một subquery khác,

khi đó nó sẽ được gọi là nested subqueries

Theo như trên một subquery có thể lồng đến 32 mức nhưng khi đó nó sẽ không có được hiệu suât thi hành như mong muốn

Ví dụ, giả sử rằng chúng ta muốn tìm chi tiết của những hoá đơn mà bao gồm những sản phẩm

đựoc cung cấp từ thành phố London.

Câu lệnh và kết quả được hiển thị trong hình 4.4

Trang 5

HÌnh 4.4: Sử dụng nested subqueries

Từ khoá DISTINCT

Chúng ta đã học về cách sử dụng của các từ khoá trong lệnh SELECT

Ví dụ, chúng ta muốn hiển thị các prod_id không trùng nhau từ bảng order details với giảm giá là

0 Câu lệnh và kết quả như trong hình 4.5

Trang 6

Hình 4.5: Sử dụng mệnh đề DISTINCT Mệnh đề GROUP BY

Mệnh đề GROUP BY chia bảng thành một hoặc nhiều nhóm con trong đó mỗi nhóm con có cùng một giá trị và biểu thức chung Nếu một hàm tập hợp (aggregate) được sử dụng trong một câu lệnh SELECT, mệnh đề GROUP BY sẽ đưa ra một giá trị cho mỗi một tập hợp

Cú pháp: GROUP BY <Column name>

Ví dụ, giả sử rằng bạn muốn tìm số của các ghế đã đặt trước cho mỗi một máy bay

Trong query ở dưới đây, mệnh đề GROUP BY sẽ nhóm các dòng theo ProductId và cộng tổng số

lượng cho mỗi sản phẩm Câu lệnh và kết quả như trong hình 4.6

Trang 7

HÌnh 4.6: Mệnh đề GROUP BY

Từ khóa GROUP BY rồi đến các tên cột, được hiểu là nhóm theo các cột đó Nó hạn chế bớt các dòng của tập kết quả Giống như chúng ta nhóm những dòng lại, sao cho mỗi một nhóm sẽ chỉ còn lại một dòng Mỗi một tập kết quả được nhóm thành dòng sẽ chứa dữ liệu tổng kết của tập

đó

Có một số giới hạn trong những tên cột được chỉ ra trong danh sách sau từ khóa SELECT Chỉ những tên cột sau được phép xuât hiện trong danh sách:

1Các tên cột dùng để nhóm (những cột đứng sau GROUP BY)

2Những biểu thức mà chỉ trả về một giá trị cho mỗi giá trị trong cột để nhóm như các hàm aggregate mà có một tên cột như một tham số

Mệnh đề COMPUTE và COMPUTE BY

Ví dụ, nếu một người muốn xem số lượng đơn đặt hàng lớn nhất, cùng với số lượng của các đơn đặt hàng, câu lệnh SELECT sẽ như sau:

SELECT productid, quantity

from [order Details] compute max(quantity)

Kết quả của câu lệnh như trong hình 4.7

Trang 8

Hình 4.7: Sử dụng mệnh đề COMPUTE

COMPUTE trả về tổng kết của những hàm aggregate nguợc lại COMPUTE BY trả về tổng kết của tùng nhóm con trong tập kết quả COMPUTE BY phải bao gồm mệnh đề ORDER BY Ví dụ như trong hình 4.8

Trang 9

Hình 4.8: Sử dụng mệnh đề COMPUTE BY SELECT INTO

Câu lệnh SELECT INTO có thể tạo bảng và thêm dữ liệu lấy từ các bảng khác vào Cấu trúc của bảng mới sẽ phụ thuộc vào danh sách cột được sử dụng trong câu lệnh SELECT

Hình 4.9: Câu lệnh SELECT INTO Phần II Bài tập 1 giờ 30 phút

Chú ý: Những bảng để làm việc ở dưới đây được lấy từ CSDL Pubs Các cấu trúc giống với

phần bài tập ở Sem I

Trong Query Analyzer, viết các câu lệnh Transact SQL để giải các bài dưới đây.

1.Viết một query để hiển thị thông tin về các bảng Titles, TitleAuthor và Authors Sử dụng toán

tử UNION

2.Viết một query để hiển thị những tiêu đề thuộc loại business

3.Hiển thị tất cả các loại của sách, mỗi thứ chỉ một dòng

4.Hiển thị tổng nhuận bút của mỗi tác giả (Dùng mệnh đề GROUP BY)

5.Hiển thị tất cả các tác giả

6.Hiển thị những tác giả đã viết sách business (Sử dụng mệnh đề EXISTS)

Trang 10

7.Hiển thị số lượng sách được viết bởi mỗi tác giả.

8.Hiển thị số lượng trung bình của mỗi title trong bảng sales (Gợi ý: sử dụng GROUP BY)

Phần III Bài tập về nhà

1.Viết một query để hiển thị title id, tổng số các order, và tổng số của mỗi title trong bảng sales

2.Viết một query để hiển thị những author id mà có ít nhất 1 order (Sử dụng mệnh đề EXISTS

và having trong subquery)

3.Viết một query để hiển thị author ids mà không có “single order” (Sử dụng mệnh đề NOT

EXISTS và having trong subquery)

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

HÌNH ẢNH LIÊN QUAN

Hình 4.1: Sử dụng subqueries - Bài 4 Truy vấn nâng cao (Thực hành) pdf
Hình 4.1 Sử dụng subqueries (Trang 2)
Hình 4.2: Sử dụng mệnh đề EXISTS - Bài 4 Truy vấn nâng cao (Thực hành) pdf
Hình 4.2 Sử dụng mệnh đề EXISTS (Trang 3)
HÌnh 4.3: Sử dụng mệnh đề NOT EXISTS - Bài 4 Truy vấn nâng cao (Thực hành) pdf
nh 4.3: Sử dụng mệnh đề NOT EXISTS (Trang 4)
HÌnh 4.4: Sử dụng nested subqueries - Bài 4 Truy vấn nâng cao (Thực hành) pdf
nh 4.4: Sử dụng nested subqueries (Trang 5)
Hình 4.5: Sử dụng mệnh đề DISTINCT Mệnh đề GROUP BY - Bài 4 Truy vấn nâng cao (Thực hành) pdf
Hình 4.5 Sử dụng mệnh đề DISTINCT Mệnh đề GROUP BY (Trang 6)
HÌnh 4.6: Mệnh đề GROUP BY - Bài 4 Truy vấn nâng cao (Thực hành) pdf
nh 4.6: Mệnh đề GROUP BY (Trang 7)
Hình 4.7: Sử dụng mệnh đề COMPUTE - Bài 4 Truy vấn nâng cao (Thực hành) pdf
Hình 4.7 Sử dụng mệnh đề COMPUTE (Trang 8)
Hình 4.8: Sử dụng mệnh đề COMPUTE BY SELECT INTO - Bài 4 Truy vấn nâng cao (Thực hành) pdf
Hình 4.8 Sử dụng mệnh đề COMPUTE BY SELECT INTO (Trang 9)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w