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

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.

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



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ọ



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í



20 05 2009

Trước khi bạn bắt đầu

Về loạt bài này

Loạt bài hướng dẫn này dạy các chủ đề SQL từ cơ bản đến nâng cao và các chủ đề XQuery cơ bản. Nó cũng chỉ ra cách diễn đạt các câu hỏi nghiệp vụ thường gặp bằng các truy vấn cơ sở dữ liệu sử dụng các câu truy vấn SQL hay các câu truy vấn XQuery. Những người phát triển ứng dụng và những người quản trị cơ sở dữ liệu có thể sử dụng hướng dẫn này để nâng cao các kỹ năng truy vấn cơ sở dữ liệu của mình. Các thành viên tham gia sáng kiến học đường IBM có thể sử dụng loạt hướng dẫn này như một phần trong chương trình giảng dạy cơ sở dữ liệu của họ.

Tất cả các ví dụ trong bài này là dựa trên Aroma, một cơ sở dữ liệu mẫu chứa các dữ liệu doanh thu về các sản phẩm cà phê và chè đã bán trong các cửa hàng trên khắp nước Mỹ. Mỗi ví dụ gồm có ba phần:

  • Một câu hỏi kinh doanh dưới dạng ngôn ngữ thường ngày
  • Một hoặc nhiều ví dụ truy vấn , được biểu diễn bằng SQL hay Xquery
  • Một bảng các kết quả trả về từ cơ sở dữ liệu

Hướng dẫn này được thiết kế để cho phép các học viên học tập ngôn ngữ SQL và XQuery. Cũng như học bất cứ cái gì khác, việc bổ sung thêm các bài tập thực hành là rất quan trọng. Dữ liệu và các định nghĩa bảng sẽ tạo điều kiện thuận lợi cho các bài tập thực hành này.

Đối với các sinh viên sử dụng tài liệu này như một phần của khoá học, hãy nhận từ thầy hướng dẫn của mình các chỉ dẫn để kết nối tới cơ sở dữ liệu Aroma và tìm hiểu mọi sự khác biệt giữa hướng dẫn và cài đặt tại máy cục bộ của mình.

Hướng dẫn này được viết cho DB2 9 Express-C trên nền UNIX®, Linux® và Windows® (trước đây gọi là Viper).

Về hướng dẫn này

Hướng dẫn này thảo luận về các truy vấn dùng để so sánh dữ liệu trong một cơ sở dữ liệu DB2 của IBM. Nó bắt đầu bằng cách minh họa vấn đề mà người viết truy vấn phải đối phó: cách sử dụng SQL để trả về một bảng tính hay báo cáo "tổng hợp" chứ không phải một tập hợp kết quả tiêu chuẩn, sắp xếp theo thứ tự thẳng đứng rất khó đọc. Vấn đề này được giải quyết bằng các biểu thức CASE hoặc các truy vấn phụ.

Giải pháp CASE, được giới thiệu đầu tiên, là một cách đơn giản và ngắn gọn để so sánh các nhóm các giá trị tương tự nhau. Tiếp theo sẽ trình bày một vài ví dụ của mệnh đề FROM và các truy vấn phụ của danh sách chọn lựa. Các truy vấn phụ này có thêm giá trị ở chỗ có thể vừa so sánh dữ liệu từ các nhóm khác nhau và vừa gồm các tính toán đối với các giá trị được so sánh, ví dụ như là các phần trăm đóng góp trong các thời hạn đã cho.

Hướng dẫn này mô tả các truy vấn phụ được tuyên bố như là các điều kiện trong mệnh đề WHERE, có ích cho các truy vấn so sánh đơn giản. Phần cuối cùng cũng mô tả các thuộc tính ALL, EXISTS, và SOME hoặc ANY. Các thuộc tínhnày có thể được dùng để biểu diễn các điều kiện đối với kết quả của truy vấn phụ.

Kết nối tới một cơ sở dữ liệu

Bạn cần kết nối tới một cơ sở dữ liệu trước khi có thể sử dụng các câu lệnh SQL để truy vấn hay xử lý dữ liệu. Lệnh CONNECT kết hợp một kết nối cơ sở dữ liệu với một tên người sử dụng.

Thông qua người hướng dẫn tìm ra tên cơ sở dữ liệu bạn cần nối tới. Đối với loạt bài này, tên cơ sở dữ liệu là aromadb.

Để kết nối tới cơ sở dữ liệu aromadb, gõ lệnh sau đây vào trong bộ xử lý dòng lệnh DB2:

CONNECT TO aromadb USER userid USING password

Thay thế "userid" và "password" bằng số ID và mật khẩu của người sử dụng mà bạn đã nhận được từ thầy hướng dẫn. Nếu máy không hỏi userid và password thì chỉ cần gõ vào lệnh sau đây:

CONNECT TO aromadb

Thông điệp sau báo cho bạn biết rằng đã tạo kết nối thành công:

Database Connection Information
Database server      = DB2/NT 9.0.0
SQL authorization ID = USERID
Local database alias = AROMADB

Khi đã kết nối được, bạn có thể bắt đầu sử dụng cơ sở dữ liệu.


So sánh dữ liệu bằng câu hỏi SQL

Câu hỏi

So sánh doanh thu của cà phê đóng gói tại các cửa hàng ở vùng phía Tây trong năm 2004 ra sao?

