Tải bản đầy đủ (.docx) (7 trang)

Lý thuyết về câu lệnh SQL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (176.94 KB, 7 trang )

Lý thuyết về câu lệnh SQL
by nguyenduc on 1/1/2010, 18:14

SQL là ngôn ngữ truy vấn dựa trên đại số quan hệ. Câu lệnh của SQL dùng
để rút trích dữ liệu của một một hay nhiều quan hệ. Kết quả của một câu
lệnh SQL (truy vấn) là một quan hệ. Để đơn giản trong cách trình bày,
ta xem quan hệ mà câu truy vấn sử dụng để tạo ra quan hệ khác gọi là
quan hệ nguồn, quan hệ kết quả của truy vấn là quan hệ đích.
I. Truy vấn định nghĩa dữ liệu (data definition query)
Tạo lược đồ quan hệ rSV:
+ Create Table rSV (MASV Text (10) CONSTRAINT khoaChinh PRIMARY KEY,HOTEN Text
(30), NU YesNo, NGAYSINH Date, MALOP Text (10), TINH Text (50), HOCBONG Double )
Tạo lược đồ quan hệ rKQ:
+ Create Table rKQ (MASV text (10),MAMH Text (10), DIEMTHI Double,CONSTRAINT
khoaChinh PRIMARY KEY (MASV,MAMH) )
Chú ý: Hai cách tạo trên cho ta thấy hai cách tạo khóa: khóa chỉ gồm một
thuộc tính và khóa có nhiều thuộc tính
Thêm cột DTHOAI có kiểu dữ liệu text 20 ký tự vào lược đồ quan hệ rSV:
+ Alter Table rSV Add Column DTHOAI Text (20)
Sửa kiểu kiểu dữ liệu của một cột:
+ Alter Table rSV Alter Column DTHOAI double
Xóa cột của một lược đồ đã có:
+ Alter Table rSv Drop Column DTHOAI
Xóa ràng buộc khóa chính:
+ Alter Table rSv Drop Constraint khoaChinh
Thêm ràng buộc khóa chính:
+ Alter Table rSv Add Constraint khoaChinh Primary Key (MASV)
Thêm ràng buộc miền giá trị:
+ ALTER TABLE doc_exd WITH NOCHECK ADD CONSTRAINT exd_check CHECK
(column_a > 1)
II. Truy vấn chọn (select query)


Khi có nhu cầu thể hiện các dòng dữ liệu của một quan hệ hay của nhiều quan hệ dưới dạng một
quan hệ có số cột và số dòng theo ý muốn như bảng điểm của sinh viên, danh sách
sinh viên thì ta sử dụng truy vấn chọn.
Để truy vấn chọn ta sử dụng câu lệnh SQL sau:
Select [Distinct|Top n[%]] field1 [As alias1][,field2 [As alias2][,...]]
From table1 [Inner Join table2 On table1.field1 table2.field2] ...


[Where dieuKien]
[Order By field1[Asc|Desc][,field2[Asc|Desc]][,...]]];
Distinct: loại bỏ các bộ trùng trong quan hệ đích
Top n[%]: Chọn n hay n% mẫu tin đầu tiên.
table: Tên table hay query chứa dữ liệu.
field: Tên field
hay một biểu thức.
Alias: Trường hợp field là một biểu thức thì là một tên mới của biểu thức.
Inner Join: mỗi mẫu tin của table1 nối với bất kỳ mẫu tin nào của table2 có dữ liệu của field1
thỏa mãn điều kiện so sánh với dữ liệu của field2 tạo thành mẫu tin của query.
điều kiện: Biểu thức mà dữ liệu mẫu tin phải thỏa mãn
Chú ý:
Khi nêu rõ thuộc tính đó thuộc về quan hệ nào ta viết theo cú pháp tên QuanHệ.tênThuộcTính.
Ví dụ: Lập danh sách sinh viên gồm
MASV,HOTEN,HOCBONG
SELECT MASV,HOTEN,HOCBONG
FROM Sv;
Ví dụ: Lập danh sách sinh viên nữ, có học bổng thuộc có mã lớp là “CĐTH2B”.
SELECT MASV,HOTEN,HOCBONG
FROM Sv
WHERE NU And MALOP = 'CĐTH2B' And HOCBONG > 0;
Ví dụ: Lập danh sách sinh viên gồm MASV,HOTEN,HOCBONG trong đó học bổng được sắp

