Câu lệnh truy vấn

Một phần của tài liệu Giáo trình Cơ sở dữ liệu (Nghề Kỹ thuật sửa chữa, lắp ráp máy tính Cao đẳng) (Trang 56 - 70)

5.2.1 Biểu thức

Là sự kết hợp một cách hợp lệ giữa các thuộc tính, các toán tử và các hàm. Sau đây sẽ là các toán tử và các hàm thông dụng nhất. (Chú ý: Cách sử dụng các toán tử và các hàm này còn tùy thộc vào câu lệnh SELECT của ngôn ngữ đƣợc sử dụng).

5.2.2 Câu lệnh SQL

a. Lệnh CREATE TABLE

Cú pháp: CREATE TABLE Tên_bảng(Tên_cột Loại_dữ_ liệu [Not

Null]),Primary Key( Tên khoá chính ),Foreign Key( Tên khoá ngoài),…); Trong đó:

- Tên_ b ng: là xâu kí tự không chứa các ký tự trống và không trùng với

các từ khoá

- Tên _cột: là xâu kí tự bất kì không chứa kí tự trống, tên cột trong một

bảng là duy nhất, thứ tự các cột không quan trọng

- Loại_dữ_liệu: gồm một số loại dữ liệu sau:

+ integer: số nguyên từ - 2147483648 đến 2147483647

+ smallinteger: số nguyên từ - 32768 đến 32767

+ decimal(n, p): số thập phân với độ dài tối đa là n kể cả p chữ số phần

thập phân (không tính dấu chấm thập phân). Từ khoá Number trong SQL đƣợc dùng trong dạng dữ liệu này.

+ Float: số dấu phẩy động

+ Char(n): xâu kí tự có độ dài cố định n, (n<=255)

+ Varchar(n): xâu ký tự có độ dài biến đổi, độ dài xâu có thể từ 0 đến n và

+ Longvarchar: xâu kí tự có độ dài không cố định. Độ dài này có thể từ 4Kbs đến 32 Kbs

+ Date: dữ liệu dạng ngày tháng

- Ví dụ:

+ Tạo bảng sinh viên nhƣ sau:CREATE TABLE sinhvien(Hodem Varchar(20) Not Null,Ten Varchar(15) Not Null,Nsinh Date,MaSV Varchar(5) Not Null,Que Varchar(25),Hocluc Decimal(4,2),PRIMARY KEY (MaSV));

+ Tạo bảng đề tài nhƣ sau:

CREATE TABLE detai(MaDT Varchar(10) Not Null,TenDT Varchar(30) Not Null,ChuNhiem Varchar(25),Kinhphi Decimal(10,2),KetQua Decimal(4,2),

PRIMARY KEY (MaDT));

+ Tạo bảng sinh viên đề tài nhƣ sau:

CREATE TABLE sv_detai(MaSV Varchar(5) Not Null,MaDT

Varchar(10) Not Null,NoiTT Varchar(30) Not Null,KM

Decimal(10,2),PRIMARY KEY (MaDT, MaSV),FOREIGN KEY (MaDT)

REFERENCES detai(MaDT),FOREIGN KEY (MaSV) REFERENCES

sinhvien(MaSV));

b. Lệnh INSERT INTO

- Cú pháp:INSERT INTO Tên_bảng VALUES(gia trị1, giá trị 2, …, giá trị n);

trong đó: giá trị1, giá trị 2, …, giá trị n là những giá trị để chèn vào các cột tƣơng ứng từ cột 1 đến cột n của một bản ghi trong bảng

- Chức năng:Chèn một bản ghi vào bảng

- Ví dụ:Chèn vào bảng sinh viên một bản ghi nhƣ sau:

INSERT INTO sinhvien

VALUES(“Nguyễn Hồng”, “Sơn”, “2/12/1976”,”A420”,”Hà Nội”,9.5); c. Lệnh DELETE

- Cú pháp:DELETE FROM Tên_bảng WHERE <Điều kiện xoá >;

- Chức năng:Xoá các bản ghi trong bảng thoả mãn điều kiện xoá - Ví dụ:Xóa những sinh viên có học lực <5 trong bảng sinh viên DELETE FROM sinhvien