Ví dụ truy vấn

SELECT store_name, prod_name, SUM(dollars) AS sales
	FROM aroma.market a,
	     aroma.store b,
	     aroma.period c,
	     aroma.product d,
	     aroma.class e,
	     aroma.sales f
	WHERE   a.mktkey = b.mktkey
	    AND b.storekey = f.storekey
	    AND c.perkey = f.perkey
	    AND d.classkey = e.classkey
	    AND d.classkey = f.classkey
	    AND d.prodkey = f.prodkey
	    AND region like 'West%'
	    AND year = 2004
	    AND class_type = 'Pkg_coffee'
	GROUP BY store_name, prod_name
	ORDER BY store_name, prod_name;

Kết quả

STORE_NAMEPROD_NAMESALES
Beaches BrewAroma Roma3483.50
Beaches BrewCafe Au Lait3129.50
Beaches BrewColombiano2298.25
Beaches BrewDemitasse Ms4529.25
Beaches BrewExpresso XO4132.75
Beaches BrewLa Antigua4219.75
Beaches BrewLotta Latte3468.00
Beaches BrewNA Lite4771.00
Beaches BrewVeracruzano4443.00
Beaches BrewXalapa Lapa4304.00
Cupertino Coffee SupplyAroma Roma4491.00
Cupertino Coffee SupplyCafe Au Lait4375.50
Cupertino Coffee SupplyColombiano2653.50
Cupertino Coffee SupplyDemitasse Ms3936.50
Cupertino Coffee SupplyExpresso XO4689.25
Cupertino Coffee SupplyLa Antigua2932.00
Cupertino Coffee SupplyLotta Latte5146.00
Cupertino Coffee SupplyNA Lite4026.00
Cupertino Coffee SupplyVeracruzano3285.00
Cupertino Coffee SupplyXalapa Lapa5784.00
Instant CoffeeAroma Roma3485.25
Instant CoffeeCafe Au Lait3599.50
Instant CoffeeColombiano3321.75
Instant CoffeeDemitasse Ms5422.25
Instant CoffeeExpresso XO2851.00
Instant CoffeeLa Antigua2937.25
Instant CoffeeLotta Latte4783.50
Instant CoffeeNA Lite3740.00
Instant CoffeeVeracruzano4712.00
Instant CoffeeXalapa Lapa3698.00
...

Một truy vấn so sánh đơn giản

Bạn có thể liệt kê doanh thu của một nhóm các sản phẩm tại các cửa hàng cụ thể bằng một lệnh SELECT đơn giản, nhưng định dạng của bảng kết quả làm cho các giá trị khó so sánh được. Ví dụ, tập hợp kết quả của phần trên cho thấy cà phê La Antigua đã bán ra tại một vài cửa hàng trong vùng phía tây, nhưng các con số này rất khó tách ra.

Loại dữ liệu này sẽ dễ so sánh hơn nhiều khi nó được định dạng như một bảng tính. Có hai cách để tạo ra một báo cáo bảng tính, hay báo cáo "tổng hợp": sử dụng các biểu thức CASE hay các truy vấn phụ. Các ví dụ tiếp sau trong hướng dẫn này minh họa cả hai phương pháp viết các truy vấn so sánh.

Về truy vấn

Ví dụ truy vấn trả về các số doanh thu năm 2004 của các sản phẩm cà phê đóng gói bán tại mỗi cửa hàng trong vùng phía tây, nhưng định dạng của dữ liệu kết quả làm cho nó trở nên khó so sánh các con số theo từng sản phẩm, theo từng cửa hàng với nhau.


Sử dụng các biểu thức CASE

Câu hỏi

So sánh doanh thu của cà phê đóng gói tại các cửa hàng ở vùng phía Tây trong năm 2004 như thế nào?

Ví dụ truy vấn

SELECT prod_name,
	    SUM(CASE WHEN store_name = 'Beaches Brew'
	    then dollars else 0 end) AS Beaches,
	    SUM(CASE WHEN store_name = 'Cupertino Coffee Supply'
	    then dollars else 0 end) AS Cupertino,
	    SUM(CASE WHEN store_name = 'Roasters, Los Gatos'
	    then dollars else 0 end) AS RoastLG,
	    SUM(CASE WHEN store_name = 'San Jose Roasting Company'
	    then dollars else 0 end) AS SJRoastCo,
	    SUM(CASE WHEN store_name = 'Java Judy''s'
	    then dollars else 0 end) AS JavaJudy,
	    SUM(CASE WHEN store_name = 'Instant Coffee'
	    then dollars else 0 end) AS Instant
	FROM aroma.market a,
	     aroma.store b,
	     aroma.period c,
	     aroma.product d,
	     aroma.class e,
	     aroma.sales f
	WHERE   a.mktkey = b.mktkey
	    AND b.storekey = f.storekey
	    AND c.perkey = f.perkey
	    AND d.classkey = e.classkey
	    AND d.classkey = f.classkey
	    AND d.prodkey = f.prodkey
	    AND region LIKE 'West%'
	    AND year = 2004
	    AND class_type = 'Pkg_coffee'
	GROUP BY prod_name
	ORDER BY prod_name;

Kết quả