giảm dần
SELECT MASV,HOTEN,HOCBONG
FROM Sv
ORDER BY HOCBONG DESC;
Ví du:
Lập danh sách sinh viên gồm MASV,HOTEN,TENLOP
SELECT MASV,HOTEN,TENLOP
FROM Sv Inner Join Lop On Sv.MALOP=Kh.LOP;
Ví dụ: Lập danh sách sinh viên có MASV,HOTEN,NU,NGAYSINH,DIEMTHI với điểm
thi môn ‘CSDL’ >= 8
SELECT Kq.MASV,HOTEN,NU,NGAYSINH,DIEMTHI
FROM Kq Inner Sv On Kq.MASV = Sv.MaSV
WHERE MAMH = 'CSDL' AND
DIEMTHI >= 8;
Ví dụ: Lập danh sách sinh viên có ho là “NGUYEN”
SELECT *
FROM Sv
WHERE HOTEN Like “NGUYEN*”;


III. Truy vấn nhóm dữ liệu (Select query có group by)
Khi có nhu cầu chia các bộ theo từng nhóm rồi tính toán trên từng nhóm này như tính điểm trung
bình của tất cả các môn học của từng sinh viên, hay là cần tính số lượng sinh viên của mỗi lớp ,
hay là cần biết tổng số môn mà một sinh viên đã đăng ký học thì ta sử dụng truy vấn theo nhóm.
Để truy vấn cộng nhóm ta sử dụng câu lệnh SQL sau:
Select [Distinct|Top n[%]] field1 [As alias1][,field2 [As alias2][,...]]
From table1 [Inner Join table2 On table1.field1 table2.field2] ...
[Where dieuKienLocMauTinNguon]
[Group By fieldGroupBy[,fieldGroupBy[,...]]
[Having dieuKienLocMauTinTongHop]

[Order By field1[Asc|Desc][,field2[Asc|Desc]][,...]]];
điềuKiện LọcMẫuTinNguồn:
điều kiện mà các mẫu tin nguồn phải thỏa mãn (phép chọn)
field GroupBy: tên field mà các mẫu tin có dữ liệu giống nhau trên ấy được xếp vào
cùng nhóm. điềuKiệnLọcMẫuTinTổngHợp: điều kiện mà các mẫu tin tổng hợp
phải thỏa mãn (phép chọn)
Ví du: Lập danh sách sinh viên có đăng ký ít nhất là ba môn học
SELECT Kq.MASV,HOTEN,NU,NGAYSINH,COUNT(MAMH) As SLMH
FROM Sv Inner Join Kq On Sv.MASV = Kq.MASV
GROUP BY Kq.MASV,HOTEN,NU,NGAYSINH
HAVING COUNT(MAMH)>=3;
Ví du: Đếm số lượng sinh viên nữ của mỗi khoa
SELECT Kh.MAKHOA,TENKHOA,COUNT(Kh.MAKHOA) AS SOLUONG
FROM (Sv Inner Join Lop On Sv.MALOP = LOP.MALOP) INNER JOIN Kh On
Lop.MAKHOA = Kh.MAKHOA
WHERE NU
GROUP BY Kh.MAKHOA,TENKHOA;
IV. Truy vấn lồng nhau (nested query, sub query)
Là những câu lệnh truy vấn mà trong thành phần WHERE hay HAVING có chứa thêm một câu
lệnh Select khác. Câu lệnh select khác này gọi là subquery.
Ta lồng câu Select vào phần Where hay Having theo cú pháp sau:
o bieuthuc toanTuSoSanh [ANY | ALL | SOME] (cauLenhSQL) ANY, SOME là bất kỳ, ALL là
tất cả Các mẫu tin của query chính thỏa mãn toán tử so sánh với bất kỳ/ tất cả mẫu tin nào của
subquery
o bieuThuc [NOT] IN (cauLenhSQL) Các mẫu tin của query chính có giá trị bằng với một giá
trị trong subquery
o [NOT] EXISTS (cauLenhSQL).
Các mẫu tin của query chính thỏa mãn khi subquery có mẫu tin



