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

Truy vấn (query) nâng cao

16 1.7K 5
Tài liệu đã được kiểm tra trùng lặp

Đ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

Nội dung

Truy vấn (query) nâng cao

Bài Truy vấn (query) nâng cao Mục tiêu học: Kết thúc bạn –       Hiểu thực thi subquery Nắm cách sử dụng mệnh đề EXISTS Nắm cách thực truy vấn với mênh đề khác Sử dụng mệnh đề DISTINCT để lọc bớt kêt truy vấn Nắm cách sử dụng mệnh đề COMPUTE BY Chuyển liệu tables sử dụng mệnh đề SELECT INTO Giới thiệu Trong trước, học khái niệm thiết kế CSDL Chúng ta nói E-R diagrams and chuẩn hóa CSDL Chúng ta học vài dạng chuẩn cách áp dụng tập cụ thể Trong này, làm quen với khái niệm subqueries cách viết câu lệnh T-SQL để thực thi subqueries Chúng ta khảo sát cách sử dụng mệnh đề EXISTS, để thực thi queries tập kết cách lọc kết query để trả dịng khơng trùng cách sử dụng mệnh đề DISTINCT Chúng ta thảo luận cách sử dụng mệnh đề COMPUTE BY SELECT INTO với câu lệnh T-SQL Chúng ta học câu lệnh SELECT với mệnh đề trước, nhắc lại số khái niệm, giúp củng cố lại kiến thức trước 3.1 Thực truy vấn nhiều bảng Đôi khi, thấy cần thiết phải lấy kết hợp liệu từ nhiều bảng Trong đây, nói cách kết hợp thơng tin từ nhiều bảng Có ba cách để kết hợp liệu từ nhiều bảng:  Unions – Kết hợp dòng nhiều bảng  Subqueries – query gói bên query khác  Joins – Kết hợp cột từ nhiều bảng Có nhiều mệnh đề sử dụng với SELECT để trả lại kết khác Từ khóa DISTINCT khử dịng trùng kết câu lệnh SELECT Nếu DISTINCT khơng ra, tất dịng thỏa mãn câu lệng SELECT trả về, bao gồm dịng trùng Khi subquery có từ EXISTS, có chức giống kiểm tra tồn Từ khóa EXISTS sử dụng để kiểm tra tồn dòng trả subquery Câu lệng subquery trả lại liệu thực mà thay vào trả giá trị True False Mệng đề COMPUTE and COMPUTE BY sử dụng để sinh kết tổng hợp cho tập hợp dòng COMPUTE trả dịng bình thường thêm dịng chữa thơng tin tổng hợp COMPUTE BY sử dụng để sinh giá trị tổng hợp dựa nhóm Truy vấn cao 33 Trong phần học sub-queries unions 3.2 Sub-Query Tính subquery SQL cho phép sử dụng kết query phần query khác Một subquery viết cách đặt query vào vị trí xác định bên query khác C J Date khả sử dụng query bên query đương nhiên từ “structured” bên câu “Structured Query Language” Tính subquery đóng vai trị quan trọng SQL ba điều sau: Một câu lệng SQL sử dụng subquery cách tự nhiên để diễn tả query, gần tương đương với cấu trúc truy vấn tiêng anh Subqueries giúp dễ viết câu lệnh SELECT hơn, cho phép “tách query thành nhiều phần” sau “kết hợp lại với nhau” Có nhiều queries khơng thể diễn đạt đươc SQL không sử dụng subquery Khi câu lệng SELECT sử dụng để trả ghi sử dụng câu lệng SELECT khác, Câu lệnh bao gọi parent query câu lệnh gọi subquery Nói cách khác, Subquery có câu lệnh SELECT lồng bên câu lệnh SELECT khác Câu lệnh SELECT bên trả cột sử dụng câu lệnh SELECT bên Câu lệnh SELECT bên thực trước Đây cách để thực bước thao tác mà trường hơp ngược lại khó thực với hai query riêng biệt Có nhiều câu lệng SQL chứa subquery giống việc tạo joins Ví dụ thi hành sub-queries giới thiệu cách sử dụng nhiều mệnh đề với sub-queries Ví dụ tìm tiêu dề mà tác giả kiếm thù lao tối thiểu 100 Hình 3.1: Ví dụ Subquery đơn giản 34 Thiết kế CSDL thực thi với SQL Server 3.2.1 Những từ khóa sử dụng Sub-query Khi sử dụng subqueries cần ghi nhớ điểm sau:  Chúng ta sử dụng subquery để thay cho giá trị mệnh đề SELECT,  Khi sử dụng toán tử so sánh với sub-query, có số giới hạn với việc trả lại số lượng dòng cột sub-query Các giới hạn tổng kết bảng 3.1 Một dòng Nhiều dòng Một cột Nhiều cột Sử dụng =, >, < toán Sử dụng EXISTS tử so sánh khác Sử dụng ANY, ALL, IN Sử dụng EXISTS EXISTS Bảng 3.1 : Các từ khóa sử dụng Sub-query Bằng cách sử dụng mệnh đề EXISTS sub-query điều khiển kiểm tra trả dòng sub-query Biểu thức EXISTS (subquery) ‘true’ subquery trả dịng, ‘false’ nố khơng trả dịng Ví dụ, để hiển thị thơng tin nhân viên mà có thông tin nhân viên khác họ, viết lệnh hình 3.2: Hình 3.2: Sử dụng mệnh đề EXISTS 3.2.2 Các kiểu Sub-queries Có hai kiểu subquery: Nested queries Correlated queries Chúng ta có subquery mà gọi subquery khác Khi gọi nested subquery Ví dụ, viết nested subquery để tìm giá chi tiết đơn đặt hàng bao gồm sản phẩm cung cấp tử thành phố London Câu lệnh kết hiển thị hình 3.3 Truy vấn cao 35 Hình 3.3: Nested subqueries Trong query có chứa subquery, subquery thực lần để trả lại kết sau parent query sử dụng kết để thực Bởi hầu hết các subquery khơng tham chiếu tới parent query, giá trị số Dẫu sao, subquery mà tham chiếu đến parent query, subquery cần thực lại tương ứng với lần lặp parent query, biểu thức điều kiện subquery phụ thuộc vào giá trị bàn ghi parent query Khi subquery lấy tham số từ parent query, đựoc hiểu Correlated subquery Giả sử muốn tìm tên thành phố mà sản phẩm cung cấp trực tiếp từ nhà cung cấp Câu lệnh liên quan đến hai bảng: Supplier and Product Câu lệnh kêt hiển thị hình 3.4 Hình 3.4: Correlated subquery 36 Thiết kế CSDL thực thi với SQL Server 3.3 UNION Unions sử dụng để kết hợp dòng từ nhiều bảng Toán tử UNION kết hợp kết hai nhiều câu lệnh SELECT lại thành tập kết Mỗi câu lệnh SELECT phải có cấu trúc: kiểu liệu cột tương thích số lượng cột Tên cột khác câu lệnh SELECT Cú pháp: Select statement UNION [ALL] Select statement Nếu gộp mệnh đề ALL, tất dòng đưa vào tập kết kể dịng trùng Ví dụ, ứng dụng ngân hàng ta xem xét hai bảng: Saving Account bảng chứa thông tin khách hàng có tài khoản tiết kiệm Current Account bảng chứa thơng tin khách hàng có tài khoản thời Giả sử muốn xem Account_No Name tất khách hàng nhà băng Để thực hiện, cần phải lấy tất ghi hai bảng Giả sử tài khoản tiết kiệm có Account No bắt đầu ‘S’ tài khoản thời có Account No bắt đầu ‘C’ Cả hai bảng liệu liệt kê bảng 3.2 Tài khoản tiết kiệm Table Account No S001 S002 S003 S004 Tài khoản thời Table Name James Rita Mary Valentina Account No C001 C002 Name Michael Robin Bảng 3.2 Câu lệng sau kết hợp thông tin hai bảng SELECT Account_No, Name FROM Saving_Accounts UNION SELECT Account_No, Name FROM Current_Accounts Câu lệnh hiển thị kết sau: Account_No -S001 S002 S003 S004 C001 C002 Truy vấn cao Name -James Rita Mary Valentina Michal Robin 37 Những tên cột tập kết giống với tên cột câu lệnh SELECT tên cột câu lệnh SELECT khác bị bỏ qua Mặc định tốn tử UNION loại bỏ dịng trùng tập kết Nhưng sử dụng kết hợp thêm mệnh đề ALL tất dòng trả tập kết 3.4 Những mệnh đề câu lệnh SELECT Câu lệnh SELECT sử dụng với nhiều mệnh đề Chúng diễn tả 3.4.1 Chọn tất cột Dấu hoa thị (*) sử dụng để lầy tất cột bảng Cú pháp: SELECT * FROM Ví dụ, câu lệng SQL sau trả tất dòng cột từ bảng Authors CSDL Pubs Hình 3.5: Chọn tất cột với SELECT 3.4.2 Chọn số cột định Để chọn vài cột từ bảng, liệt kê tên chúng sau từ khóa SELECT Cú pháp: SELECT , … From Ví dụ, để hiển thị tên chi tiết tác giả, sử dụng câu lệnh SELECT sau: SELECT LName,fname FROM authors Kết query mơ tả hình 3.6 38 Thiết kế CSDL thực thi với SQL Server Hình 3.6: Chọn vài cột định Mệnh đề WHERE query hoạt động giống lọc để lọc lấy dòng phù hợp với điều kiện Cbỉ dòng phù hợp với điều kiện mói đựoc hiển thị kết Cú pháp: SELECT FROM WHERE Ví dụ đơn giản dứoi sử dụng mệnh đề WHERE để trả tât tác giả đến từ thành phố Salt Lake: SELECT * FROM authors WHERE city='Salt Lake city' Kết câu lệnh hiển thị hình 3.7 Hình 3.7: Sử dụng mệng đề WHERE với SELECT 3.4.3 Các tốn tử Logíc Các tốn tử logíc cung cấp SQL AND, OR, NOT Toán tử AND OR đựoc sử dụng để kết nối điều kiện mệnh đề WHERE, nhiên toán tử NOT phủ định giá trị điều kiện Xem xét ví dụ sau: Select * from titles where NOT type = ‘business’ Truy vấn cao 39 Câu lệnh liệt kê chi tiết sách mà loại ‘business’ Hình 3.8: Sử dụng tốn tử NOT Tốn tử AND kết hợp hai điều kiện trả TRUE hai điều kiện true Vi dụ, muốn tìm sách loại business có tiền nhuận bút nhiều 10, câu lệnh hình 3.9 Hình 3.9: Sử dụng tốn tử AND Toán tử OR kết nối hai điều kiện, trả TRUE hai điều kiện true Ví dụ, để hiển thị tât tiêu đề mà thuộc loại sách business psychology viết câu lệnh hình 3.10 40 Thiết kế CSDL thực thi với SQL Server Hình 3.10: Sử dụng tốn tử OR Khi có nhiều tốn tử logíc sử dụng câu lệnh, NOT thực đầu tiên, sau đến AND cuối OR 3.5 DISTINCT COMPUTE BY Bài mô tả mệnh đề DISTINCT COMPUTE BY sử dụng với query sub-queries 3.5.1 DISTINCT Từ khóa DISTINCT khử dòng trùng từ tập kết câu lệnh SELECT Nếu không dùng DISTINCT, tất dòng dược trả về, kể dòng trùng Ví dụ, chọn cột type bảng Titles mà khơng dùng từ khóa DISTINCT, trả lại danh sách dài tên kiểu Nhưng sau sử dụng từ khóa DISTINCT query, SQL Server trả tất kiểu với thứ chiếm dòng Điều dựoc hình 3.11 hình 3.12 Mỗi kiểu trả nhiều lần Hình 3.11: Khơng sử dụng từ khóa DISTINCT Truy vấn cao 41 Nếu sử dụng từ khóa DISTINCT với query tren danh sách kết lại giá trị cột type Mỗi kiểu trả lần Hình 3.12: Sử dụng từ khóa DISTINCT 3.5.2 Mệnh đề COMPUTE COMPUTE BY Mệnh đề COMPUTE sinh thêm dòng kết tổng kết với tập kết Từ khóa COMPUTE sử dụng khơng dùng mệnh đề GROUP BY Nó sử dụng để sinh kết tổng hợp hàm MAX, MIN, SUM, COUNT, AVG Kết tổng kết xuất dòng thêm Chi tiết dịng dịng tổng kết đựoc xem kết CÚ PHÁP: COMPUTE , Ví dụ, người muốn xem số lượng tất đơn đặt hàng số lượng lớn nhất, câu lệnh SELECT sau: SELECT Stor_id, Qty FROM Sales COMPUTE MAX(Qty) Kết câu lệnh hiển thị hình 3.13 Figure 3.13: Using COMPUTE clause 42 Thiết kế CSDL thực thi với SQL Server COMPUTE trả tổng kết hàm aggregate nguợc lại COMPUTE BY trả tổng kết tùng nhóm tập kết COMPUTE BY phải bao gồm mệnh đề ORDER BY Nếu ví dụ thay COMPUTE, mệnh đề COMPUTE BY sử dụng kết hình 3.14 Hình 3.14: Sử dụng mệnh đề COMPUTE BY COMPUTE COMPUTE BY sử dụng khơng có mệnh đề GROUP BY 3.6 Sử dụng cấu trúc SELECT INTO Trong câu lệnh SELECT để lấy liệu, không giúp đưa kết query vào bảng khác, Thi cấu trúc SELECT INTO lại giúp tạo bảng đưa liệu vào từ bảng tồn Nó thực thi query sau tạo bảng để lưu kết query 3.6.1 Trường hợp sử dụng SELECT INTO Bất muốn tạo bảng dựa bảng khác điền liệu với kết lấy từ bảng sử dụng cấu trúc SELECT INTO SELECT INTO sử dụng để kết hợp liệu từ nhiều bảng khác vào bảng Ví dụ cách cấu trúc SELECT INTO làm việc Ví dụ tao bảng tên publishers2 dựa bảng publishers Bảng có liệu lấy từ bảng publishers Truy vấn cao 43 Hình 3.15: Sử dụng cấu trúc SELECT INTO 44 Thiết kế CSDL thực thi với SQL Server Tóm tắt  Một query câu hỏi viết ngơn ngữ hỏi đáp có cấu trúc (Structured Query Language – SQL) để lấy liệu từ bảng  Câu lệnh SELECT sử dụng đẻ viết query  Có ba cách để kết hợp liệu từ nhiều bảng: o o o Unions - Kết hợp dòng nhiều bảng Subqueries – query gói bên query khác Joins - Kết hợp cột từ nhiều bảng  Tính subquery cho phép sử dụng kết query phần query khác  Bằng cách sử dụng mệnh đề EXISTS sub-query điều khiển kiểm tra tồn dịng subquery  Có hai kiểu subquery: Nested queries Correlated queries  Chúng ta mở rộng subquery để có subquery gọi subquery khác Khi ta có nested subqueries  Khi subquery nhận tham số từ parent query Nó đựoc hiểu Correlated subquery  Có thể kết hợp dịng từ nhiều bảng sử dụng toán tử UNION  Từ khoá DISTINCT khử dòng trùng từ kết câu lệnh SELECT Nếu không sử dụng DISTINCT, tất dòng đựoc trả kể dòng trùng  Mệnh đề COMPUTE sinh thêm dòng kết tổng kết với tập kết Từ khóa COMPUTE sử dụng khơng dùng mệnh đề GROUP BY Nó sử dụng để sinh kết tổng hợp hàm MAX, MIN, SUM, COUNT, AVG  COMPUTE trả tổng kết hàm aggregate nguợc lại COMPUTE BY trả tổng kết tùng nhóm tập kết COMPUTE BY phải bao gồm mệnh đề ORDER BY  Cấu trúc SELECT INTO lại giúp tạo bảng đưa liệu vào từ bảng tồn Nó thực thi query sau tạo bảng để lưu kết query Truy vấn cao 45 Ơn tập Câu lệnh Select sau trả gì? Table1 ColumnA Table ColumnB AAA BBB CCC ColumnB ColumnA BBB DDD EEE BBB a SELECT A, B FROM Table1 UNION SELECT A, B FROM Table2 b SELECT A, B FROM Table1 UNION SELECT B, A FROM Table2 c SELECT * FROM Table1 UNION ALL SELECT * FROM Table2 Một subquery trả dịng(chỉ có cột) mà khơng sinh lỗi? a Chỉ dịng b Chỉ dịng nhiều phải sử dụng tốn tử ANY, ALL, EXISTS, IN c Khơng giới hạn d Không giới hạn, không thi phải sử dụng toán tử ANY, ALL, EXISTS or IN SELECT câu lệnh quan trọng SQL Sử dụng SELECT có thể: a Hiển thị vài tất cột từ bảng b Xoá liệu từ bảng c Cập nhật liệu từ bảng Có ba cách để kết hợp liệu từ nhiều bảng: a Unions b Subqueries c Joins d Roles Mệnh đề _ sử dụng để kiểm tra tồn dòng bên subquery a UNION b EXISTS c DISTINCT d COMPUTE BY Mệnh đề sinh thêm dòng kết tổng kết với tập kết a COMPUTE 46 Thiết kế CSDL thực thi với SQL Server b EXISTS c UNION d DISTINCT Cấu trúc cho phép tạo điền liệu vào bảng với liệu đựoc lấy từ bảng có sẵn? a SELECT INTO b UNION c Subquery d Joins Khi subquery nhận tham số từ parent query, nố gọi a Correlated subquery b Nested subquery c Plain subquery d Join subquery Kết câu lệnh SELECT không đựoc đặt tên, bảng tạm đựoc gọi a Results table b Query c Output 10 Khi có subquery mà gọi subquery khác đựoc gọi _ a nested subqueries b coorelated subqueries c joins d result sets Truy vấn cao 47 Bài tập nhà Viết câu lệnh T-SQL để lấy giá chi tiết hoá đơn bao gồm sản phẩm cung cấp từ thành phố Singapore Viết câu lệnh T-SQL để tính tổng tiền nhuận bút royaltyper từ bảng titleauthor 48 Thiết kế CSDL thực thi với SQL Server ... tiết đơn đặt hàng bao gồm sản phẩm cung cấp tử thành phố London Câu lệnh kết hiển thị hình 3.3 Truy vấn cao 35 Hình 3.3: Nested subqueries Trong query có chứa subquery, subquery thực lần để trả lại... Current_Accounts Câu lệnh hiển thị kết sau: Account_No -S001 S002 S003 S004 C001 C002 Truy vấn cao Name -James Rita Mary Valentina Michal Robin 37 Những tên cột tập kết giống với tên... định giá trị điều kiện Xem xét ví dụ sau: Select * from titles where NOT type = ‘business’ Truy vấn cao 39 Câu lệnh liệt kê chi tiết sách mà loại ‘business’ Hình 3.8: Sử dụng tốn tử NOT Tốn tử