PROD_NAMEBEACHESCUPERTINOROASTLGSJROASTCOJAVAJUDYINSTANT
Aroma Roma3483.504491.004602.004399.253748.253485.25
Cafe Au Lait3129.504375.504199.003620.004864.503599.50
Colombiano2298.252653.504205.003530.753509.003321.75
Demitasse Ms4529.253936.504347.755699.006395.255422.25
Expresso XO4132.754689.254234.503811.005012.252851.00
La Antigua4219.752932.003447.504323.002410.252937.25
Lotta Latte3468.005146.004469.505103.504003.004783.50
NA Lite4771.004026.003250.002736.004791.003740.00
Veracruzano4443.003285.004467.003856.004510.004712.00
Xalapa Lapa4304.005784.003906.003645.003182.003698.00

Một giải pháp để so sánh dữ liệu: các biểu thức CASE

Một cách hiệu quả và ngắn gọn để hiển thị các giá trị so sánh theo một định dạng bảng tính dễ đọc là sử dụng các biểu thức CASE trong danh sách chọn lựa. Mỗi phép tính CASE đánh giá một biểu thức đã chỉ rõ và cung cấp một giá trị khác nhau, phụ thuộc vào một điều kiện nhất định có được đáp ứng hay không.

Cú pháp CASE

Nói chung, bạn xây dựng một truy vấn so sánh CASE bằng cách chỉ rõ những ràng buộc trên toàn bộ miền mà trên đó các kết quả được sinh ra trong mệnh đề WHERE của truy vấn chính hay là truy vấn ngoài. Sau đó, bạn phân chia kết quả thành các tập con với một biểu thức CASE trong danh sách lựa chọn:

CASE WHEN search_condition THEN result1 ELSE result2
	END AS col_alias
search_conditionMột điều kiện lôgíc được đánh giá đúng hay sai.
result1Một giá trị được dùng khi search_condition là đúng.
result2Một giá trị mặc định khi search_condition là sai.

mũi tên Chú ý quan trọng: Một biểu thức CASE có thể ở một trong hai dạng: đơn giản hay có tìm kiếm. Ví dụ này sử dụng dạng có tìm kiếm. Để biết thêm chi tiết, tham khảo SQL Reference Guide (Hướng dẫn tham khảo SQL) .

Về truy vấn

Truy vấn này đặt ra cùng một câu hỏi kinh doanh giống như truy vấn trước trong hướng dẫn này. Tuy nhiên, trong trường hợp này biểu thức CASE được dùng để tạo ra sáu cột khác nhau trong tập hợp kết quả. Tập hợp kết quả này có chứa tổng các giá trị đôla, một cột cho mỗi cửa hàng.


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

Thực hiện các tính toán và các so sánh

Câu hỏi

Doanh thu sản phẩm trong Tháng Giêng 2004 tại San Jose chiếm bao nhiêu phần trăm của doanh thu sản phẩm hàng năm trong cùng thành phố? Mười sản phẩm bán chạy nhất theo tỷ lệ phần trăm đó là gì?

Ví dụ truy vấn

SELECT sales1.product, jan_04_sales, total_04_sales,
	    DEC((100.00 * jan_04_sales/total_04_sales),7,2) AS pct_of_04
	FROM
	    (SELECT a1.prod_name, SUM(dollars)
	    FROM aroma.product a1,
	         aroma.sales b1,
	         aroma.period c1,
	         aroma.store d1
	    WHERE   a1.prodkey = b1.prodkey
	        AND a1.classkey = b1.classkey
	        AND c1.perkey = b1.perkey
	        AND d1.storekey = b1.storekey
	        AND c1.year = 2004
	        AND c1.month = 'JAN'
	        AND d1.city LIKE 'San J%'
	    GROUP BY a1.prod_name) AS sales1(product, jan_04_sales)
	,
	    (SELECT a2.prod_name, SUM(dollars)
	    FROM aroma.product a2,
	         aroma.sales b2,
	         aroma.period c2,
	         aroma.store d2
	    WHERE   a2.prodkey = b2.prodkey
	        AND a2.classkey = b2.classkey
	        AND c2.perkey = b2.perkey
	        AND d2.storekey = b2.storekey
	        AND c2.year = 2004
	        AND d2.city LIKE 'San J%'
	    GROUP BY a2.prod_name) AS sales2(product, total_04_sales)
	WHERE sales1.product = sales2.product
	ORDER BY pct_of_04 DESC
	FETCH FIRST 10 ROWS ONLY;

Kết quả

PRODUCTJAN_04_SALESTOTAL_04_SALESPCT_OF_04
Espresso Machine Italiano899.554397.8020.45
La Antigua2643.2522244.5011.88
Expresso XO2935.5027362.0010.72
Aroma Sheffield Steel Teapot120.001122.0010.69
Aroma t-shirt470.854470.5010.53
Lotta Latte3195.0031200.0010.24
Darjeeling Number 1867.508590.0010.09
Colombiano2148.0022528.509.53
Breakfast Blend608.256394.759.51
Irish Breakfast703.257455.509.43

Các tính toán với các truy vấn phụ của mệnh đề FROM

Tập hợp kết quả của một truy vấn so sánh có thể được sử dụng như dữ liệu nguồn cho các tính toán khác nhau. Ví dụ, một tổng doanh thu hàng tháng của một sản phẩm có thể được biểu diễn như phần đóng góp trong doanh thu hàng năm với cách tính toán tỷ lệ phần trăm đơn giản:

