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

Hướng dẫn ôn tập CSDL 2009

50 824 6
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

Thông tin cơ bản

Định dạng
Số trang 50
Dung lượng 1,62 MB

Nội dung

Hướng dẫn ôn tập CSDL 2009

Trang 1

Biên soạn: ThS Nguyễn Mạnh Cường

Tài liệu bao gồm:

- Giới thiệu các dạng bài tập môn cơ sở dữ liệu quan hệ

- Giới thiệu phương pháp giải các dạng bài tập

- Phụ lục 1: Các lỗi thường gặp khi giải bài tập CSDL

- Phụ lục 2: Một số bài tập sinh viên tự ôn tập

- Bài tập thực hành SQL và thiết kế CSDL

- Một số bài tập tổng hợp

Tài liệu sinh viên nên tham khảo:

- Nhập môn CSDL quan hệ - Lê Tiến Vương

- Đề cương chi tiết môn Cơ sở dữ liệu quan hệ - Ngô Thị Bích Thuý - Đại học Công nghiệp Hà Nội - 2004

Trang 2

Tµi liÖu tham kh¶o Trang 2

MỤC LỤC

1 Thực hiện biểu thức đại số quan hệ 4

2 Biểu diễn yêu cầu bằng biểu thức đại số quan hệ 9

3 Biểu diễn yêu cầu bằng SQL .14

4 Chứng minh phụ thuộc hàm .20

5 Tìm bao đóng của tập thuộc tính .22

6 Phủ tối thiểu và tìm phủ tối thiểu 23

7 Tìm khoá tối thiểu của một quan hệ 27

8 Kiểm tra tính mất mát thông tin của phép tách lược đồ quan hệ .28

9 Chuẩn hoá lược đồ quan hệ .31

Phụ lục 1: Các lỗi thường gặp khi giải bài tập CSDL 36

Phụ lục 2: Một số bài tập sinh viên tự ôn tập 37

Bài thực hành SQL 39

Hướng dẫn thực hành trong SQL Server 2000 44

Bài tập thiết kế CSDL 47

Một số bài tập tổng hợp 49

Trang 3

LỜI NÓI ĐẦU

Trong mỗi dạng bài tập là tóm tắt kiến thức liên quan và phương pháp giải của từng loại bài tập đó Tuy nhiên, có những phương pháp chỉ áp dụng trên một lớp rộng các bài tập mà không phải áp dụng cho tất cả các bài tập trong dạng bài tập đó Do vậy, sinh viên cần nắm vững phương pháp và mở rộng ra các trường hợp đặc biệt

Mỗi dạng bài tập lại có thể có nhiều phương pháp giải, trong tài liệu này chỉ trình bày một hoặc một số phương pháp cho một dạng bài tập mà tác giả cho là phù hợp Thiết nghĩ cũng tốt với một đề cương ôn tập do thời gian ôn tập không nhiều

Do thời gian hạn hẹp, tài liệu không tránh khỏi những sai sót Rất cảm ơn các đóng góp của các độc giả để tài liệu được tiếp tục hoàn thiện

Sinh viên chỉ nên coi đây là tài liệu tham khảo

Trang 4

Tµi liÖu tham kh¶o Trang 4

DẠNG 1: THỰC HIỆN BIỂU THỨC ĐẠI SỐ QUAN HỆ

Đề bài: Cho một số lược đồ quan hệ và một số biểu thức đại số quan hệ Hãy thực hiện các biểu thức đại số quan hệ đó

Kiến thức liên quan:

Trong đại số quan hệ có 8 phép toán chia làm hai nhóm:

- Các phép toán tập hợp: Phép hợp (∪), phép giao (∩), phép trừ (-), phép tích đề các (x)

- Các phép toán quan hệ: Phép chiếu (∏), phép chọn (δ), phép kết nối ( , * ), phép chia (÷)

[1] Phép hợp:

- Chỉ thực hiện trên các quan hệ khả hợp (có cùng tập thuộc tính)

- Phép hợp hai quan hệ khả hợp R và S thực chất là việc gộp các bản ghi trong hai quan hệ thành 1 quan hệ nhưng các bản ghi trùng nhau thì chỉ giữ lại một bản ghi

[2] Phép giao:

- Chỉ thực hiện trên hai quan hệ khả hợp

- Phép giao giữa R và S thực chất là việc chọn ra trong hai quan hệ R và S những bản ghi trùng nhau

Trang 5

- Chỉ thực hiện trên các quan hệ khả hợp

- Phép trừ R - S thực chất là việc chọn ra các bản ghi chỉ có ở R mà không có ở S

[4] Phép tích đề các:Thực hiện trên 2 quan hệ bất kỳ

- Phép tích đề các của hai quan hệ R và S thực chất là việc lấy mọi bản ghi của R

"gắn" với mọi bản ghi của S

- Tập các thuộc tính của bảng quan hệ kết quả là tất cả các thuộc tính của quan hệ

