Hệ quản trị cơ sở dữ liệu - Chương 2: SQL

MỤC ĐÍCH

Giới thiệu một hệCSDL chuẩn, SQL, các thành phần cơbản của của nó.

YÊU CẦU

Hiểu các thành phần cơbản của SQL-92

Hiểu và vận dụng phương pháp "dịch" từcâu vấn tin trong ngôn ngữtựnhiên sang ngôn

ngữSQL và ngược lại

Hiểu và vận dụng cách thêm (xen), xóa dữliệu

pdf17 trang | Chuyên mục: SQL Server | Chia sẻ: dkS00TYs | Lượt xem: 2494 | Lượt tải: 1download
Tóm tắt nội dung Hệ quản trị cơ sở dữ liệu - Chương 2: SQL, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
rị của 
thuộc tính và số thành phần của bộ phải bằng với ngôi của quan hệ. 
“Xen vào quan hệ Account một bộ có số tài khoản là A-9732, số cân đối là 1200$ và tài khoản 
này được mở ở chi nhánh Perryridge” 
 INSERT INTO Account 
 VALUES (‘Perryridge’, ‘A-9732’, 1200); 
CHƯƠNG II SQL trang 28
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
Trong ví dụ này thự tự các giá trị thuộc tính cần xen trùng khớp với thứ tự các thuộc tính trong sơ 
đồ quan hệ. SQL cho phép chỉ rõ các thuộc tính và các giá trị tương ứng cần xen: 
 INSERT INTO Account (Branch_name, Account_number, Balance) 
 VALUES (‘Perryridge’, ‘A-9732’, 1200); 
 INSERT INTO Account (Account_number, Balance, Branch_name) 
 VALUES (‘A-9732’, 1200, ‘Perryridge’); 
“Cấp cho tất cả các khách hàng vay ở chi nhánh Perryridge một tài khoản với số cân đối là 
200$ như một quà tặng sử dụng số vay như số tài khoản“ 
 INSERT INTO Account 
 SELECT Branch_name, Loan_number, 200 
 FROM Loan 
 WHERE Branch_name = ‘Perryridge’ 
 INSERT INTO Depositor 
 SELECT Customer_name, Loan_number 
 FROM Borrower, Loan 
 WHERE Borrower.Loan_number = Loan.Loan_number AND 
 Branch_name = ‘Perryridge’ 
CẬP NHẬT (Update) 
Câu lệnh UPDATE cho phép thay đổi giá trị thuộc tính của các bộ 
“Thêm lãi hàng năm vào số cân đối với tỷ lệ lãi suất 5%” 
 UPDATE Account 
 SET Balance = Balance*1.05 
Giả sử các tài khoản có số cân đối > 10000$ được hưởng lãi suất 6%, các tài khoản có số cân đối 
nhỏ hơn hoặc bằng 10000 được hưởng lãi suất 5% 
 UPDATE Account 
 SET Balance = Balance*1.06 
 WHERE Balance > 10000 
 UPDATE Account 
 SET Balance = Balance*1.05 
 WHERE Balance <= 10000 
SQL92 đưa vào cấu trúc CASE như sau: 
 CASE 
 WHEN P1 THEN Result1
 WHEN P2 THEN Result2
 ... 
 WHEN Pn THEN Resultn 
 ELSE Result0
 END 
trong đó Pi là các vị từ, Resulti là các kết quả trả về của hoạt động CASE tương ứng với vị từ Pi 
đầu tiên thỏa mãn. Nếu không vị từ Pi nào thỏa mãn CASE trả về Result0. 
 Với cấu trúc CASE như vậy ta có thể viết lại yêu cầu trên như sau: 
 UPDATE Account 
 SET Balance = CASE 
 WHEN Balance > 10000 THEN Balance*1.06 
 ELSE Balance*1.05 
 END 
“Trả 5% lãi cho các tài khoản có số cân đối lớn hơn số cân đối trung bình” 
 UPDATE Account 
CHƯƠNG II SQL trang 29
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
 SET Balance = Balance*1.05 
 WHERE Balance > SELECT AVG(Balance) 
 FROM Account 
CÁC QUAN HỆ NỐI 
SQL92 cung cấp nhiều cơ chế cho nối các quan hệ bao hàm nối có điều kiện và nối tự nhiên cũng 
như các dạng của nối ngoài. 
Loan INNER JOIN Borrower 
ON Loan.Loan_number = Borrower.Loan_number 
Nối quan hệ Loan và quan hệ Borrower với điều kiên: 
Loan.Loan_number = Borrower.Loan_number 
Quan hệ kết quả có các thuộc tính của quan hệ Loan và các thuộc tính của quan hệ Borrower (như 
vậy thuộc tính Loan_number xuất hiện 2 lần trong quan hệ kết quả). 
 Để đổi tên quan hệ (kết quả) và các thuộc tính, ta sử dụng mệnh đề AS 