100.00 * monthly_sales / annual_sales

Các truy vấn phụ trong mệnh đề FROM có thể dùng để tính toán các tỷ lệ phần trăm hay phần đóng góp theo thị trường, theo sản phẩm và theo các khoảng thời gian.

Về truy vấn

Dựa vào ví dụ trước, truy vấn này tính toán các số doanh thu hàng tháng cho từng sản phẩm ở San Jose như phần đóng góp hoặc tỷ lệ phần trăm của doanh thu hàng năm của sản phẩm đó trong cùng thành phố. Tập hợp kết quả có thể tạo ra một danh sách xếp hạng dựa vào quyết định sắp xếp của bạn.

Các con số trong cột Pct_of_04 không tổng cộng thành 100 vì các con số này tương ứng với tỷ lệ phần trăm của một tháng trong một năm cho doanh thu của mỗi sản phẩm riêng lẻ, không phải tỷ lệ phần trăm của doanh thu hàng tháng trong toàn bộ doanh thu hàng năm.

Biểu đồ này cho thấy doanh thu trong tháng Giêng chiếm một vài phần trăm của doanh thu suốt cả năm. Ví dụ, các ấm chè được bán trong tháng Giêng chiếm10.69% của tổng doanh thu ấm chè năm.


Sử dụng các truy vấn phụ trong danh sách SELECT

Câu hỏi

Trong những ngày nào của tháng Mười Hai năm 2005 có các số doanh thu Lotta Latte tại công ty Roasting San Jose thấp hơn số doanh thu trung bình hàng ngày của cùng sản phẩm tại cùng cửa hàng trong tháng Mười Hai 2004? Hiển thị trung bình hằng ngày cho năm 2004 theo một cột riêng.

Ví dụ truy vấn