d. Lệnh UPDATE

- Cú pháp:UPDATE Tên_bảng

SET Giá_trị_mới

WHERE <Điều kiện sửa đổi>;

- Chức năng:Sửa đổi giá trị các trƣờng của các bản ghi trong bảng - Ví dụ:Sửa học lực của sinh viên có MaSV = “B401” lên 8

UPDATE sinhvien SET HocLuc = 8

WHERE MaSV = “B401”; e. Lệnh SELECT

SELECT là một lệnh hỏi dữ liệu cơ bản trong SQL. Có rất nhiều mệnh đề con tuỳ chọn trong câu lệnh SELECT, vì vậy chúng ta sẽ làm quen lần lƣợt từng bƣớc một.

Cấu trúc SELECT – FROM – WHERE

Cấu trúc SELECT – FROM – WHERE là cấu trúc đơn giản nhất của SQL. - Cú pháp:

SELECT <Danh sách các cột> FROM <Danh sách bảng> WHERE <Điều kiện>; Trong đó:

+ <Danh sách các cột>: Là danh sách các cột hoặc biểu thức của các cột đƣợc đƣa vào kết quả truy vấn

+ <Danh sách bảng>: Là danh sách các bảng mà từ đó các cột đƣợc lấy ra + <Điều kiện>: Là một biểu thức logic xác định các bản ghi thoả mãn điều kiện của câu lệnh.

- Ví dụ 1: Hiển thị họ đệm, tên của bảng sinh viên: SELECT Hodem,Ten

FROM sinhvien;

- Ví dụ 2: Hiển thị họ đệm, tên, học lựccủa những sinh viên có học lực >=8 trong bảng sinh viên:

FROM sinhvien

WHERE HocLuc>=8;

f. Truy vấn sử dụng các hàm MAX, MIN, AVG, SUM, COUNT * Hàm MAX

- Chức năng:Cho giá trị lớn nhất trong cột

- Ví dụ:Hiển thị học lực cao nhất trong danh sách sinhvien SELECT Max(HocLuc) AS DiemCaoNhat

FROM sinhvien;

( AS để đặt tên cho cột Max(HocLuc)) * Hàm MIN

- Chức năng:Cho giá trị nhỏ nhất trong cột

- Ví dụ:Hiển thị học lực nhỏ nhất trong danh sách sinhvien SELECT Min(HocLuc) AS DiemThapNhat

FROM sinhvien; * Hàm AVG

- Chức năng: Cho giá trị tung bình cộng trong cột

- Ví dụ: Hiển thị học lực trung bình của cột học lực trong danh sách sinhvien

SELECT AVG(HocLuc) AS DiemTB FROM sinhvien;

* Hàm SUM

- Chức năng: Cho tổng giá trị trong cột

- Ví dụ: Hiển thị tổng học lực của cột học lực trong danh sách sinhvien SELECT SUM(HocLuc) TongHL

FROM sinhvien; * Hàm COUNT

- Chức năng: Cho biết số phần tử ( hàng) trong cột

- Ví dụ: Đếm số bản ghi (hàng) của cột học lực trong danh sách sinhvien SELECT COUNT(HocLuc) AS SoSinhVien

FROM sinhvien;

* Truy vấn sử dụng các phép AND, OR, IN, BETWEEN, NOT, ALL + AND: Phép và logic

+ OR: Phép hoặc logic + IN: Là phần tử của…

+ BETWEEN: Là phần tử giứa các phần tử … + NOT: Phép phủ định

+ ALL: Là tất cả những phần tử …

- Ví dụ 1: Đƣa ra danh sách những sinh viên có điểm >= 9 và có quê = “Hà Nội”

SELECT * FROM sinhvien

WHERE (diem>=9) AND ( que = “Hà Nội‟);

- Ví dụ 2: Đƣa ra danh sách những sinh viên có quê = “Thái Bình” hoặc “Thái Nguyên”

SELECT * FROM sinhvien

WHERE (que = “Thái Bình”) OR (que = “Thái Nguyên”);