Ví du: Lập danh sách sinh viên có học bổng cao nhất
SELECT *
FROM Sv
WHERE HOCBONG>=ALL(SELECT HOCBONG FROM SV);
Ví du: Lập danh sách
sinh viên có điểm thi môn CSDL cao nhất
SELECT SV.MASV,HOTEN,NU,NGAYSINH,DIEMTHI
FROM sv Inner Join kq On Sv.MASV = Kq.MASV
WHERE MAMH='CSDL' AND DIEMTHI >= ALL
(SELECT DIEMTHI FROM KQ WHERE MAMH='CSDL');
Hiểu và vận dụng tốt lệnh truy vấn dữ liệu là một việc làm cực kỳ cần thiết để tạo ra các kết quả
cho báo cáo, thống kê số liệu.
V. Truy vấn cập nhật dữ liệu (action query, data modification query)
Cú pháp: Update table Set field1 = biểuThức1, field2 = biểuThức2 Where điềuKiện
Cú pháp: Delete From table Where điềuKiện
vi Truy vấn hợp (union query)
Khi có nhu cầu thực hiện truy vấn có kết quả như toán tử hợp, ta sử dụng câu lệnh SQL sau:
Select .....Union Select ....
Ví du: Lệnh sau đây gấp đôi danh sách sinh viên
SELECT MASV,HOTEN,NGAYSINH UNION SELECT MASV,HOTEN,NGAYSINH

Mô hình thác nước (tiếng Anh: waterfall model) là một mô hình của quy trình phát triển phần mềm, trong
đó quy trình phát triển trông giống như một dòng chảy, với các pha được thực hiện theo trật tự nghiêm
ngặt và không có sự quay lui hay nhảy vượt pha là: phân tích yêu cầu, thiết kế, triển khai thực hiện, kiểm
thử, liên kết và bảo trì. Người ta thường dẫn bài báo được Winston W. Royce xuất bản vào năm 1970 để
giải thích nguồn gốc cho tên gọi "thác nước"; nhưng có điều thú vị là chính Royce đã dùng mô hình phát
triển lặp chứ không hề dùng thuật ngữ "mô hình thác nước".
Vào năm 1970 trong bài báo của mình, Royce đã mô tả ở dạng khái niệm cái mà ngày nay được công
nhận với tên gọi "mô hình thác nước", đã bàn luận về những nhược điểm của mô hình này. Trong đó ông
cũng chỉ ra rằng mô hình này có thể sẽ được tu sửa thành mô hình lặp.

Mô hình Royce nguyên gốc có các pha theo đúng thứ tự sau:

1. Xác định yêu cầu
2. Thiết kế
3. Xây dựng (hay "triển khai", "mã hóa", "viết mã")
4. Liên kết


5. Kiểm thử và Chỉnh sửa (hay «kiểm nghiệm»)
6. Cài đặt
7. Bảo trì
Theo mô hình thác nước, người phát triển phải thực hiện từng giai đoạn theo thứ tự nghiêm ngặt. Trước
hết, giai đoạn "xác định yêu cầu" phải được hoàn tất, kết quả nhận được sẽ là danh sách các yêu cầu đối
với phần mềm. Sau khi các yêu cầu đã hoàn toàn được xác định, sẽ chuyển sang pha thiết kế, ở pha này
người ta sẽ tạo ra các tài liệu dành cho lập trình viên, trong đó mô tả chi tiết các phương pháp và kế
hoạch thực hiện các yêu cầu đã được làm rõ ở pha trước. Sau khi pha thiết kế hoàn tất, lập trình viên sẽ
triển khai thực hiện (mã hóa, viết mã) đồ án họ nhận được. Giai đoạn tiếp theo là liên kết các thành phần
riêng lẻ đã được những đội lập trình viên khác nhau thực hiện thành một sản phẩm hoàn chỉnh. Sau khi
pha triển khai và pha liên kết hoàn tất, sẽ diễn ra pha kiểm thử và chỉnh sửa sản phẩm; ở giai đoạn này
những khiếm khuyết ở các giai đoạn trước đó sẽ bị loại bỏ. Sau đó, sản phẩm phần mềm sẽ được đưa
vào sử dụng; phần bảo trì phần mềm cũng sẽ được bảo đảm bằng cách bổ sung chức năng mới và loại
trừ các lỗi.
Như vậy, mô hình thác nước ngụ ý rằng, việc chuyển từ pha phát triển này sang pha khác sẽ diễn ra chỉ
sau khi các pha trước đó đã kết thúc hoàn toàn thành công, và không thể quay lui về pha trước đó hay
nhảy vượt pha.