Loan INNER JOIN Borrower 
 ON Loan.Loan_number = Borrower.Loan_number 
 AS LB(Branch, Loan_number, Amount, Cust, Cust_Loan_number) 
Loan LEFT OUTER JOIN Borrower 
ON Loan.Loan_number = Borrower.Loan_number 
Phép nối ngoài trái được tính như sau: Đầu tiên tính kết quả của nối trong INNER JOIN. Sau đó 
đối với mỗi bộ t của quan hệ trái (Loan) không tương xứng với bộ nào trong quan hệ bên phải 
(borrower) khi đó thêm vào kết quả bộ r gồm các giá trị thuộc tính trái là các giá trị thuộc tính của 
t, các thuộc tính còn lại (phải) được đặt là null. 
Loan NATURAL INNER JOIN Borrower 
Là nối tự nhiên của quan hệ Loan và quan hệ Borrower (thuộc tính trùng tên là Loan_number). 
NGÔN NGỮ ĐỊNH NGHĨA DỮ LIỆU (DDL) 
DDL SQL cho phép đặc tả: 
o Sơ đồ cho mỗi quan hệ 
o Miền giá trị kết hợp với mỗi thuộc tính 
o các ràng buộc toàn vẹn 
o tập các chỉ mục được duy trì cho mỗi quan hệ 
o thông tin về an toàn và quyền cho mỗi quan hệ 
o cấu trúc lưu trữ vật lý của mỗi quan hệ trên đĩa 
CÁC KIỂU MIỀN TRONG SQL 
SQL-92 hỗ trợ nhiều kiểu miền trong đó bao hàm các kiểu sau: 
o char(n) / charater: chuỗi ký tự dộ dài cố định, với độ dài n được xác định bởi 
người dùng 
o vachar(n) / character varying (n): chuỗi ký tự độ dài thay đổi, với độ dài tối đa 
được xác dịnh bởi người dung là n 
o int / integer: tập hữu hạn các số nguyên 
o smallint: tập con của tập các số nguyên int 
o numeric(p, d): số thực dấu chấm tĩnh gồm p chữ số (kể cả dấu) và d trong p chữ 
số là các chữ số phần thập phân 
o real, double precision: số thực dấu chấm động và số thực dấu chấm động chính 
xác kép 
o float(n): số thực dấu chấm động với độ chính xác được xác định bởi người dùng ít 
nhất là n chữ số thập phân 
CHƯƠNG II SQL trang 30
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
o date: kiểu năm tháng ngày (YYYY, MM, DD) 
o time: kiểu thời gian (HH, MM, SS) 
SQL-92 cho phép định nghĩa miền với cú pháp: 
 CREATE DOMAIN 
 Ví dụ: CREATE DOMAIN hoten char(30); 
Sau khi đã định nghĩa miền với tên hoten ta có thể sử dụng nó để định nghĩa kiểu của các thuộc 
tính 
ĐỊNH NGHĨA SƠ ĐỒ TRONG SQL. 
Lệnh CREATE TABLE với cú pháp 
CREATE TABLE ( 
 , 
 ... 
 , 
 , 
 ... 
 ) 
Các ràng buộc toàn vẹn cho phép bao gồm: 
 primary key ( ) A,...,A,A iii m21
và 
 check(P) 
Đặc tả primary key chỉ ra rằng các thuộc tính tạo nên khoá chính của quan hệ. 
Mệnh đề check xác định một vị từ P mà mỗi bộ trong quan hệ phải thoả mãn. 
A,...,A,A iii m21
Ví dụ: 
CREATE TABLE customer ( 
 customer_name CHAR(20) not null, 
 customer_street CHAR(30), 
 customer_city CHAR(30), 
 PRIMARY KEY(customer_name)); 
CREATE TABLE branch ( 
 branch_name CHAR(15) not null, 
 branch_city CHAR(30), 
 assets INTEGER, 
 PRIMARY KEY (branch_name), 
 CHECK (assets >= 0)); 
CREATE TABLE account ( 
 account_number CHAR(10) not null, 
 branch_name CHAR(15), 
 balance INTEGER, 
 PRIMARY KEY (account_number), 
 CHECK (balance >= 0)); 
CREATE TABLE depositor ( 
 customer_name CHAR(20) not null, 
 account_number CHAR(10) not null, 
 PRIMARY KEY (customer_name, account_namber)); 