- Ví dụ 3: Đƣa ra danh sách những nhân viên có kết quả là 8,9,10 SELECT *

FROM sv_dtai

WHERE KetQua IN (8, 9, 10);

- Ví dụ 4: Đƣa ra danh sách những sinh viên có kết quả nằm trong khoảng [8,10]

SELECT * FROM sv_dtai

WHERE KetQua BETWEEN 8 and 10;

- Ví dụ 5: Đƣa ra danh sách những sinh viên có quê không phải là “Hà Nội”

SELECT * FROM sinhvien

WHERE que NOT(SELECT que FROM sinhvien

WHERE (que = ”Hà Nội”));

- Ví dụ 6: Hiển thị tất cả kết quả của sinh viên SELECT ALL KetQua

FROM sv_detai;

Truy vấn thay đổi tên cột, tên bảng và hiển thị các cột từ nhiều bảng khác nhau.

- Muốn hiển thị các cột từ nhiều bảng khác nhau thì trong câu lệnh SELECT chúng ta phải làm nhƣ sau:

SELECT < Danh sách Tên_bang.Tên_cột> FROM <Danh sách Tên_bảng>

WHERE <Điều kiện nối bảng>;

- Có thể đặt tên các cột trong kết quả các truy vấn bằng cách đặt tên mới vào sau cột đƣợc chọn ngăn cách bởi từ khoá AS, tƣơng tự ta có thể đặt tên mới cho các bảng

Ví dụ: Hiển thị danh sách sinh viên bao gồm họ đệm, tên, kết quả từ bảng sinhviên và bảng sv_dt:

SELECT sinhvien.HoDem AS Ho, sinhvien.Ten AS Ten, sv_dt.KetQua AS KQ

FROM sinhvien AS sv, sv_dt AS sd WHERE (sv.MaSV = sd.MaSV);

Truy vấn sử dụng lƣợng từ DISTINCT/ ALL

* Để tránh tình trạng đƣa ra các bộ (hàng/bản ghi) trùng lặp trong các kết quả truy vấn thì SQL có lƣợng từ DISTINCT.

Ví dụ: Hiển thị các mã đề tài đƣợc sinh viên đăng ký trong bảng đề tài SELECT DISTINCT MaDT

FROM sinhvien;

* Để hiển thị tất cả các hàng (lấy cả các hàng có giá trị trùng nhau ) ta dùng lƣợng từ ALL