SELECT prod_name, store_name, date, dollars AS sales_05,
	    (SELECT DEC(AVG(dollars),7,2)
	    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 year = 2004
	        AND month = 'DEC'
	        AND store_name = 'San Jose Roasting Company'
	        AND prod_name LIKE 'Lotta%') AS avg_04
	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 prod_name LIKE 'Lotta%'
	    AND store_name = 'San Jose Roasting Company'
	    AND year = 2005
	    AND month = 'DEC'
	    AND dollars <
	        (SELECT AVG(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 year = 2004
	            AND month = 'DEC'
	            AND store_name = 'San Jose  Roasting Company'
	            AND prod_name LIKE 'Lotta%');

Kết quả

PROD_NAMESTORE_NAMEDATESALES_05AVG_04
Lotta LatteSan Jose Roasting CompanyDec 8, 2005153.00154.72
Lotta LatteSan Jose Roasting CompanyDec 27, 2005144.50154.72

So sánh bằng các truy vấn phụ của danh sách chọn lựa

Một truy vấn phụ có thể xuất hiện trong danh sách chọn lựa của một truy vấn chính chỉ khi nó trả về một hàng hay không trả về hàng nào. Loại truy vấn phụ này, gọi là truy vấn phụ vô hướng, có ích cho các so sánh kiểu bảng tính trong đó một loạt các giá trị được truy vấn chính trả về so sánh với một giá trị do truy vấn phụ trả về.

Về truy vấn

Truy vấn phụ của ví dụ này trả về các số doanh thu Lotta Latte hằng ngày tại công ty Roasting San Jose năm 2005 trong trường hợp số doanh thu đó thấp hơn số doanh thu trung bình hàng ngày tại cùng cửa hàng trong thời gian 2004. Cột Avg_04 có chứa chỉ một giá trị đơn lặp lại là giá trị trung bình năm 2004; giá trị giống nhau này sẽ xuất hiện trong cột đó bất kể số lượng các hàng trong tập hợp kết quả.

Cùng một truy vấn phụ giống như vậy xuất hiện hai lần trong truy vấn chính:

  • Một lần như định nghĩa cột trong danh sách lựa chọn
  • Một lần như một toán hạng của toán tử nhỏ hơn (<) trong một điều kiện của mệnh đề WHERE

Truy vấn này được xử lý theo thứ tự sau:

  1. Truy vấn phụ thứ hai, định nghĩa điều kiện tìm kiếm trong mệnh đề WHERE của truy vấn chính, được thực hiện.
  2. Giá trị dẫn xuất từ truy vấn phụ thứ hai được chèn vào vào trong mệnh đề WHERE của truy vấn chính.
  3. Truy vấn phụ của danh sách lựa chọn được thực hiện.
  4. Truy vấn chính được thực hiện.

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

Hàm vô hướng DEC được sử dụng trên cột Avg_04 của tập kết quả để cắt bớt các số doanh thu trung bình:

DEC(AVG(dollars),7,2)

Sử dụng các truy vấn phụ có tương quan

Câu hỏi

Doanh thu của từng sản phẩm riêng lẻ ở San Jose trong tháng Giêng 2004 so với doanh thu hàng năm trong cùng thành phố trong cùng năm là bao nhiêu?

Ví dụ truy vấn

SELECT p1.prod_name, SUM(s1.dollars) AS jan_04_sales,
	    (SELECT SUM(s2.dollars)
	    FROM aroma.product p2,
	         aroma.sales s2,
	         aroma.period d2,
	         aroma.store r2
	    WHERE   p2.prodkey = s2.prodkey
	        AND p2.classkey = s2.classkey
	        AND d2.perkey = s2.perkey
	        AND r2.storekey = s2.storekey
	        AND p1.prod_name = p2.prod_name
	        AND d1.year = d2.year
	        AND r1.city = r2.city) AS total_04_sales
	FROM	aroma.store r1,
	     aroma.sales s1,
	     aroma.product p1,
	     aroma.period d1
	WHERE   p1.prodkey = s1.prodkey
	    AND p1.classkey = s1.classkey
	    AND d1.perkey = s1.perkey
	    AND r1.storekey = s1.storekey
	    AND year = 2004
	    AND month = 'JAN'
	    AND city LIKE 'San J%'
	GROUP BY p1.prod_name, d1.year, r1.city
	ORDER BY p1.prod_name;

Kết quả

PROD_NAMEJAN_04_SALESTOTAL_04_SALES
Aroma Roma1653.0021697.50
Aroma Sheffield Steel Teapot120.001122.00
Aroma Sounds Cassette58.50866.00
Aroma baseball cap7.952960.15
Aroma t-shirt470.854470.50
Assam Gold Blend652.0011375.00
Assam Grade A352.005429.00
Breakfast Blend608.256394.75
Cafe Au Lait1936.5024050.50
Colombiano2148.0022528.50
Darjeeling Number 1867.508590.00
Darjeeling Special1355.0017787.50
Demitasse Ms2163.0035523.50
Earl Grey540.506608.50
English Breakfast393.005365.50
Espresso Machine Italiano899.554397.80
Expresso XO2935.5027362.00
French Press, 2-Cup104.651196.00
French Press, 4-Cup19.951109.20
Gold Tips440.005381.50
Irish Breakfast703.257455.50
La Antigua2643.2522244.50
Lotta Latte3195.0031200.00
NA Lite1319.0027457.00
...

Các truy vấn phụ có tương quan trong danh sách lựa chọn

Tuy các truy vấn phụ của danh sách lựa chọn phải trả về một giá trị đơn hay không có giá trị nào, thì các truy vấn phụ đó vẫn có thể được thực hiện nhiều hơn một lần do tham khảo đến các kết quả được truy vấn chính trả về. Theo cách này các truy vấn phụ có tương quan như vậy trong danh sách lựa chọn có thể cho cùng một kết quả như các truy vấn phụ trong mệnh đề FROM.

Một truy vấn phụ có tương quan có quan hệ chặt chẽ với truy vấn chính thông qua tham khảo chéo tới các giá trị cụ thể trong các hàng được truy vấn chính lấy ra. Ví dụ, một truy vấn phụ tương quan có thể tham chiếu các giá trị trong cột Month của truy vấn chính; bởi vậy, truy vấn phụ trả về một giá trị mới mỗi khi giá trị của cột Month thay đổi. Các tên tương quan của bảng được gán trong mệnh đề FROM biểu diễn các tham khảo chéo này.

Về truy vấn

Ví dụ truy vấn đưa ra câu hỏi kinh doanh giống như truy vấn trước đó, nhưng lại đặt truy vấn phụ trong danh sách lựa chọn thay vì trong mệnh đề FROM. Truy vấn so sánh doanh thu của các sản phẩm ở San Jose trong tháng giêng 2004 với doanh thu hàng năm của các sản phẩm ở San Jose trong cùng năm.

Để làm cho truy vấn phụ có khả năng trả về một loạt các giá trị thay cho một giá trị cố định ba tham khảo chéo gắn truy vấn phụ với truy vấn chính:

		p1.prod_name = p2.prod_name
		d1.year = d2.year
		r1.city = r2.city

Các tên tương quan p2, d2, và r2, được định nghĩa trong mệnh đề FROM của truy vấn phụ, loại bỏ tình trạng không rõ ràng. Mỗi điều kiện tương quan tham chiếu một sản phẩm, năm và thành phố cụ thể trong hàng hiện đang được câu hỏi chính xử lý. Các tham khảo chéo này đôi khi được gọi là các tham khảo ngoài.

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

Khi một hàm gộp xuất hiện trong danh sách lựa chọn của truy vấn chính, cần phải có một mệnh đề GROUP BY. Các tên cột được tham chiếu trong một điều kiện tương quan của một truy vấn phụ phải xuất hiện trong mệnh đề GROUP BY của truy vấn chính; vì vậy, các cột sau đây phải được liệt kê trong mệnh đề GROUP BY cũng như cột Prod_Name:

		d1.year, r1.city

Sử dụng các tham khảo chéo

Câu hỏi

Doanh thu hàng tháng của Lotta Latte ở San Jose trong ba tháng đầu tiên của 2005 và 2004 là bao nhiêu?

Ví dụ truy vấn

SELECT q.prod_name, e.month, SUM(dollars) AS sales_05,
	    (SELECT SUM(dollars)
	    FROM aroma.store t,
	         aroma.sales s,
	         aroma.product p,
	         aroma.period d
	    WHERE   t.storekey = s.storekey
	        AND p.classkey = s.classkey
	        AND p.prodkey = s.prodkey
	        AND d.perkey = s.perkey
	        AND d.month = e.month
	        AND d.year = e.year-1
	        AND p.prod_name = q.prod_name
	        AND t.city = u.city) AS sales_04
	FROM aroma.store u,
	     aroma.product q,
	     aroma.period e,
	     aroma.sales l
	WHERE   u.storekey = l.storekey
	    AND q.classkey = l.classkey
	    AND q.prodkey = l.prodkey
	    AND e.perkey = l.perkey
	    AND qtr = 'Q1_05'
	    AND prod_name LIKE 'Lotta Latte%'
	    AND city like 'San J%'
	GROUP BY q.prod_name, e.month, e.year, u.city;

Kết quả

PROD_NAMEMONTHSALES_05SALES_04
Lotta LatteFEB3213.504239.50
Lotta LatteJAN1611.003195.00
Lotta LatteMAR2510.502980.50

Các tham khảo chéo với các biểu thức

Các tham khảo chéo trong các truy vấn phụ không chỉ hạn chế tới các tên cột đầy đủ; chúng có thể cũng là các biểu thức. Ví dụ, các biểu thức sau đây là các tham khảo chéo hợp lệ:

		period.year-1	(previous year)
		period.quarter-1  (previous quarter)

Loại tham khảo chéo tổng quát hóa này làm đơn giản hóa việc thiết kế các công cụ ứng dụng phía khách.

Về truy vấn

Truy vấn này trả về doanh thu Lotta Latte hàng tháng ở San Jose trong ba tháng đầu tiên của cả năm 2005 lẫn 2004. Giải pháp tương quan là kết quả mong đợi có chứa dữ liệu cùng các tháng nhưng khác năm.

Mệnh đề FROM của truy vấn chính gán các tên tương quan cho tất cả các bảng có liên kết với nhau:

			FROM aroma.store u,
		     aroma.product q,
		     aroma.period e,
		     aroma.sales l

Truy vấn phụ sau đó gắn việc thực hiện của nó với việc thực hiện truy vấn chính dựa vào các điều kiện sau trong mệnh đề WHERE:

		d.month = e.month
		d.year = e.year-1
		p.prod_name = q.prod_name
		t.city = u.city

Do truy vấn chính lấy ra các hàng nên các giá trị của mỗi cột trong truy vấn cha mẹ có thể thay đổi, và các điều kiện tương quan truyền sự thay đổi này tới truy vấn phụ. Mối tham khảo chéo tới năm trước có dạng year-1 làm tổng quát hóa truy vấn phụ bằng cách loại bỏ một giá trị không đổi (2004).

Muốn thay đổi truy vấn để báo cáo theo các thời hạn năm khác, chỉ cần thay đổi ràng buộc về năm trong truy vấn chính.

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

Mỗi khi có thể, hãy tổng quát hóa các truy vấn phụ có tương quan và giảm thiểu sự tương tác của người sử dụng bằng cách dùng các tham khảo chéo dạng biểu thức.


Tính toán các tỷ lệ phần trăm của quý và năm

Câu hỏi

Các tổng số doanh thu hàng tháng trong quý đầu tiên của năm 2004 của các sản phẩm đã bán theo các túi một bảng ở San Jose là bao nhiêu? Tỷ lệ phần trăm của doanh thu mỗi tháng so với cả quý và so với cả năm là bao nhiêu?

Ví dụ truy vấn

			SELECT pj.prod_name, dj.month,
		    SUM(dollars) AS mon_sales_04,
		    DEC(100 * DEC(SUM(dollars))/
		        (SELECT SUM(si.dollars)
		        FROM aroma.store ri,
		             aroma.sales si,
		             aroma.product pi,
		             aroma.period di
		        WHERE   si.storekey = ri.storekey
		            AND si.classkey = pi.classkey
		            AND si.prodkey = pi.prodkey
		            AND si.perkey = di.perkey
		            AND di.qtr = dj.qtr
		            AND di.year = dj.year
		            AND pi.prod_name = pj.prod_name
		            AND pi.pkg_type = pj.pkg_type
		            AND ri.city = rj.city), 7, 2) AS pct_qtr1,
		    DEC(100 * DEC(SUM(dollars))/
		        (SELECT SUM(si.dollars)
		        FROM aroma.store ri,
		             aroma.sales si,
		             aroma.product pi,
		             aroma.period di
		        WHERE   si.storekey = ri.storekey
		            AND si.classkey = pi.classkey
		            AND si.prodkey = pi.prodkey
		            AND si.perkey = di.perkey
		            AND di.year = dj.year
		            AND pi.prod_name = pj.prod_name
		            AND pi.pkg_type = pj.pkg_type
		            AND ri.city = rj.city), 7, 2) AS pct_yr
		FROM aroma.store rj,
		     aroma.sales sj,
		     aroma.product pj,
		     aroma.period dj
		WHERE   sj.storekey = rj.storekey
		    AND sj.classkey = pj.classkey
		    AND sj.prodkey = pj.prodkey
		    AND sj.perkey = dj.perkey
		    AND rj.city = 'San Jose'
		    AND dj.year = 2004
		    AND dj.qtr = 'Q1_04'
		    AND pkg_type = 'One-pound bag'
		GROUP BY pj.prod_name, dj.month, dj.qtr, dj.year, pj.pkg_type, rj.city
		ORDER BY pj.prod_name, pct_qtr1 desc;

Kết quả

PROD_NAMEMONTHMON_SALES_04PCT_QTR1PCT_YR
Aroma RomaFEB688.7539.878.72
Aroma RomaJAN594.5034.427.53
Aroma RomaMAR442.2525.615.60
Cafe Au LaitMAR742.0040.6110.27
Cafe Au LaitJAN600.5032.848.31
Cafe Au LaitFEB484.5026.496.70
...

Tính toán với các truy vấn phụ của danh sách lựa chọn

Các tỷ lệ phần trăm hàng tháng so với cả quý, cả năm hay các kỳ hạn khác có thể được tính toán với một truy vấn phụ trong danh sách lựa chọn. Truy vấn chính lấy ra các số doanh thu hàng tháng và hai truy vấn phụ lấy ra các con số doanh thu hàng quý và hàng năm. Các tỷ lệ phần trăm hàng tháng chỉ cần các tính toán đơn giản: các tỷ số của doanh thu hàng tháng so với quý và doanh thu hàng tháng so với năm.

Về truy vấn

Ví dụ truy vấn này tính toán các tỷ lệ phần trăm doanh thu hàng tháng so với quý và doanh thu hàng tháng so với năm cho các sản phẩm cà phê đã chọn được bán ở San Jose trong quý 1 năm 2004. Sau khi tính toán các tỷ lệ phần trăm, truy vấn này sắp xếp bảng kết quả theo sản phẩm và tỷ lệ phần trăm hàng quý theo thứ tự giảm dần.


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

Câu hỏi

Trong những ngày nào trong tháng Sáu năm 2005 các số doanh thu Lotta Latte tại các cửa hàng ở hạt Chicago thấp hơn số doanh thu trung bình hàng ngày của cùng sản phẩm trong hạt này trong tháng Sáu 2004?

Ví dụ truy vấn

		SELECT prod_name, district, date, dollars AS sales_05
		FROM aroma.market a,
		     aroma.store b,
		     aroma.sales c,
		     aroma.product d,
		     aroma.period e
		WHERE   a.mktkey = b.mktkey
		    AND b.storekey = c.storekey
		    AND d.classkey = c.classkey
		    AND d.prodkey = c.prodkey
		    AND e.perkey = c.perkey
		    AND prod_name like 'Lotta%'
		    AND district like 'Chic%'
		    AND year = 2005
		    AND month = 'JUN'
		    AND dollars <
		        (SELECT AVG(dollars)
		        FROM aroma.market a,
		             aroma.store b,
		             aroma.sales c,
		             aroma.product d,
		             aroma.period e
		        WHERE   a.mktkey = b.mktkey
		            AND b.storekey = c.storekey
		            AND d.classkey = c.classkey
		            AND d.prodkey = c.prodkey
		            AND e.perkey = c.perkey
		            AND prod_name like 'Lotta%'
		            AND district like 'Chic%'
		            AND year = 2004
		            AND month = 'JUN')
		ORDER BY date;

Kết quả

PROD_NAMEDISTRICTDATESALES_05
Lotta LatteChicagoJun 7, 200576.50
Lotta LatteChicagoJun 10, 200559.50
Lotta LatteChicagoJun 16, 200542.50
Lotta LatteChicagoJun 17, 200576.50
Lotta LatteChicagoJun 29, 2005110.50

Về truy vấn

Truy vấn này trả về các số doanh thu Lotta Latte tại các cửa hàng ở hạt Chicago trong năm 2005 cho những ngày có doanh thu thấp hơn số doanh thu trung bình hàng ngày của Lotta Latte trong cùng thành phố trong năm 2004.

Truy vấn phụ trong ví dụ này là vô hướng – nó tạo ra một giá trị. Sau khi truy vấn phụ đã tính toán số đôla trung bình cho mỗi ngày ở Chicago trong năm 2004, giá trị trung bình này được sử dụng như một ràng buộc trên tất cả các hàng được truy vấn chính trả về. Chỉ các số nào trong năm 2005 thấp hơn so với trung bình năm 2004 mới được hiển thị trong tập kết quả; số trung bình tự nó không thể được hiển thị trừ khi truy vấn phụ được di chuyển vào trong danh sách lựa chọn hay mệnh đề FROM.

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

Thứ tự lôgíc của việc xử lý truy vấn bắt buộc rằng những ràng buộc của mệnh đề WHERE được máy chủ áp dụng ngay lập tức sau khi các bảng trong mệnh đề FROM đã được nối và trước bất kỳ sự tính toán nào với các hàm tập hợp như AVG và SUM, vân vân. Vì thế, bạn không thể sử dụng một trong số các hàm đó trong một điều kiện tìm kiếm đơn giản trong mệnh đề WHERE.


Sử dụng các thuộc tính so sánh

Câu hỏi

Sản phẩm nào đã ghi nhận có tổng doanh thu hàng ngày cao nhất ở Hartford, Connecticut, trong tháng Giêng 2006?

Ví dụ truy vấn

		SELECT prod_name, date, dollars
		FROM aroma.store a,
		     aroma.sales b,
		     aroma.product c,
		     aroma.period d
		WHERE   a.storekey = b.storekey
		    AND c.prodkey = b.prodkey
		    AND c.classkey = b.classkey
		    AND d.perkey = b.perkey
		    AND year = 2006
		    AND city = 'Hartford'
		    AND month = 'JAN'
		    AND dollars >= ALL
		        (SELECT 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 year = 2006
		            AND city = 'Hartford'
		            AND month = 'JAN');

Kết quả

PROD_NAMEDATEDOLLARS
NA Lite2006-01-23414.00

Về truy vấn

Ví dụ truy vấn trả về tên sản phẩm được ghi nhận có tổng doanh thu hàng ngày cao nhất tại Hartford, Connecticut, trong tháng Giêng 2006 và ngày tháng cụ thể khi tổng số đó được ghi nhận. Truy vấn có thể được viết lại để trả về tổng số thấp nhất khi thay toán tử lớn hoặc bằng (>=) bằng toán tử nhỏ hơn hoặc bằng (<=).

Thuộc tính ANY/SOME

Bạn cũng có thể đánh giá từng kết quả trả về trong lệnh chọn lựa so với một hoặc nhiều giá trị được một truy vấn phụ lấy ra. Nếu có bất kỳ đánh giá nào là đúng, tập kết quả sẽ được trả về. Các từ khóa ANY và SOME có ý nghĩa giống nhau trong kiểu truy vấn này.

Câu hỏi

Liệt kê các tên của tất cả các cửa hàng nằm trong các thành phố có đặt trụ sở chính.

Truy vấn mẫu (ANY hay SOME)

		SELECT store_name
		FROM aroma.store
		WHERE city = ANY
		    (SELECT hq_city
		    FROM aroma.market)
		ORDER BY state, city, store_name;

Kết quả

STORE_NAME
Java Judy's
Beaches Brew
Instant Coffee
...
East Coast Roast
Texas Teahouse
Coffee Brewers

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

Trước tiên hệ thống thực hiện lệnh SELECT bên trong và lưu trữ danh sách của các giá trị HQ_CITY trong một bảng tạm thời. Sau đó nó đánh giá mỗi hàng từ danh sách SELECT bên ngoài đối với bảng này. Nếu giá trị CITY bằng với một hoặc nhiều hàng của kết quả truy vấn bên trong, nó được trả về trong tập kết quả.

Các thuộc tính so sánh trong các truy vấn phụ

Các thuộc tính ALL, ANY, SOME, và EXISTS rất có ích để biểu diễn các điều kiện trên các nhóm các giá trị được một truy vấn phụ lấy ra. Một thuộc tính so sánh tuyên bố một quan hệ lôgíc giữa hai giá trị: đối với một hàng đã cho, kết quả so sánh là đúng, sai hay không biết. (Các thuộc tính ANY và SOME là đồng nghĩa.)

THUỘC TÍNHĐÁNH GIÁ ĐÚNG KHIKHI KHÔNG CÓ GIÁ TRỊ NÀO ĐƯỢC TRẢ VỀ
ALLKết quả so sánh là đúng cho tất cả các giá trị được truy vấn phụ trả về.Đánh giá là đúng.
ANY, SOMEKết quả so sánh là đúng cho ít nhất một trong số các giá trị được truy vấn phụ gửi về.Đánh giá là sai.
EXISTSTruy vấn phụ tạo ra ít nhất một hàng.Đánh giá là sai.

Để biết thêm chi tiết về các thuộc tính này, xem SQL Reference Guide.


Tóm tắt

Hướng dẫn này mô tả cách viết các truy vấn để so sánh dữ liệu và hiển thị các kết quả theo một định dạng dễ đọc. Nhiều cách tiếp cận khác nhau được minh họa:

  • Các biểu thức CASE
  • Các truy vấn phụ của mệnh đề FROM
  • Các truy vấn phụ của danh sách lựa chọn, bao gồm các truy vấn phụ có tương quan
  • Các truy vấn phụ của mệnh đề WHERE

Các truy vấn so sánh

Hướng dẫn này kết thúc bằng việc giới thiệu về các thuộc tính so sánh ALL, ANY, SOME, và EXISTS có thể được sử dụng thay cho các phép so sánh toán học như là các điều kiện trên kết quả truy vấn phụ.

Một số ví dụ phức tạp hơn đã cho thấy cách bao gồm các tính toán vào trong các truy vấn so sánh, như các tỷ lệ phần trăm để biểu diễn phần đóng góp của quý hay phần đóng góp của năm.

mũi tên Chú ý quan trọng: Nói chung, việc thực hiện truy vấn nhanh chóng hơn khi các truy vấn so sánh sử dụng các biểu thức CASE hơn là các truy vấn phụ. Tuy nhiên, nếu các truy vấn phụ là cần thiết, phương pháp được ưa thích là sử dụng mệnh đề FROM hơn là danh sách lựa chọn. Vì mỗi cơ sở dữ liệu và mỗi truy vấn là khác nhau, bạn nên thử nhiều phương pháp khác nhau trên cơ sở dữ liệu đang dùng.


Tải về

Mô tảTênKích thước
Cơ sở dữ liệu AromaAroma_Data.zip1MB

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

  • Hiện nay bạn có thể sử dụng DB2 miễn phí. Tải xuống DB2 Express-C, một phiên bản DB2 Express miễn phí dành cho cộng đồng nhưng vẫn có đủ các đặc tính dữ liệu cốt lõi giống như phiên bản DB2 Express và cung cấp một cơ sở vững chắc để xây dựng và triển khai các ứng dụng.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

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.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

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

Chọn tên hiển thị của bạn



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.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

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.

 


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


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