Giá trị null là giá trị hợp lệ cho mọi kiểu trong SQL. Các thuộc tính được khai báo là primary key 
đòi hỏi phải là not null và duy nhất. do vậy các khai báo not null trong ví dụ trên là dư (trong 
SQL-92). 
CREATE TABLE student ( 
CHƯƠNG II SQL trang 31
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
 name CHAR(15) not null, 
 student_ID CHAR(10) not null, 
 degree_level CHAR(15) not null, 
 PRIMARY KEY (student_ID), 
 CHECK (degree_level IN (‘Bachelors’, ‘Masters’, ‘Doctorats’)); 
• Xoá một quan hệ khỏi CSDL sử dụng lệnh Drop table với cú pháp: 
DROP TABLE 
• Thêm thuộc tính vào bảng đang tồn tại sử dụng lệnh Alter table với cú pháp: 
ALTER TABLE ADD 
• Xoá bỏ một thuộc tính khỏi bảng đang tồn tại sử dụng lệnh Alter table với cú pháp: 
ALTER TABLE DROP 
SQL NHÚNG (Embedded SQL) 
Một ngôn ngữ trong đó các vấn tin SQL được nhúng gọi là ngôn ngữ chủ (host language), cấu 
trúc SQL cho phép trong ngôn ngữ chủ tạo nên SQL nhúng. Chương trình được viết trong ngôn 
ngữ chủ có thể sử dụng cú pháp SQL nhúng để truy xuất và cập nhật dữ liệu được lưu trữ trong 
CSDL. 
BÀI TẬP CHƯƠNG II 
II.1. Xét CSDL bảo hiểm sau: 
 person(ss#, name, address): Số bảo hiểm ss# sở hữu bởi người tên name ở địa chỉ 
address 
 car(license, year, model): Xe hơi số dăng ký license, sản xuất năm year, nhãn 
hiệu Model 
 accident(date, driver, damage_amount): tai nạn xảy ra ngày date, do người lái 
driver, mức hư hại damage_amount 
 owns(ss#, license): người mang số bảo hiểm ss# sở hữu chiếc xe mang số đăng ký 
license 
 log(license, date, driver): ghi sổ chiếc xe mang số đăng ký license, bị tai nạn ngày 
do người lái driver 
các thuộc tính được gạch dưới là các primary key. Viết trong SQL các câu vấn tin sau: 
1. Tìm tổng số người xe của họ gặp tai nạn năm 2001 
2. Tìm số các tai nạn trong đó xe của"John"liên quan tới 
3. Thêm khách hàng mới: ss# =”A-12345”, name ="David”, address ="35 Chevre 
Road”, license ="109283”, year =”2002”, model ="FORD LASER"vào CSDL 
4. xoá các thông tin lien quan dến xe model "MAZDA"của"John Smith” 
5. Thêm thông tin tai nạn cho chiếc xe"TOYOTA"của khách hàng mang số bảo hiểm 
số"A-84626” 
CHƯƠNG II SQL trang 32
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
II.2. Xét CSDL nhân viên: 
employee (E_name, street, city): Nhân viên có tên E_name, cư trú tại phố street, 
trong thành phố city 
works (E_name, C_name, salary): Nhân viên tên E_name làm việc cho công ty 
C_name với mức lương salary 
 copany (C_name, city): Công ty tên C_name đóng tại thành phố city 
 manages(E_name, M_name): Nhân viên E_name dưới sự quản lý của nhân viên 
M_name 
 Viết trong SQL các câu vấn tin sau: 
1. Tìm tên của tất cả các nhân viên làm việc cho First Bank 
2. Tìm tên và thành phố cư trú của các nhân viên làm việc cho First Bank 
3. Tìm tên, phố, thành phố cư trú làm việc cho First Bank hưởng mức lương > 
10000$ 
4. Tìm tất cả các nhân viên trong CSDL sống trong cùng thành phố với công ty mang 
họ làm việc cho 
5. Tìm tất cả các nhân viên sông trong cùng thành phố, cùng phố với người quản lý 
của họ 
6. Tìm trong CSDL các nhân viên không làm việc cho First Bank 
7. Tìm trong CSDL, các nhân viên hưởng mức lương cao hơn mọi nhân viên của 
Small Bank 
8. Giả sử một công ty có thể đóng trong một vaì thành phố. Tìm tất cả các công ty 
đóng trong mỗi thành phố trong đó Small Bank đóng. 
9. Tìm tất cả các nhân viên hưởng múc lương cao hơn mức lương trung bình của 
công ty họ làm việc 
10. Tìm công ty có nhiều nhân viên nhất 
11. Tìm công ty có tổng số tiền trả lương nhỏ nhất 
12. Tìm tất cả các công ty có mức lương trung bình cao hơn mức luong trung bình của 
công ty First Bank 
13. Thay đổi thành phố cư trú của nhân viên"Jones"thành NewTown 
14. Nâng lương cho tất cả các nhân viên của First Bank lên 10% 
15. nâng lương cho các nhà quản lý của công ty First Bank lên 10% 
16. Xoá tất cả các thông tin liên quan tới cong ty Bad Bank 
CHƯƠNG II SQL trang 33
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU 
CHƯƠNG II SQL trang 34

File đính kèm:

  • pdfHQT_CSDL_chuong2.pdf
Tài liệu liên quan