Ngày đăng: 11/09/2012, 13:54

HÌNH ẢNH LIÊN QUAN

Hình 3.1: Ví dụ về một Subquery đơn giản - Truy vấn (query) nâng cao
Hình 3.1 Ví dụ về một Subquery đơn giản (Trang 2)
Bảng 3.1: Các từ khóa sử dụng trong Sub-query - Truy vấn (query) nâng cao
Bảng 3.1 Các từ khóa sử dụng trong Sub-query (Trang 3)
Hình 3.2: Sử dụng mệnh đề EXISTS 3.2.2 Các kiểu của Sub-queries  - Truy vấn (query) nâng cao
Hình 3.2 Sử dụng mệnh đề EXISTS 3.2.2 Các kiểu của Sub-queries (Trang 3)
Hình 3.3: Nested subqueries - Truy vấn (query) nâng cao
Hình 3.3 Nested subqueries (Trang 4)
Hình 3.4: Correlated subquery - Truy vấn (query) nâng cao
Hình 3.4 Correlated subquery (Trang 4)
Unions được sử dụng để kết hợp các dòng từ nhiều bảng. - Truy vấn (query) nâng cao
nions được sử dụng để kết hợp các dòng từ nhiều bảng (Trang 5)
Dấu hoa thị (*) được sử dụng để lầy về tất cả các cột trong bảng. Cú pháp:  SELECT * FROM &lt;Table_name&gt; - Truy vấn (query) nâng cao
u hoa thị (*) được sử dụng để lầy về tất cả các cột trong bảng. Cú pháp: SELECT * FROM &lt;Table_name&gt; (Trang 6)
Kết quả của câu lệnh này được hiển thị trong hình 3.7. - Truy vấn (query) nâng cao
t quả của câu lệnh này được hiển thị trong hình 3.7 (Trang 7)
Hình 3.6: Chọn một vài cột nhất định - Truy vấn (query) nâng cao
Hình 3.6 Chọn một vài cột nhất định (Trang 7)
Hình 3.9: Sử dụng toán tử AND - Truy vấn (query) nâng cao
Hình 3.9 Sử dụng toán tử AND (Trang 8)
Hình 3.8: Sử dụng toán tử NOT - Truy vấn (query) nâng cao
Hình 3.8 Sử dụng toán tử NOT (Trang 8)
Hình 3.10: Sử dụng toán tử OR - Truy vấn (query) nâng cao
Hình 3.10 Sử dụng toán tử OR (Trang 9)
Ví dụ, nếu chúng ta chọn cột type trong bảng Titles mà không dùng từ khóa DISTINCT, nó sẽ trả lại một danh sách dài các tên kiểu - Truy vấn (query) nâng cao
d ụ, nếu chúng ta chọn cột type trong bảng Titles mà không dùng từ khóa DISTINCT, nó sẽ trả lại một danh sách dài các tên kiểu (Trang 9)
Hình 3.12: Sử dụng từ khóa DISTINCT 3.5.2 Mệnh đề COMPUTE và COMPUTE BY - Truy vấn (query) nâng cao
Hình 3.12 Sử dụng từ khóa DISTINCT 3.5.2 Mệnh đề COMPUTE và COMPUTE BY (Trang 10)
Kết quả của câu lệnh được hiển thị trong hình 3.13. - Truy vấn (query) nâng cao
t quả của câu lệnh được hiển thị trong hình 3.13 (Trang 10)
Hình 3.14: Sử dụng mệnh đề COMPUTE BY - Truy vấn (query) nâng cao
Hình 3.14 Sử dụng mệnh đề COMPUTE BY (Trang 11)
Bất cứ khi nào chúng ta muốn tạo một bảng dựa trên bảng khác và điền dữ liệu cùng với kết quả lấy từ bảng đó chúng ta sử dụng cấu trúc SELECT INTO - Truy vấn (query) nâng cao
t cứ khi nào chúng ta muốn tạo một bảng dựa trên bảng khác và điền dữ liệu cùng với kết quả lấy từ bảng đó chúng ta sử dụng cấu trúc SELECT INTO (Trang 11)
a. Hiển thị một vài hoặc tất cả các cột từ các bảng. b. Xoá dữ liệu từ các bảng - Truy vấn (query) nâng cao
a. Hiển thị một vài hoặc tất cả các cột từ các bảng. b. Xoá dữ liệu từ các bảng (Trang 14)

TỪ KHÓA LIÊN QUAN

w