R và các thuộc tính của quan hệ S, xếp theo thứ tự: các thuộc tính của R trước, các thuộc tính của S sau Số bản ghi của quan hệ kết quả bằng tích số bản ghi của hai quan hệ (R

Trang 6

Tµi liÖu tham kh¶o Trang 6

- Bảng kết quả có thể xuất hiện các bản ghi trùng nhau Khi đó, phải loại bỏ các bản ghi trùng

- Chọn ra các bản ghi thoả mãn điều kiện chọn

- Nếu không có bản ghi nào thoả mãn điều kiện chọn thì bảng kết quả thu được là rỗng ( ∅ )

- Điều kiện chọn là một biểu thức Logic

- Phép kết nối giữa hai quan hệ R và S thực chất là việc lấy một bản ghi của R

"gắn" với một bản ghi của S sao cho bản ghi kết quả thoả mãn điều kiện kết nối

- Điều kiện kết nối có dạng: A θ B trong đó A, B là hai thuộc tính của R hoặc S θ

Trang 7

hơn giá trị thuộc tính C của S Thu được:

- Có thể bỏ đi các thuộc tính (cột) trùng nhau sau khi kết nối tự nhiên

- Quan hệ kết quả thu được có tập thuộc tính là U - V

- Bản ghi t nằm trong quan hệ kết quả nếu và chỉ nếu: với mọi bản ghi t' thuộc S thì t^t' là một bản ghi thuộc R (t^t' là phép lấy t xếp cạnh t')

Trang 8

Tµi liÖu tham kh¶o Trang 8

Quan hệ kết quả có hai bản ghi có giá trị a1 và a2 là do: nếu lấy a1 hoặc a2 xếp trước mọi bản ghi trong S ta đều thu được các bản ghi có trong R

Trang 9

DẠNG 2: BIỂU DIỄN YÊU CẦU BẰNG ĐẠI SỐ QUAN HỆ Bài toán: Cho một hoặc nhiều lược đồ quan hệ và một số yêu cầu dữ liệu Hãy biểu diễn các yêu cầu dữ liệu đó bằng biểu thức đại số quan hệ sao cho kết quả của biểu thức đó thoả mãn yêu cầu đặt ra

Phương pháp:

Phương pháp sau đây giúp giải một lớp rộng các bài tập thuộc dạng này Trong các bài tập còn lại (xem phần sau), phương pháp này chỉ mang tính chất hỗ trợ

xem các thông tin đó thuộc ít nhất mấy bảng

Nếu các thông tin liên quan chỉ thuộc ít nhất 1 bảng thì biểu thức không cần phép kết nối Ngược lại thì cần

B2: Xác định xem các bản ghi lấy ra có cần thoả mãn điều kiện gì không? nếu không, biểu thức sẽ không có phép chọn Ngược lại thì có phép chọn Khi đó cần xác định điều kiện chọn

B3: Xác định xem có lấy mọi thông tin trong các bảng liên quan không Nếu có thì biểu thức không có phép chiếu Ngược lại thì biểu thức có phép chiếu Khi đó cần xác định các thuộc tính cần chiếu

Chú ý: Biểu thức điều kiện chọn là một biểu thức Logic bao gồm:

- Các toán tử: và (∧), hoặc (∨), phủ định (¬) so sánh ( >, <, ≥, ≤, =, ≠)

- Các toán hạng: Các tên trường hoặc các hằng giá trị Hằng giá trị có 3 loại gồm: hằng số, hằng xâu, hằng ngày tháng Hằng xâu và hằng ngày tháng đặt giữa hai dấu nháy đơn ' ' Hằng số thì không

Ví dụ:

Các bảng dữ liệu sau sẽ dùng làm ví dụ trong suốt phần này và cả dạng bài tập thứ

3 (biểu diễn yêu cầu bằng SQL)

Bảng S chứa thông tin về tất cả các nhà cung cấp gồm: Mã nhà cung cấp, tên nhà cung cấp, tình trạng cung ứng và địa chỉ nhà cung cấp:

S(S#, SName, Status, City) Bảng P chứa thông tin về tất cả các sản phẩm gồm: Mã sản phẩm, tên sản phẩm, màu sắc, trọng lượng:

P(P#, PName, Color, Weight)

Bảng SP chứa thông tin về nhà cung cấp nào đã cung cấp sản phẩm nào với số lượng bao nhiêu:

SP(S#, P#, QTY)

Trang 10

Tµi liÖu tham kh¶o Trang 10

Ví dụ 1:

Cho biết tên hàng và màu sắc của các mặt hàng có trọng lượng [20, 30]?

B1: Các thông tin liên quan: tên hàng, màu sắc, trọng lượng Tương ứng với PName, Color, Weight Các thông tin này thuộc ít nhất 1 bảng, đó là bảng P Vậy biểu thức được xây dựng:

(P) B2: Các bản ghi lấy ra cần thoả mãn điều kiện: Weight ≥20 ∧ Weight ≤ 30 Vậy biểu thức được xây dựng:

δWeight 20 Weight 30 (P) B3: Ta chỉ lấy 2 thông tin trong số 4 thông tin của bảng P (PName, Color) do đó có phép chiếu Biểu thức được xây dựng:

PName, Color (δWeight 20 Weight ≤ 30 (P))

Với các ví dụ sau đây, phương pháp 3 bước trên không hoàn toàn đúng mà chỉ mang tính chất trợ giúp:

Cho biết mã nhà cung ứng đã cung ứng cả mặt hàng P1 và P2

Các thông tin liên quan là S# và P# Hai thông tin này nằm trong ít nhất 1 bảng SP Tuy nhiên biểu thức ĐSQH sau là một hiểu lầm mà sinh viên thường gặp:

Trang 11

Vòng tròn thứ nhất tượng trưng cho mã của các nhà cung cấp đã cung cấp P1 Vòng tròn thứ 2 là mã các nhà cung cấp đã cung cấp P2 Vậy giao của 2 vòng tròn này

là mã các nhà cung đã cung cấp cấp cả P1 và P2

S# (δP#='P1' (SP)) ∩∏S# (δP#='P2' (SP))

-

Tương tự, ta có thể giải quyết được các bài có dạng như:

- Cho biết mã các nhà cung cấp chỉ cung cấp P1 mà không cung cấp P2 (phép trừ)

S# (δP#='P1' (SP)) - S# (δP#='P2' (SP))

- Cho biết mã các nhà cung cấp đã cung cấp P1 hoặc P2 (phép hợp - có thể thay bằng toán tử hoặc (v))

S# (δP#='P1' (SP)) ∪∏S# (δP#='P2' (SP)) hoặc S# (δP#='P1' V P#=’P2’ (SP))

Cho biết mã hàng được tất cả các nhà cung ứng cung cấp?

Ta hiểu rằng đó là những P# mà sao cho nếu ta ghép nó với mọi S# của bảng S thì

ta luôn thu được cặp S#, P# có trong bảng SP Do đó, đây là một ví dụ về phép chia trong ĐSQH:

S#, P# (SP) ÷∏S# (S)

Phương pháp 3 bước trên là rất quan trọng giúp hình thành biểu thức đại số quan

hệ và cũng giúp khởi động quá trình tư duy khi làm bài tập dạng này Khi sử dụng nó, điểm quan trọng nhất là việc xác định đúng biểu thức điều kiện chọn

Sau đây là một số chú ý khi viết biểu thức điều kiện chọn:

[1] Khi nói “A và B” ta có thể hiểu theo 3 cách:

- A và B

Ví dụ ta nói: Cho biết các tên hàng màu đỏ Và có trọng lượng nhỏ hơn 20!

- A hoặc B

Ví dụ ta nói: Cho biết thông tin của các mặt hàng có trọng lượng là 20 Và 30! Ta

cần hiểu rằng phải đưa ra thông tin của các mặt hàng có trọng lượng 20 hoặc 30

- A giao B

Ví dụ ta nói: Đưa ra tên hàng được cả nhà cung cấp S01 Và S02 cung ứng! Khi

đó ta cần lấy giao của 2 tập hợp Tập thứ nhất là tất cả các tên hàng do nhà cung cấp S01 cung ứng Tập thứ 2 gồm toàn bộ các tên hàng do nhà cung cấp S02 cung ứng

[2] Sai lầm khi sử dụng hàm trong biểu thức điều kiện chọn

Trang 12

Tµi liÖu tham kh¶o Trang 12

Hãy nghiên cứu kỹ các toán tử và toán hạng được phép sử dụng trong biểu thức điều kiện chọn Trong đó, ta không thấy các toán tử số học như +, -, *, / hoặc các toán hạng là hàm Tuy nhiên, đại số quan hệ mở rộng lại cho phép sử dụng chúng!

Ví dụ với bảng quan hệ: Thí Sinh(SBD, HoTen, NS, Que) – (Số báo danh, Họ tên, ngày sinh, quê) Hãy cho biết họ tên thí sinh sinh năm 1990?

Biểu thức điều kiện chọn sau đây là không hợp lệ:

HoTen (δYear(NS) = 1990 (ThiSinh))

Nhưng một cách suy nghĩ đơn giản có thể giải quyết được vấn đề này:

HoTen (δNS ‘1/1/1990’ NS ‘31/12/1990’ (ThiSinh))

[3] Khi sử dụng cả toán tử và toán tử , hãy lưu ý tới các dấu mở, đóng ngoặc: Thông thường phép ∧ được ưu tiên hơn phép ∨; tuy nhiên, trong một số trường hợp, nếu bạn muốn điều ngược lại (ưu tiên phép ∨ trước) thì vẫn có thể được bằng cách

sử dụng các dấu ngoặc đơn Khi đó, máy tính sẽ ưu tiên thực hiện phần biểu thức trong dấu ngoặc đơn trước (xin xem ví dụ trong phần sau)

[4] Các tên bảng, tên trường trong biểu thức đại số quan hệ phải viết giống với tên bảng, tên trường trong các bảng quan hệ đầu bài cho Nếu không chú ý điểm này, một số bạn có thể không hiểu vì sao đáp án của mình lại không được chấp nhận

Để rõ hơn các vấn đề trên, chúng tôi đưa ra một loạt ví dụ như sau:

Cho các quan hệ sau:

Thí Sinh(SBD, HoTen, NS, Que) – (Số báo danh, Họ tên, ngày sinh, quê)

Phách(SBD, SPH) – (Số báo danh, số phách)

Kết quả(SPH, M1, M2, M3) – (Số phách, điểm môn 1, điểm môn 2, điểm môn 3)

Hãy so sánh đáp án của 3 ví dụ sau:

- Cho biết Họ tên thí sinh sinh tháng 3 năm 1990 và có quê là “Hà Nam”

Hoten (δNS ‘1/3/1990’ NS ‘31/3/1990’ Que = ‘Ha Nam’ (ThiSinh))

Trong ví dụ trên, ta sử dụng các toán tử ≥ và ≤ để biểu diễn điều kiện thí sinh có ngày sinh trong tháng 3 năm 1990 mà không sử dụng hàm month, year;

- Cho biết Họ tên các thí sinh quê ở Hà Nam và Hải Dương

Hoten (δ Que = ‘Ha Nam’ Que = “Hai Duong’ (ThiSinh)) Trong ví dụ trên, 2 vế của điều kiện cùng áp dụng trên một trường, vì vậy cách

nói “và” có thể hiểu là phép ∨ hoặc ∩, và trong trường hợp này chúng ta cần sử dụng phép ∨

- Cho biết Họ tên của các thí sinh mà điểm 3 môn có cả điểm 0 và điểm 10

Ta tìm các thí sinh có điểm 0 trước:

∏HoTen(δM1=0 M2=0 M3=0(ThiSinh*Phach*Ketqua))

Trang 13

Rồi đến các thí sinh có điểm 10:

tử ∧ và ∨ trong trường hợp này

Với các ví dụ trên, bạn dễ dàng hoàn thành được ví dụ tổng hợp sau đây (hãy trao đổi với mọi người về đáp án của mình):

Cho biết họ tên các thí sinh của các tỉnh Hải phòng và Quảng Ninh mà các thí sinh đó sinh nửa đầu năm 1989 và không có điểm nào liệt (điểm 0)

Trang 14

Tµi liÖu tham kh¶o Trang 14

DẠNG 3: BIỂU DIỄN YÊU CẦU BẰNG SQL Bài toán: Cho một hoặc nhiều lược đồ quan hệ và một số yêu cầu dữ liệu Hãy biểu diễn các yêu cầu dữ liệu đó bằng câu truy vấn SQL sao cho kết quả của câu SQL đó thoả mãn yêu cầu đặt ra

Phương pháp:

Tài liệu này chỉ tập trung vào câu Select Các dạng khác sinh viên tự tham khảo

trong các tài liệu khác

Ta tạm phân chia các câu truy vấn Select thành 5 loại:

[1] Chiếu, chọn trên một bảng

[2] Chiếu chọn trên nhiều bảng

[3] Sử dụng các hàm, các vị từ

[4] Select lồng nhau

[5] Tạo nhóm sử dụng Group by

Tuy nhiên, một câu Select thông thường sẽ là câu select tổng hợp Việc tách chúng thành 5 loại chỉ nhằm mục đích dễ tiếp thu kiến thức cơ bản

Sau đây là các lưu ý khi viết câu Select của từng dạng:

[1]. Sử dụng phương pháp 3 bước trong dạng bài tập 2 (biểu diễn yêu cầu bằng biểu thức đại số quan hệ)

Biểu thức điều kiện chọn trong SQL có điểm khác:

- Các toán tử: và (And), hoặc (Or), so sánh (>, <, >=, <=, =, <>), số học (+, -, *, /, mod )

- Các toán hạng: Các trường hoặc các hằng giá trị Hằng xâu và hằng ngày tháng đặt giữa hai dấu nháy đơn ' ' Hằng số thì không

Cú pháp câu Select đơn giản:

Select <Tên trường> From <Tên bảng> Where <Điều kiện>

Cho biết tên hàng màu đỏ, có trọng lượng nhỏ hơn 15?

SELECT PName FROM P WHERE Color = 'Đỏ' And Weight < 15

- Các tên trường xuất hiện trong ít nhất 2 bảng liên quan thì được viết dưới dạng

<Tên bảng> <Tên trường>

- Tên các bảng đặt ngay sau FROM phải cách nhau bởi dấu phảy

- Luôn có điều kiện kết nối đặt ngay sau WHERE Điều kiện kết nối có dạng <Tên bảng 1 A> = <Tên bảng 2 A> với A là thuộc tính chung của hai quan hệ

Cho biết tên hàng đã cung cấp với số lượng 30 cái mỗi lượt

SELECT P PName FROM P, SP WHERE P.P# = SP.P# and SP QTY =30

Các câu sau đều sai vì không chú ý tới 3 vấn đề đã nêu (theo đúng thứ tự):

Trang 15

SELECT P PName FROM P and SP WHERE P.P# = SP.P# and SP QTY =30

SELECT PName FROM P, SP WHERE P# = P# and QTY =30

SELECT P PName FROM P, SP WHERE SP QTY =30

[3] Có 6 hàm hay dùng:

SUM, MAX, MIN, AVG, COUNT(*), COUNT(<Cột>)

- Các hàm được sử dụng ngay sau SELECT

SELECT <Tên trường> / <Hàm> … FROM …

- Có 3 Vị từ chính: IN, BETWEEN, LIKE Trong đó, IN và BETWEEN không bắt buộc phải dùng

- Khi dùng LIKE cần chú ý:

+ LIKE chỉ dùng cho dữ liệu kiểu xâu

+ Hai ký tự đại diện trong xâu tìm kiếm sau LIKE: “%” đại diện cho 1 xâu ký

tự bất kỳ “_” đại diện cho 1 ký tự bất kỳ

Cho biết tên các nhà cung cấp ở Hà Tây:

SELECT SName FROM S WHERE City Like '%Hà Tây%'

Cho biết tên các nhà cung cấp có City là Hà Tây:

SELECT SName FROM S WHERE City = 'Hà Tây'

Cho biết tổng số nhà cung cấp có trong CSDL?

SELECT Count (*) FROM S Khi sử dụng hàm cần lưu ý 2 nguyên tắc sau:

- Hàm không được sử dụng trực tiếp trong biểu thức điều kiện chọn của mệnh đề where

- Không được viết hàm lồng vào hàm: ví dụ SELECT Max(Count(…)) …

Câu Select lồng nhau có 4 dạng chính như sau:

(1) Lồng nhau do sử dụng hàm trong biểu thức điều kiện chọn:

Biểu thức điều kiện chọn sau where không thể sử dụng hàm một cách trực tiếp Nhưng nó có thể sử dụng các kết quả của một câu lệnh Select nào đó Do vậy, người ta thường sử dụng Select lồng nhau trong trường hợp này

Cho biết Tên hàng có trọng lượng lớn nhất?

Câu SELECT sau là sai trong khi đa số sinh viên mắc phải:

Select PName From P Where Weight = Max(Weight) Câu SELECT sau cho biết trọng lượng lớn nhất là bao nhiêu:

SELECT Max(Weight) FROM P

Trang 16

Tµi liÖu tham kh¶o Trang 16

Tuy nhiên câu hỏi không yêu cầu cho biết trọng lượng lớn nhất này mà cần cho biết tên của mặt hàng có trọng lượng lớn nhất

SELECT PName From P Where Weight = (SELECT Max(Weight) FROM P)

(2) Thay bằng việc kết nối bảng ta có thể sử dụng SELECT lồng nhau:

Cho biết Tên các mặt hàng do S2 cung ứng?

Cách 1: sử dụng kết nối, câu SELECT có dạng [2]:

SELECT P.PName FROM P, SP WHERE P.P# = SP.P# And SP.S# = 'S2'

Cách 2: Sử dụng Select lồng nhau, câu Select lại ở dạng [4] này:

Ta hiểu câu hỏi này là: Cho biết tên hàng mà mã của nó nằm trong những mã hàng

do S2 cung ứng

SELECT PName FROM P WHERE P# IN (SELECT P# FROM SP WHERE S#='S2')

Cho biết tên hàng mà S2 chưa cung ứng lần nào?

SELECT PName FROM P WHERE P# NOT IN (SELECT P# FROM SP WHERE S#='S2')

(3) Lồng nhau do thể hiện phép giao và phép trừ:

Việc sử dụng các mệnh đề Intersect (phép giao) và Minus (phép trừ) là thực sự không cần thiết và không được cài đặt trong một số môi trường SQL nhúng Tuy vậy, ta vẫn dễ dàng thể hiện được hai phép toán tập hợp này trong SQL nhờ câu lệnh Select lồng nhau

Ví dụ: Cho biết tên hàng được cả nhà cung cấp S01 và S02 cung ứng !

Câu sau đây cho ta tập các mã hàng do nhà cung cấp S01 cung ứng:

SELECT P# From SP WHERE S#= ‘S01’

Và tương tự, câu select sau cho ta tập các mã hàng được nhà cung cấp S02 cung ứng:

SELECT P# From SP WHERE S#= ‘S02’

Vì vậy dễ dàng tìm được tên hàng được cả hai nhà cung cấp cung ứng bằng phép giao:

SELECT Pname FROM P WHERE P# IN (SELECT P# From SP WHERE S#= ‘S01’) AND

P# IN (SELECT P# From SP WHERE S#= ‘S02’)

Như vậy, sử dụng vị từ IN – IN ta có thể biểu diễn được phép giao Khi sử dụng IN, trong trường hợp này, cần nhớ: câu select luôn có dạng: X IN (SELECT X …) mà không được phép viết X IN (SELECT Y ….) với Y khác X

Tương tự ta có thể biểu diễn được phép trừ một cách dễ dàng:

Cho biết tên hàng được nhà cung cấp S01 cung ứng mà không được nhà cung cấp S02 cung ứng:

SELECT Pname FROM P WHERE P# IN (SELECT P# From SP WHERE S#= ‘S01’) AND

P# NOT IN (SELECT P# From SP WHERE S#= ‘S02’)

Trang 17

Các vị từ IN – NOT IN cho phép ta thể hiện phép trừ một cách dễ dàng

(4) Lồng nhau do SELECT từ một query (tức select từ 1 câu select)

Thông thường, sau FROM là tên các bảng quan hệ (tables) Tuy nhiên, đôi khi ta

có thể thay tên bảng quan hệ bằng một query tức là 1 câu truy vấn Select Sở dĩ như vậy

là vì kết quả của câu Select cũng cho ta một bảng quan hệ (hay nói đúng hơn là 1 tập hợp các bản ghi có dạng 1 quan hệ)

Ví dụ: Cho biết Tổng số lượng hàng lớn nhất mà một nhà cung cấp đã cung ứng!

Ta hiểu rằng mỗi nhà cung cấp có thể cung ứng nhiều mặt hàng khác nhau Mỗi mặt hàng lại cung cấp làm nhiều đợt với số lượng mỗi đợt khác nhau Tuy nhiên, mỗi nhà cung cấp đều xác định một tổng số lượng hàng hóa đã cung cấp của mình Muốn xác định tổng số lượng hàng cung ứng cho từng nhà cung cấp, ta chỉ việc cộng dồn tất

cả các số lượng của tất cả các mặt hàng, các lần cung ứng của từng nhà sản xuất Do vậy, ta cần nhóm theo từng nhà sản xuất (nhóm – Group by – xin xem mục sau)

Theo câu hỏi trên, ta cần đưa ra tổng lớn nhất là 100

Hãy xét câu Select sau:

SELECT S#, SUM(QTY) as Tong FROM SP GROUP BY S#

Kết quả ta thu được một quan hệ (tạm gọi là quan hệ Q1) có dạng:

Trang 18

Tµi liÖu tham kh¶o Trang 18

Nhưng Q1 chính là kết quả của câu Select trên, do đó ta viết:

SELECT Max(Tong)

GROUP BY <Tên cột> [HAVING <Điều kiện>]

Chức năng: Tất cả các bản ghi có giá trị trùng nhau trên cột đã chỉ ra sau GROUP

Cho biếtmã hàng và tổng số lượng của từng mặt hàng đã cung ứng?

Câu Select sau là sai do nó đưa ra tổng số lượng của mọi mặt hàng:

SELECTP#, SUM(QTY) FROM SP Nhưng nếu có GROUP BY theo Mã hàng (P#) thì tất cả các bản ghi của cùng một

mã hàng sẽ được nhóm thành 1 nhóm (nói khác đi, mỗi mặt hàng thuộc một nhóm) và hàm SUM() sẽ tính SUM trên từng nhóm và câu SQL sau là chính xác:

SELECT P#, SUM(QTY) FROM SP GROUP BY P#

Cho biết Mã nhà cung cấp đã cung cấp tổng số lượng hàng lớn hơn 300?

Câu SELECT sau sẽ đưa ra các tất cả các mã nhà cung cấp có trong SP (tức đã cung cấp hàng) nhưng mỗi nhà cung cấp là một nhóm:

SELECT S# FROM SP GROUP BY S#

Nhưng câu sau chỉ đưa ra mã nhà cung cấp thuộc nhóm có tổng số lượng lớn hơn 300:

Khi dùng GROUP BY, cũng có những chú ý mà ta không thể bỏ qua:

(1) Select trường nào, Group by theo trường đó:

Sau SELECT, có thể là các trường hoặc các hàm Ví dụ: SELECT S#, SUM(SL)… thì S# là tên trường còn SUM(SL) là hàm Nguyên tắc trên chỉ cho ta thấy: ta luôn phải Group by theo tên các trường (không phải hàm) mà ta đã liệt kê sau Select ở trên Có bao nhiêu trường trong câu Select thì phải Group by theo bấy nhiêu trường

(2) Mệnh đề Having [Điều kiện] chỉ có khi ta sử dụng Group by Và điều đặc biệt là biểu thức [Điều kiện] sau Having lại có thể sử dụng hàm

Trang 19

Sau khi đã xem xét 5 loại câu Select, chúng ta cần áp dụng nó một cách linh hoạt

để viết các câu Select tổng hợp Cú pháp sau cần được xem xét kỹ:

SELECT <Tên trường> / <Hàm> / <Biểu thức> / <Hằng> [AS <Bí danh>] FROM <Tên bảng> / <Câu SELECT> [ AS <Bí danh>]

[WHERE <Biểu thức điều kiện>]

[GROUP BY <Tên trường> [HAVING <Biểu thức điều kiện>]]

[ORDER BY <Tên trường> [DESC] [, …] ]

Hãy kiểm tra câu lệnh Select sau bằng MS-Access:

Select (Max(SL) + Min(SL)) AS A, 1 AS B FROM SP

ta sẽ biết cách sử dụng <Biểu thức> và <Hằng> trong câu Select.

Trang 20

Tµi liÖu tham kh¶o Trang 20

DẠNG 4: CHỨNG MINH PHỤ THUỘC HÀM Bài toán: Cho quan hệ R(U, F) Chứng minh rằng nếu R thoả F thì R cũng thoả

Yêu cầu: Nắm được 3 tiên đề AmStrong và 3 luật

- Tiên đề tăng trưởng: Nếu ta bổ sung vào 2 vế của một phụ thuộc hàm một tập

G AB

Trang 21

(2) Chứng minh AB → H:

Tuy nhiên, một phương pháp tiện lợi hơn có thể giúp chúng ta chứng minh các phụ thuộc hàm một cách dễ dàng

đóng của tập thuộc tính, xin xem dạng 5) Nếu X+ có chứa Y thì hiển nhiên X → Y và việc chứng minh hoàn tất

Với ví dụ trên, để chứng minh AB → GH, ta chỉ việc tính bao đóng của AB:

Trang 22

Tµi liÖu tham kh¶o Trang 22

DẠNG 5: TÌM BAO ĐÓNG CỦA MỘT TẬP THUỘC TÍNH Bài toán: Cho quan hệ R(U, F) X ⊆ U Tìm bao đóng của X (Tức tìm X+)

Giải thuật:

B1: Đặt V0 = X B2: Tính V1 = V0∪ Z nếu ∃ Y → Z và Y ∈ V0

Tính Vi = Vi -1 ∪ Z nếu ∃ Y → Z và Y ∈ Vi -1 Lặp cho đến khi Vi ≡ Vi-1

Bao đóng của X tối thiểu là bằng chính tập X và tối đa là bằng tập U

Việc tìm bao đóng của tập thuộc tính là khá đơn giản nhưng lại rất quan trọng do

nó còn được áp dụng để giải quyết nhiều dạng bài tập khác nữa như : chứng minh phụ thuộc hàm, tìm phủ tối thiểu, chuẩn hóa v.v Do vậy cần dành sự quan tâm đúng mức cho dạng bài tập này

Một số tài liệu ký hiệu bao đóng của tập thuộc tính X là {X}* Ký hiệu này cũng tương tự {X}+

Trang 23

DẠNG 6: PHỦ TỐI THIỂU CỦA MỘT TẬP PHỤ THUỘC HÀM

Bài toán: Cho quan hệ R(U, F) Hỏi rằng tập F đã tối thiểu chưa? Vì sao? Nếu chưa hãy tìm một Phủ tối thiểu của F

Kiến thức liên quan:

Ta chú ý tới một số khái niệm sau:

[1] Phụ thuộc hàm dư thừa: Phụ thuộc hàm X → Y thuộc F được gọi là dư thừa trong F nếu ta loại bỏ nó ra khỏi F ta vẫn thu được nó từ các phụ thuộc hàm còn lại trong F

VD: F = {AB → C, B → C, C → D, B → D}

Có AB → C dư thừa vì nếu có B → C thì cũng có AB → C

Có B → D dư thừa vì nếu có B → C và C → D thì cũng có B → D

Để phát hiện phụ thuộc hàm dư thừa ta chú ý: Nếu trong tập F có 2 phụ thuộc hàm cùng có vế phải giống nhau thì trong 2 phụ thuộc hàm đó có thể tồn tại 1 phụ thuộc hàm

phải là Y (cũng suy ra Y) thì nó không thể dư thừa

Cách xác định phụ thuộc hàm dư thừa : Phương pháp này được minh họa bằng

ví dụ sau :

Cho F = {AB → C, AB → D, B → C, D → EG, AB → G} Hãy xác định phụ thuộc hàm dư thừa trong F

B1 Ta chia các phụ thuộc hàm thành các cột theo nguyên tắc: Các phụ thuộc hàm

có vế phải giống nhau sẽ được xếp chung vào một cột:

Để chứng minh Y → Z là thừa ta chỉ việc chứng minh Y → X (vì nếu Y → X và

X → Z thì hiển nhiên ta có Y → Z, do vậy cho Y → Z là thừa) Do đó ta chỉ cần tính Y+nếu có chứa X tức là Y → Z thừa

Trang 24

Tµi liÖu tham kh¶o Trang 24

(tức phải loại bỏ nó ra khỏi F rồi mới tính Y+) Lý do thật đơn giản vì không thể sử dụng một vật dư thừa để chứng minh chính vật đó là dư thừa

Xét cột 1: Dễ dàng AB → B và ta kết luận AB → C là thừa

Xét cột 2: Dễ thấy AB → D, do vậy AB → G là thừa

Phương pháp trên tỏ ra khá phức tạp, tuy nhiên, nó giúp hình thành kỹ năng nhận biết phụ thuộc hàm dư thừa, và khi có kỹ năng đó, ta có khả năng nhận ra ngay phụ

thuộc hàm dư thừa mà không cần dùng tới phướng pháp Cần chú ý là phương pháp trên không cần trình bày vào bài làm

[2] Thuộc tính vế trái dư thừa: Phụ thuộc hàm AB → C có thuộc tính vế trái A

dư thừa nếu ta chứng minh được B → C

Cách xác định thuộc tính vế trái dư thừa: Phương pháp này cũng được minh họa bằng ví dụ sau :

Cho F = {A → C, AC → D, B → C, C → G, BG → E} Hãy xác định thuộc tính

vế trái dư thừa trong F

B1 : Chia các phụ thuộc hàm làm 2 cột theo nguyên tắc : các phụ thuộc hàm có vế trái là 1 thuộc tính được xếp vào một cột, cột còn lại là các phụ thuộc hàm có vế trái nhiều thuộc tính :

Trang 25

Xét BG → E, dễ thấy B+ chứa G, do đó G thừa

Tuy nhiên phương pháp trên chỉ giúp ta phát hiện ra thuộc tính vế trái dư thừa và thường không được trình bày vào bài làm Khi trình bày, xét XY → Z, nếu

(chỉ việc tính X+)

Khi trình bày, cần viết những gì? Xin xem ví dụ trong phần sau

[3] Tập phụ thuộc hàm tối thiểu: Tập F được gọi là tối thiểu nếu nó thoả mãn đồng thời 3 điều kiện sau:

- Không tồn tại phụ thuộc hàm trong F mà vế phải có nhiều thuộc tính

- Không tồn tại phụ thuộc hàm dư thừa trong F

- Không tồn tại phụ thuộc hàm trong F có thuộc tính vế trái dư thừa

Một vấn đề đặt ra là nếu F chưa tối thiểu thì hãy biến đổi F để thu được một tập phụ thuộc hàm tối thiểu từ F

Giải thuật tìm tập phụ thuộc hàm tối thiểu từ F gồm 3 bước:

B1: Nếu trong F có tồn tại một phụ thuộc hàm mà vế phải nhiều thuộc tính thì ta tách phụ thuộc hàm đó thành nhiều phụ thuộc hàm sao cho mỗi phụ thuộc hàm đều có

vế phải 1 thuộc tính Kết quả ta thu được tập F1

B2: Loại bỏ các phụ thuộc hàm dư thừa trong F1 ta thu được F2

B3: Loại bỏ các thuộc tính vế trái dư thừa trong F2 ta thu được F3

F3 là tập phụ thuộc hàm tối thiểu thu được từ F F3 gọi là một phủ tối thiểu của F

Ví dụ: Cho tập phụ thuộc hàm sau:

Hỏi F đã tối thiểu chưa? vì sao? nếu chưa hãy tìm một phủ tối thiểu của F

Trả lời:

F chưa tối thiểu vì còn tồn tại B → EG có vế phải 2 thuộc tính

Tìm Phủ tối thiểu của F:

B1: Tách các phụ thuộc hàm có vế phải nhiều thuộc tính thành các phụ thuộc hàm có vế phải 1 thuộc tính ta thu được:

Ngày đăng: 31/08/2012, 16:46

HÌNH ẢNH LIÊN QUAN

- Tập các thuộc tính của bảng quan hệ kết quả là tất cả các thuộc tính của quan hệ R và các thuộc tính của quan hệ S, xếp theo thứ tự: các thuộc tính của R trước, các thuộc  tính của S sau - Hướng dẫn ôn tập CSDL 2009
p các thuộc tính của bảng quan hệ kết quả là tất cả các thuộc tính của quan hệ R và các thuộc tính của quan hệ S, xếp theo thứ tự: các thuộc tính của R trước, các thuộc tính của S sau (Trang 5)
- Bảng kết quả có thể xuất hiện các bản ghi trùng nhau. Khi đó, phải loại bỏ các bản ghi trùng - Hướng dẫn ôn tập CSDL 2009
Bảng k ết quả có thể xuất hiện các bản ghi trùng nhau. Khi đó, phải loại bỏ các bản ghi trùng (Trang 6)
Thông thường, sau FROM là tên các bảng quan hệ (tables). Tuy nhiên, đôi khi ta có thể thay tên bảng quan hệ bằng một query tức là 1 câu truy vấn Select - Hướng dẫn ôn tập CSDL 2009
h ông thường, sau FROM là tên các bảng quan hệ (tables). Tuy nhiên, đôi khi ta có thể thay tên bảng quan hệ bằng một query tức là 1 câu truy vấn Select (Trang 17)
Phương pháp trên tỏ ra khá phức tạp, tuy nhiên, nó giúp hình thành kỹ năng nhận biết  phụ  thuộc  hàm dư  thừa,  và  khi  có  kỹ  năng  đó,  ta  có  khả năng  nhận  ra  ngay  phụ  thuộc hàm dư thừa mà không cần dùng tới phướng pháp - Hướng dẫn ôn tập CSDL 2009
h ương pháp trên tỏ ra khá phức tạp, tuy nhiên, nó giúp hình thành kỹ năng nhận biết phụ thuộc hàm dư thừa, và khi có kỹ năng đó, ta có khả năng nhận ra ngay phụ thuộc hàm dư thừa mà không cần dùng tới phướng pháp (Trang 24)
Vẽ một bảng n+2 cột và m+2 dòng:(với ví dụ trên là 9 cột và 5 dòng) - Hướng dẫn ôn tập CSDL 2009
m ột bảng n+2 cột và m+2 dòng:(với ví dụ trên là 9 cột và 5 dòng) (Trang 28)
Phương pháp trên cho phép giải quyết bài toán chỉ cần lập 1 bảng duy nhất. - Hướng dẫn ôn tập CSDL 2009
h ương pháp trên cho phép giải quyết bài toán chỉ cần lập 1 bảng duy nhất (Trang 29)
Bảng CT chứa thông tin về các công ty. Bảng NV chứa các thông tin về các nhân viên, mỗi nhân viên thuộc một công ty nào đó được xác định thông qua MaCT của nhân viên đó - Hướng dẫn ôn tập CSDL 2009
ng CT chứa thông tin về các công ty. Bảng NV chứa các thông tin về các nhân viên, mỗi nhân viên thuộc một công ty nào đó được xác định thông qua MaCT của nhân viên đó (Trang 37)
Bảng CT chứa thông tin về các công ty. Bảng NV chứa các thông tin về các nhân viên,  mỗi nhân viên thuộc một công ty nào đó được xác định thông qua MaCT của nhân viên đó - Hướng dẫn ôn tập CSDL 2009
ng CT chứa thông tin về các công ty. Bảng NV chứa các thông tin về các nhân viên, mỗi nhân viên thuộc một công ty nào đó được xác định thông qua MaCT của nhân viên đó (Trang 37)
Bài 1: Tạo các bảng CSDL sau (sử - Hướng dẫn ôn tập CSDL 2009
i 1: Tạo các bảng CSDL sau (sử (Trang 39)
- Bảng Sách chứa thông tin về  tất  cả  các  sách  có  trong  thư viện.  - Hướng dẫn ôn tập CSDL 2009
ng Sách chứa thông tin về tất cả các sách có trong thư viện. (Trang 42)
- Bảng NXB chứa thông tin về các nhà xuất  bản.  - Hướng dẫn ôn tập CSDL 2009
ng NXB chứa thông tin về các nhà xuất bản. (Trang 42)
B5: Sau khi tạo xong bảng ta có thể nhập dữ liệu cho bảng bằng cách chọn Tên bảng (ví - Hướng dẫn ôn tập CSDL 2009
5 Sau khi tạo xong bảng ta có thể nhập dữ liệu cho bảng bằng cách chọn Tên bảng (ví (Trang 45)
dụ bảng SinhVien - hình dưới đây) rồi kích phải chọn Open Table\ Return All rows. - Hướng dẫn ôn tập CSDL 2009
d ụ bảng SinhVien - hình dưới đây) rồi kích phải chọn Open Table\ Return All rows (Trang 45)
đây. Các thông tin của phiếu thanh toán được lưu chung trong bảng quan hệ PhieuTT:  - Hướng dẫn ôn tập CSDL 2009
y. Các thông tin của phiếu thanh toán được lưu chung trong bảng quan hệ PhieuTT: (Trang 47)
Bài 1: Một cửa hàng bán Gas dùng một phiếu thanh toán có dạng như hình dưới - Hướng dẫn ôn tập CSDL 2009
i 1: Một cửa hàng bán Gas dùng một phiếu thanh toán có dạng như hình dưới (Trang 47)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w