Chuyển đến nôi dung chính

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng (tiếng Anh).

Khi bạn đăng ký với trang developerWorks lần đầu tiên, một tiểu sử của của bạn được tạo ra. Chọn các thông tin về tiểu sử của bạn (tên, nước/vùng, và nơi làm việc) đã được hiện lên màn hình, thông tin này sẽ được hiện kèm với nội dung mà bạn đăng tải. Bạn có thể cập nhật thông tin này bất kỳ lúc nào.

Thông tin gửi đi được đảm bảo an toàn.

  • Đóng [x]

Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng (tiếng Anh).

Thông tin gửi đi được đảm bảo an toàn.

  • Đóng [x]

Hướng dẫn SQL & XQuery cho IBM DB2, Phần 5: So sánh dữ liệu

Sử dụng các truy vấn nâng cao để so sánh dữ liệu

Jessica Cao, Chuyên viên phát triển các công cụ đào tạo, IBM
Jessica Cao là một sinh viên ngành Nghệ thuật - Khoa học và ngành Khoa học máy tính tại Trường đại học McMaster. Chị sẽ tốt nghiệp văn bằng kép hạng danh dự vào tháng Tư 2009. Jessica đang làm việc trong chương trình hỗ trợ và lập kế hoạch kênh kỹ năng quản lý thông tin DB2 của phòng thí nghiệm IBM Toronto, nhằm chuyên chú sâu hơn vào lập trình, biên tập và kỹ năng viết
Bruce Creighton, Chuyên viên lập kế hoạch các phần kỹ năng, IBM
Bruce Creighton là chuyên viên lập kế hoạch các phần kỹ năng trong khoa Phát triển và Lập kế hoạch đào tạo Quản lý thông tin. Với vai trò này, ông lập kế hoạch đầu tư về nội dung đào tạo và cân bằng đầu tư giữa các lĩnh vực mà IBM có thu lợi nhuận với các lĩnh vực mà tại đó yêu cầu về phát triển các kỹ năng là quan trọng, cần cung cấp đào tạo miễn phí
Pat Moffatt, Giám đốc Chương trình quản lý thông tin, Sáng kiến học đường, IBM
Pat Moffatt là giám đốc Chương trình quản lý thông tin thuộc Sáng kiến học đường IBM. Thông qua chương trình sáng kiến học đường này, bà muốn làm ra sẵn những nguồn tài nguyên thích hợp phục vụ giảng dạy về quản lý thông tin để giúp các giảng viên đại học tích hợp chủ đề phần mềm quản lý thông tin vào trong chương trình đào tạo của họ

Tóm tắt:  Hướng dẫn này mô tả các truy vấn để so sánh dữ liệu trong một cơ sở dữ liệu IBM® DB2®. Điều này được thực hiện bằng các biểu thức CASE hoặc các truy vấn con. Hướng dẫn này là Phần 5 của loạt bài hướng dẫn SQL & XQuery cho IBM DB2.

Xem thêm bài trong loạt bài này

Ngày:  20 05 2009
Mức độ:  Nhập môn

Hoạt động:  10819 lần đọc

Sử dụng các truy vấn phụ trong mệnh đề FROM

Câu hỏi

Doanh thu sản phẩm tại San Jose trong tháng Giêng 2004 so với doanh thu sản phẩm này hàng năm trong cùng thành phố trong cùng năm là như thế nào?

Ví dụ truy vấn

SELECT sales1.product, jan_04_sales, total_04_sales
	FROM
	    (SELECT prod_name, SUM(dollars)
	    FROM aroma.product a,
	         aroma.sales b,
	         aroma.period c,
	         aroma.store d
	    WHERE   a.prodkey  = b.prodkey
	        AND a.classkey = b.classkey
	        AND c.perkey = b.perkey
	        AND d.storekey = b.storekey
	        AND c.year = 2004
	        AND c.month = 'JAN'
	        AND d.city LIKE 'San J%'
	    GROUP BY a.prod_name) AS sales1(product, jan_04_sales)
		,
	    (SELECT prod_name, SUM(dollars) AS total_04_sales
	    FROM aroma.product a,
	         aroma.sales b,
	         aroma.period c,
	         aroma.store d
	    WHERE   a.prodkey = b.prodkey
	        AND a.classkey = b.classkey
	        AND c.perkey = b.perkey
	        AND d.storekey = b.storekey
	        AND c.year = 2004
	        AND d.city LIKE 'San J%'
	    GROUP BY a.prod_name) AS sales2(product, total_04_sales)
	WHERE sales1.product = sales2.product
	ORDER BY sales1.product;