SELECT ALL MaDT FROM sv_dtai;`

Chú ý: Ngầm định (nếu không viết Distinct/All) thì máy hiểu là All g. Truy vấn sử dụng mệnh đề GROUP BY

- Để hiển thị các bản ghi theo nhóm ta dùng mệnh đề GROUP BY - Ví dụ: Hiển thị bảng đề tài theo nhóm mã đề tài

SELECT MaDT FROM detai

GROUP BY MaDT;

h. Truy vấn có sử dụng mệnh đề HAVING

- Mệnh đề HAVING thƣờng đƣợc sử dụng cùng mệnh đề GROUP BY. Sau HAVING là biểu thức điều kiện. Biểu thức điều kiện này không tác động vào toàn bảng đƣợc chỉ ra ở mệnh đề FROM mà chỉ tác động lần lƣợt từng nhóm các bản ghi đã chỉ ra tại mệnh đề GROUP BY.

- Ví dụ: Đếm xem có bao nhiêu đề tài đã đƣợc sinh viên đăng ký tham gia SELECT MaDT

FROM detai

GROUP BY MaDT HAVING COUNT(*);

i. Truy vấn có sử dụng mệnh đề ORDER BY

- Mệnh đề ORDER BY đƣợc dùng để sắp xếp dữ liệu trong bảng theo chiều tăng hoặc giảm (ASC hoặc DESC) của một cột nào đó.

- Mệnh đề ORDER BY nếu đứng sau GROUP BY thì miền tác động của sắp xếp là trong từng nhóm của cột đƣợc chỉ ra trong GROUP BY.

- Ví dụ: Sắp xếp bảng sinhvien theo chiều giảm dần của cột học lực SELECT *

FROM sinhvien

ORDER BY hl DESC; Truy vấn lồng nhau

- Trong lệnh SELECT có thể đƣợc lồng nhiều mức - Ví dụ1: Hiển thị sinh viên có học lực cao nhất

SELECT * FROM sinhvien

WHERE hl = (SELECT MAX (hl) FROM sinhvien);

- Ví dụ 2: Hiển thị hođệm,tên của những sinh viên có kết quả >= 9 và có tên đề tài là Access

SELECT hodem,ten FROM sinhvien

WHERE MaSV IN (SELECT MaSV FROM sv_dtai

WHERE (kq >= 9) AND ( MaDT IN ( SELECT MaDT FROM detai

WHERE tendt = “Access”)));

BÀI TẬP CHƢƠNG 5

Bài 1: Trình bày cú pháp và chức năng của câu lệnh SQL. Bài 2: QUẢN LÝ THI TỐT NGHIỆP PTCS

Một phòng giáo dục huyện muốn lập một hệ thống thông tin để quản lý việc làm thi tốt nghiệp phổ thông cơ sở. Công việc làm thi đƣợc tổ chức nhƣ sau:

Lãnh đạo phòng giáo dục thành lập nhiều hội đồng thi (mỗi hội đồng thi gồm một trƣờng hoặc một số trƣờng gần nhau). Mỗi hội đồng thi có một mã số duy nhất (MAHĐT), một mã số hội đồng thi xác định tên hội đồng thi(TENHĐT), họ tên chủ tịch hội đồng(TENCT), địa chỉ (ĐCHĐT),điện thoại(ĐTHĐT).

Mỗi hội đồng thi đƣợc bố trí cho một số phòng thi, mỗi phòng thi có một số hiệu phòng(SOPT) duy nhất, một phòng thi xác định địa chỉ phòng thi (ĐCPT). Số hiệu phòng thi đƣợc đánh số khác nhau ở tất cả các hội đồng thi.

Giáo viên của các trƣờng trực thuộc phòng đƣợc điều động đến các hội đồng để coi thi, mỗi trƣờng có thể có hoặc không có thí sinh dự thi, mỗi trƣờng có một mã trƣờng duy nhất (MATR), mỗi mã trƣờng xác định một tên trƣờng(TENTR),địa chỉ (ĐCTR), loại hình đào tạo (LHĐT) (Công lập, chuyên, bán công, dân lập, nội trú,…). Giáo viên của một trƣờng có thể làm việc tại nhiều hội đồng thi. Một giáo viên có một mã giáo viên(MAGV), một mã giáo

viên xác định tên giáo viên (TENGV), chuyên môn giảng dạy (CHUYENMON), chức danh trong hội đồng thi(CHUCDANH)

Các thí sinh dự thi có một số báo danh duy nhất(SOBD), mỗi số báo danh xác định tên thí sinh(TENTS), ngày sinh (NGSINH), giới tính (PHAI), mỗi thí sinh đƣợc xếp thi tại một phòng thi nhất định cho tất cả các môn, mỗi thí sinh có thể có chứng chỉ nghề (CCNGHE) hoặc không (thuộc tính CCNGHE kiểu chuỗi, CCNGHE=”x” nếu thí sinh có chứng chỉ nghề và CCNGHE bằng rỗng nếu thí sinh không có chứng chỉ nghề).Thí sinh của cùng một trƣờng chỉ dự thi tại một hội đồng thi.

Mỗi môn thi có một mã môn thi duy nhất(MAMT), mỗi mã môn thi xác định tên môn thi(TENMT). Giả sử toàn bộ các thí sinh đều thi chung một số môn do sở giáo dục quy định. Mỗi môn thi đƣợc tổ chức trong một buổi của một ngày nào đó.

Ứng với mỗi môn thi một thí sinh có một điểm thi duy nhất(ĐIEMTHI) Dựa vào phân tích ở trên, giả sử ta có lƣợc đồ CSDL sau:

Q1: HĐ(MAHĐT,TENHĐT, TENCT, ĐCHĐT,ĐTHĐT)

Q2: PT(SOPT,ĐCPT,MAHĐT)

Q3: TS(SOBD, TENTS,NGSINH,PHAI,CCNGHE, MATR,SOPT)

Q4: MT(MAMT,TENMT,BUOI,NGAY)

Q5:GV(MAGV,TENGV,CHUYENMON,CHUCDANH,MAHĐT,MATR)

Q6: TR(MATR,TENTR,ĐCTR,LHĐT)

Q7: KQ(SOBD,MAMT,ĐIEMTHI)

Yêu cầu:

a) Hãy xác định khóa cho từng lƣợc đồ quan hệ.

b) Tìm tất cả các ràng buộc toàn vẹn có trong CSDL trên.

c) Dựa vào lƣợc đồ CSDL đã thành lập, hãy thực hiện các câu hỏi sau đây bằng ngôn ngữ đại số quan hệ.

Bài 3: Danh sách các thí sinh thi tại phòng thi có số hiệu phòng thi (SOPT) là “100”. Yêu cầu các thông tin:SOBD,TENTS,NGSINH,TENTR

Bài 4: Kết quả của môn thi có mã môn thi (MAMT) là “T” của tất cả các thí sinh có mã trƣờng(MATR) là “NTMK”, kết quả đƣợc sắp theo chiều giảm dần của điểm thi(ĐIEMTHI). Yêu cầu các thông tin:SOBD,TENTS, ĐIEMTHI

Bài 5: Kết quả thi của một học sinh có SOBD là MK01. Yêu cầu : TENMT,ĐIEMTHI

Bài 6: Tổng số thí sinh có chứng chỉ nghề(CCNGHE) của mỗi trƣờng, thông tin cần đƣợc sắp theo chiều tăng dần của TENTR. Yêu cầu các thông tin: MATR, TENTR, SOLUONGCC

Chƣơng 6

Lý thuyết thiết kế cơ sở dữ liệu 6.1 Phụ thuộc hàm

6.1.1 Khái niệm phụ thuộc hàm

Phụ thuộc hàm (functional dependancy) là một công cụ dùng để biểu diễn một cách hình thức các ràng buộc toàn vẹn. Phƣơng pháp biểu diễn này có rất nhiều ƣu điểm, và đây là một công cực kỳ quan trọng, gắn chặt với lý thuyết thiết kế cơ sở dữ liệu.

Trong chƣơng này chúng ta sẽ tìm hiểu về lý thuyết thiết kế cơ sở dữliệu quan hệ, mà bắt đầu là phụ thuộc hàm và một sốứng dụng trong việc giải quyết các bài toán nhƣ: tìm khoá, tìm phủ tối thiểu, xác định dạng chuẩn. Trong chƣơng tới chúng ta sẽ tiếp tục tìm hiểu về cách thức chuẩn hoá một cơ sở dữ liệu.

6.1.2 Định nghĩa phụ thuộc hàm

Cho quan hệ phanCong sau:

phanCong (PHICONG, MAYBAY, NGAYKH, GIOKH)

Cushing 83 9/8 10:15a Cushing 116 10/8 1:25p Clark 281 8/8 5:50a Clark 301 12/8 6:35p Clark 83 11/8 10:15a Chin 83 13/8 10:15a Chin 116 12/8 1:25p Copely 281 9/8 5:50a Copely 281 13/8 5:50a Copely 412 15/8 1:25p

Quan hệ phanCong diễn tả phi công nào lái máy bay nào và máy bay khởi hành vào thời gian nào. Không phải sự phối hợp bất kỳ nào giữa phi công, máy bay và ngày giờ khởi hành cũng đều đƣợc chấp nhận mà chúng có các điều kiện ràng buộc qui định sau:

+ Mỗi máy bay có một giờ khởi hành duy nhất.

+ Nếu biết phi công, biết ngày giờ khởi hành thì biết đƣợc máy bay do phi công ấy lái.

Các ràng buộc này là các ví dụ về phụ thuộc hàm và đƣợc phát biểu lại nhƣ sau: + MAYBAY xác định GIOKH + {PHICONG,NGAYKH,GIOKH} xác định MABAY + {MAYBAY,NGAYKH} xác định PHICONG hay

+ GIOKH phụ thuộc hàm vào MAYBAY

+ MABAY phụ thuộc hàm vào {PHICONG,NGAYKH,GIOKH} + PHICONG phụ thuộc hàm vào {MAYBAY,NGAYKH}

và đƣợc ký hiệu nhƣ sau: + {MAYBAY} GIOKH

+ {PHICONG,NGAYKH,GIOKH} MABAY + {MAYBAY,NGAYKH} PHICONG

Trong ký hiệu trên ta đã ký hiệu MAYBAY thay cho {MAYBAY}.

Một cách tổng quát:

Định nghĩa phụ thuộc hàm

Q(A1,A2,…,An) là lƣợc đồ quan hệ. X, Y là hai tập con của Q+

={A1,A2,…,An}.r là quan hệ trên Q. t1,t2 là hai bộ bất kỳ của r. X Y (t1.X = t2.X t1.Y = t2.Y)

(Ta nói X xác định Y hay Y phụ thuộc hàm vào X (X functional determines Y,Y functional dependent on X )

Tính chất:

+ Phụ thuộc hàm X  đúng với mọi quan hệ r

+ Phụ thuộc hàm  Y chỉ đúng trên quan hệ r có cùng giá trị trên Y. Ví dụ:

Quan hệ sau thỏa mãn phụ thuộc hàm  GIOKH

phanCong (PHICONG, MAYBAY, NGAYKH, GIOKH)

Cushing 83 9/8 10:15a

Clark 281 8/8 10:15a Clark 301 12/8 10:15a Clark 83 11/8 10:15a Chin 83 13/8 10:15a Chin 116 12/8 10:15a Copely 281 9/8 10:15a Copely 281 13/8 10:15a Copely 412 15/8 10:15a

Trên thực tế không có quan hệ r nào thỏa tính chất trên nên từ đây về sau nếu không nói rõ thì với một quan hệ r bất kỳ ta luôn xem phụ thuộc hàm  Y luôn luôn không thỏa trên r.

6.1.3 Phụ thuộc hàm hiển nhiên

Hệ qu : Nếu X Y thì X Y.

Chứng minh:

Giả sử t1.X = t2.X do X  Y nên t1.Y = t2.Y theo định nghĩa suy ra X  Y Trong trƣờng hợp này X  Y đƣợc gọi là phụ thuộc hàm hiển nhiên.

Ví dụ phụ thuộc hàm X  X là phụ thuộc hàm hiển nhiên.

Vậy với r là quan hệ bất kỳ, F là tập phụ thuộc hàm thỏa trên r, ta luôn có F  {các phụ thuộc hàm hiển nhiên}

6.1.4 Thuật toán Satifies

Cho quan hệ r và X, Y là hai tập con của Q+. Thuật toán SATIFIES sẽ trả về trị true nếu X  Y ngƣợc lại là false

SATIFIES

Vào: quan hệ r và hai tập con X,Y Ra: true nếu X  Y, ngƣợc lại là false SATIFIES(r,X,Y)

1. Sắp các bộ của quan hệ r theo X để các giá trị giống nhau trên X nhóm lại với nhau

2. Nếu tập các bộ cùng giá trị trên X cho các giá trị trên Y giống nhau thì trả về true ngƣợc lại là False

Ví dụ 1: SATIFIES(phanCong,MAYBAY,GIOKH)

phanCong (PHICONG, MAYBAY, NGAYKH, GIOKH)

Cushing 83 9/8 10:15a Clark 83 11/8 10:15a Chin 83 13/8 10:15a Cushing 116 10/8 1:25p Chin 116 12/8 1:25p Clark 281 8/8 5:50a Copely 281 9/8 5:50a Copely 281 13/8 5:50a Clark 301 12/8 6:35p Copely 412 15/8 1:25p

cho kết quả là true nghĩa là MAYBAYGIOKH

Một phần của tài liệu Giáo trình Cơ sở dữ liệu (Nghề Kỹ thuật sửa chữa, lắp ráp máy tính Cao đẳng) (Trang 56 - 70)