[Tôi đã tổng hợp kinh nghiệm và tìm tư liệu trên mạng]


Phân tích yêu cầu: là quá trình xác định những đòi hỏi gì từ hệ thống, các yêu cầu chức

năng và phi chức năng. Là giai đoạn sự kết hợp tham gia tích cực của khách hàng. Kết
thúc là một hồ sơ đặc tả về hệ thống….
Mô hình này xem quá trình xây dựng một sản phẩm phần mềm gồm nhiều giai đoạn tách
biệt sau khi hoàn thành một giai đoạn thi chuyển đến giai tiếp theo.
Có hai hoạt động phổ biến đó là sau mỗi giai đoạn là sự kiểm tra phê chuẩn và quản lý
các thông số ban đầu từ yêu cầu của khách hàng. Sau mỗi giai đoạn như vậy thì hai hoạt
động đó là mục tiêu của sản phầm
Mô hình này giống hệt như là thiết kế một căn nhà, kiến trúc sư tìm hiểu, thiết kế, đưa
cho đội ngu nhân viên xây dựng…
Một dự án phần mềm hiếm khi được hình dung một cách chi tiết và đúng theo yêu cầu
công việc. Chỉ khi đưa vào môi trường thực các vấn đề mới bắt đầu phát sinh và việc thay
đổi yêu cầu diễn ra thường xuyên.
người sử dụng thường họ nghĩ phần mềm là mềm mại do đó có thể thay thế một cách dễ
dàng.Nhưng thực tế không là như vậy nó khó khăn hơn rất nhiều. Khi yêu cầu công việc
thay đổi thì việc thay đổi thành phần trong phần mềm cũng là điều tất yếu. với thế kỷ 21
thì nó là nhanh hơn. Việc áp dụng mô hình thác nứơc là không thể nào theo kịp được vì
vòng quy trình của nó quá dài. Nó giống như có thay đổi căn nhà bạn cần đập bỏ nó đi và
xây lại mới hết tất cả. Nhìn vào hình trên ta có thể thấy được những cái tốn kém của nó là
như thế nào.
Nhược điểm của mô hình
- Luôn luôn nghĩ sẽ là hoàn hảo ngay từ đầu
- Hệ thống phải kết thúc ở từng giai đoạn (có khi dài) do đó nó khó có thể thực hiện đầy
đủ các yêu cầu của khách hàng.
- Mối quan hệ giữa các giai đoạn không thể được thể hiện
- Thiết kế phải rõ ràng khi dự án bắt đầu
- Không thấy đuợc sự tiến hoá của sản phẩm
- Rủi ro cao, không thể quay lại
- Không thể phát triển sau khi phát hành sản phẩm
- Khó đáp ứng đựơc các yêu cầu của khách hàng. Sản phẩm đựơc hình thành ở giai đoạn
cuối của sản phẩm

- Đa số những phần mềm ẩn chứa những nhược điểm kô ít thì nhiều
- Người sử dụng không có cơ hội tham gia vào dự án trong suốt quá trình thực hiện dự án.
Đặc biệt là dự án lớn. Họ chỉ thấy vào thời điểm cuối
Ưu điểm
- Các đòi hỏi dài của hệ thống được nhận biết dài, phân tích trứơc khi hệ thống bắt đầu
- Thay đổi yêu cầu được giảm tới độ tối thiểu khi dự án bắt đầu
- Chuỗi các hoạt động được thực hiện theo quy trình rõ ràng


 Mô hình E-R được đề xuất bởi P. Chen (1976). Đây là một mô hình mức khái niệm dựa vào
việc nhận thức thế giới thực thông qua tập các đối tượng được gọi là các thực thể và các mối
quan hệ giữa các đối tượng này.
 Biểu diễn dưới dạng sơ đồ ER
 Thực thể (entity) là một vật thể tồn tại và phân biệt được với các vật thể khác.
 Một nhóm bao gồm các thực thể “tương tự” nhau tạo thành một tập thực thể



×