Kết quả

PRODUCTJAN_04_SALESTOTAL_04_SALES
Aroma Roma 1653.00 21697.50
Aroma Sheffield Steel Teapot 120.00 1122.00
Aroma Sounds Cassette 58.50 866.00
Aroma baseball cap 7.95 2960.15
Aroma t-shirt 470.85 4470.50
Assam Gold Blend 652.00 11375.00
Assam Grade A 352.00 5429.00
Breakfast Blend 608.25 6394.75
Cafe Au Lait 1936.50 24050.50
Colombiano 2148.00 22528.50
Darjeeling Number 1 867.50 8590.00
Darjeeling Special 1355.00 17787.50
Demitasse Ms 2163.00 35523.50
Earl Grey 540.50 6608.50
English Breakfast 393.00 5365.50
Espresso Machine Italiano 899.55 4397.80
Expresso XO 2935.50 27362.00
French Press, 2-Cup 104.65 1196.00
French Press, 4-Cup 19.95 1109.20
Gold Tips 440.00 5381.50
Irish Breakfast 703.25 7455.50
...

Một giải pháp linh hoạt hơn: Các truy vấn phụ trong mệnh đề FROM

Một truy vấn phụ là biểu thức truy vấn bất kỳ trong dấu ngoặc xuất hiện bên trong câu hỏi khác. Một truy vấn phụ đôi khi được gọi là một truy vấn bên trong. Truy vấn bên trong hoạt động bên trong truy vấn phía ngoài, hay như là truy vấn con của một truy vấn cha mẹ.

Về truy vấn

Một giá trị thường được so sánh với một tổng của một tập hợp các giá trị. Ví dụ truy vấn so sánh doanh thu sản phẩm ở San Jose trong tháng Giêng 2004 với doanh thu ở San Jose suốt cả năm 2004. Loại truy vấn này yêu cầu các phép gộp hỗn hợp; bởi vậy, không thể viết loại truy vấn đó bằng các biểu thức CASE vì biểu thức CASE phải hoạt động theo các giá trị bên trong một nhóm đơn hay một phạm vi. Thay vào đó, các truy vấn phụ trong mệnh đề FROM được dùng để thực hiện so sánh.

mũi tên Chú ý quan trọng: Bất kỳ truy vấn nào mà có thể được biểu diễn như một truy vấn phụ trong mệnh đề FROM cũng có thể được biểu diễn như một truy vấn phụ trong danh sách chọn lựa, như sẽ cho thấy ở phần sau trong hướng dẫn này.

Các lưu ý về cách dùng

Ví dụ truy vấn dựa vào tính linh hoạt của biểu thức truy vấn trong SQL tiêu chuẩn để kết nối các kết quả của hai truy vấn phụ. Để biết thêm thông tin chi tiết về các biểu thức truy vấn, xem SQL Reference Guide .

Các bảng dẫn xuất từ kết quả đánh giá của các truy vấn phụ có thể được kết nối với các tham chiếu bảng khác. Với mục đích này, một truy vấn phụ trong mệnh đề FROM phải có một tên tương quan. Ví dụ, các truy vấn phụ trong ví dụ này được đánh giá thành các bảng sau đây:

sales1(product, jan_04_sales)
	sales2(product, total_04_sales)

Phép nối các bảng này (qua cột Product) tạo ra một bảng phát sinh không tên có ba cột, là nguồn của ba mục của danh sách chọn lựa trong truy vấn chính:

product, jan_04_sales, total_04_sales

4 của 15 | Trang trước | Trang sau

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Information Management, SOA và dịch vụ Web
ArticleID=383246
TutorialTitle=Hướng dẫn SQL & XQuery cho IBM DB2, Phần 5: So sánh dữ liệu
publish-date=05202009
author1-email=jcao@ca.ibm.com
author1-email-cc=
author2-email=bcreight@ca.ibm.com
author2-email-cc=
author3-email=pmoffatt@ca.ibm.com
author3-email-cc=