« Home « Kết quả tìm kiếm

SinhVienIT.Net---SQL- những kiến thức cơ bản nhất (1)


Tóm tắt Xem thử

- GIỚI THIỆU Ngôn ngữ truy vấn có cấu trúc (SQL) là một ngôn cơ sở dữ liệu(CSDL) chuẩn công nghiệp được công cụ quản trị dữ liệu củaMicrosoft (Microsoft jet database engine) sử dụng.
- SQL được sử dụng để tạo những đối tượng truy vấn (QueryDef objects), như là đối số cho phương thức mở tập hợp bản ghi (OpenRecordsetmethod), và là thuộc tính nguồn bản ghi (RecordSourceproperty) của điều khiển dữ liệu (data control).
- Nó cũng có thểđược dùng với những phương thức thi hành (Execute method)để trực tiếp tạo và thao tác.
- Chúng ta cũngnói tới sự xây dựng và công dụng của truy vấn SQL để tạo cácđối tượng tập hợp bản ghi (Recordset objects), và để chọn, sắpxếp, lọc và cập nhật dữ liệu trong những bảng cơ sở.
- Hơn nữa,chương này sẽ xem xét cách thức tối ưu hoá truy vấn SQL vềmặt tốc độ và hiệu quả.
- Hầuhết các bản thi hành của SQL chỉ là sự biến đổi nhỏ từ SQLchuẩn, bao gồm cả phiên bản được Jet database engine hỗ trợ.Những sự khác nhau này sẽ được nhắc tới ở cuối chương, nhưnghầu hết các cấu trúc và các chức năng của ngôn ngữ là nhấtquán đối với các nhà phát triển các hệ quản trị CSDL.
- Nếu bạnđã sử dụng bất cứ bản thi hành nào của SQL, bạn sẽ thấykhông khó khăn mấy khi chuyển sang Microsoft Jet SQL.SQL vs.
- NavigationNhư đã đề cập trong phần đầu tài liệu, Mircosoft Jet database engine cung cấp hai phương thức tách biệt để hoàn tất hầu hếtcác tác vụ CSDL:- Một mô hình điều hướng dựa trên cở sở dịch chuyển qua lạigiữa các bản ghi.- Một mô hình quan hệ dựa trên truy vấn hỏi có cấu trúc (SQL).Mô hình điều hướng bao gồm những thuộc tính và phương thứcđược mô tả trong “Tạo và sửa đổi CSDL” (“Creating andModifying Databases”) và “Thao tác với bản ghi và trường”(“Working with Records and Fields.
- Mô hình quan hệ đượcnói bàn tới trong chương này.Những lập trình viên không quen thuộc với những hệ quản trịcơ sở dữ liệu hướng file như dBASE, Foxpro, và Paradox có thểcảm thấy dễ chịu khi bắt đầu với các phương thức điều hướngđược thảo luận trong chương trước.
- Hơnnữa SQL có một lợi điểm là một giao tiếp ở mức chuẩn côngnghiệp về CSDL, thế nên một sự hiểu biết về các lệnh SQL chophep bạn truy cập và thao tác với một diện rộng các sản phẩmCSDL từ các nhà phát triển khác nhau.
- Nhữngthành phần này được kết hợp vào trong các phát biểu(statements) dùng để tạo, cập nhật, và thao tác trên CSDL.Những mục sau sẽ mô tả những thành tố đó một cách ngắngọn, và phần còn lại của chương này sẽ đưa ra cho bạn nhữngví dụ cụ thể về công dụng của chúng.Chú ý: Những mục sau sẽ những lệnh và từ khoá được dùngthường xuyên nhất, nhưng không phải tất cả.
- Tuy có vài phần trùng lặp, nhưng những câu lệnh DDL cho phép bạn tạo và định nghĩa cácCSDL, các trường, các chỉ mục mới, trong khi những câu lệnhDML để bạn xây dựng các truy vấn, sắp xếp, lọc, và trích dữ liệu từ trong CSDL.DDLCác câu lệnh DDL trong SQL là biểu thức được xây dựng chungquanh những mệnh đề sau:CREATE Dùng để tạo mới các bảng, các trường và các chỉ mục.DROP Dùng để xoá các bảng và chỉ mục khỏi CSDL.ALTER Dùng để sửa đổi các bảng bằng cách thêm trường, thayđổi định nghĩa của các trường.DMLCác câu lệnh DML là các biểu thức được xây dựng dựa trên cácmệnh đề sau:SELECT Dùng để truy vấn CSDL để lấy được những bản ghi thoảmãn những tiêu chuẩn nào đó.INSERT Dùng để chèn một nhóm dữ liệu vào CSDL thông quamột thao tác.UPDATE Dùng để thay đổi giá trị của những trường, những bảnghi cụ thể.DELETE Dùng để loại bỏ những bản ghi ra khỏi CSDL.2.Mệnh đề SQL:Mệnh đề là những điều kiện thay đổi được dùng để xác định dữ liệu bạn muốn chọn, muốn thao tác.
- Bảng sau liệt kê nhữngmệnh đề bạn có thể dùng.FROM Liệt kê danh sách các bảng mà ta cần lấy các bản ghi từ đó.WHERE Xác định các điều kiện mà bản ghi được chọn phải đápứng được.GROUP BY Dùng để nhóm các bản ghi được chọn thành cácnhóm riêng biệt.HAVING Dùng để đưa ra điều kiện cho mỗi nhóm.ORDER BY Dùng để sắp xếp các bản ghi được chọ theo một thứ tự nào đó.3.Những toán hạng SQL: Có hai loại toán hạng trong SQL: toán hạng logic và toán hạngso sánh.Toán hạng logic:Toán hạng logic được dùng để nối các biểu thức, thường làtrong phạm vi của mệnh đề WHERE.
- Ví dụ như:SELECT * FROM MY_TABLE WHERE Condition1 AND Condition2;Những toán tử logic bao gồm: AND, OR, NOTToán hạng so sánh:Toán hạng so sánh được dùng để so sánh tương đối giá trị haibiểu thức để xác định những hoạt động nào sẽ được thực hiện.Ví dụ:SELECT * FROM Publishers WHERE PubID = 5;Những toán tử so sánh bao gồm:< bé hơn lớn hơn>= lớn hơn hoặc bằng= bằng khác4.Hàm tổng hợp(aggregate functions)Hàm tổng hợp (hàm nhóm) được dùng trong phạm vi của mệnhđề SELECT trên một nhóm bản ghi để trả lại một giá trị.
- Ví dụ,hàm AVG có thể trả lại giá trị trung bình của tất cả các giá trịtrong một trường cụ thể.
- Bảng sau liệt kê danh sách các hàmtổng hợp.AVG Trả lại giá trị trung bình trong một trường.
- COUNT Trả lạisố bản ghi được chọn.SUM Hàm tính tổng các giá trị trong một trường cụ thể.MAX Hàm trả về giá trị cực đại của trường đó.MIN Hàm trả về giá trị cực tiểu của trường đóNHỮNG THAO TÁC DLL DDL bao gồm một số lệnh bạn có thể dùng để tạo bảng và chỉ mục, vàsửa đổi các bảng bằng cách thêm hoặc loại bỏ các cột hoặc chỉ mục.Những câu lệnh định nghĩa dữ liệu có thể chỉ được dùng với Jetdatabase.
- Chúng không được hỗ trợ cho bất cứ CSDL định dạng ngoài.Chú ý: Để dùng câu lệnh DDL, hoặc bất cứ truy vấn nào không trả lạitập bản ghi, hãy đóng ngoặc kép và sử dụng chúng như là đối số củacác phương thức thi hành của CSDL hay đối tượng truy vấn (QueryDef object) như trong ví dụ sau:MyDB.Execute “CREATE TABLE Employees ([First Name] TEXT, [Last_Name] TEXT)”;Để dùng bất cứ một câu lệnh nào trả lại các bản ghi (như SELECT),dùng biểu thức như là đối số nguồn của phương thức mở tập bản ghi(OpenRecordset method), như trong ví dụ sau:MyDB.OpenRecordset (“SELECT * FROM Titles WHERE Au_ID = 5”, _dbOpenDynaset);1.Tạo một bảng:Để tạo một bảng trong CSDL, dùng câu lệnh CREATE TABLE.
- Một câulệnh hoàn chỉnh nhận các đối số là tên bảng, tên các trường, kiểu dữ liệu của các trường và độ rộng của các trường.Ví dụ sau tạo một bảng có tên là “Employees”, có hai trường kiểu TEXTvới độ rộng là 25:CREATE TABLE Employees ([First Name] TEXT(25), [Last Name]TEXT(25));Thêm và xoá cột:Bạn có thể thêm, sửa đổi hoặc xoá các cột với câu lệnh ALTER TABLE.Ví dụ, câu lệnh sau thêm một trường kiểu TEXT có độ rộng 25 và tênlà “Notes” vào bảng Employees:ALTER TABLE Employees ADD COLUMN Notes TEXT(25);Để loại bỏ một cột, dùng từ khoá DROP.
- Ví dụ này loại bỏ cột có tên là “Notes” mới vừa được thêm lúc nãy:ALTER TABLE Employees DROP COLUMN Notes.
- Ví dụ sau tăng độ rộng của trường “Notes”:ALTER TABLE Employees DROP COLUMN Notes;ALTER TABLE Employees ADD COLUMN Notes TEXT(30);Chú ý: Dùng ALTER TABLE, bạn chỉ có thể thêm hoặc xoá một trườngtại mỗi thời điểm.2.Tạo và xoá chỉ mục:Có ba cách khác nhau để tạo chỉ mục:- Lúc bắt đầu tạo bảng với câu lệnh CREATE TABLE- Với câu lệnh CREATE INDEX.- Với câu lệnh ALTER TABLEMặc dầu cả ba cách này đều cho kết quả tương tự, nhưng vẫn cónhững khác điểm khác nhau.
- Nếu bạn muốn thêm một khoá ngoại(foreign key) và ép buộc toàn vẹn tham chiếu (enfore referentialintegrity), bạn phải dùng một mệnh đề ràng buộc (CONSTRAINTclause) trong các câu lệnh CREATE TABLE hoặc ALTER TABLE.
- Đôi khi người ta muốn tạo một bảng ban đầu không có chỉ mục,và tiếp đó là thiết kế các tham số chỉ mục sau khi dùng mẫubảng.
- Với tình huống này, bạn nên dùng CREATE TABLE để tạomẫu bảng không có chỉ mục, và sau đó thêm các chỉ mục vớicâu lệnh CREATE INDEX hoặc ALTER TABLE.Tạo một chỉ mục với câu lệnh CREATE TABLE.Khi bạn tạo một bảng, bạn có thể tạo một chỉ mục cho từng cộtriêng rẽ, hoặc hai hoặc nhiều hơn các cột, dùng mệnh đề SQLCONSTRAINT (từ khoá CONSTRAINT bắt đầu định nghĩa một chỉsố).
- Ví dụ sau đây minh hoạ cách tạo ra một bảng với ba trườngcó chỉ mục:CREATE TABLE Employees ([First Name] TEXT(25), [Last Name]TEXT(25.
- [Date of Birth] DATETIME, CONSTRAINTEmployeesIndex UNIQUE _ ([First Name], [Last Name], [Date of Birth]));Để đánh chỉ mục với một cột, bạn đặt mệnh đề CONSTRAINTvào một trong những mô tả cột.
- Ví dụ, để đánh chỉ mục trường xoá chính bảng đó còn nhanh hơn là dùng truy vấn xoá.
- Bạn cóthể dùng một phương thức thi hành với một câu lệnh DROPTABLE để xoá bảng đó ra khỏi CSDL.
- Ngược lại, khi dùng truy vấn xoáthì chỉ phần dữ liệu bị xoá.
- Cấu trúc bảng và các thuộc tính củacác trường vẫn còn nguyên vẹn.Bạn có thể dùng DELETE để xoá bản ghi trong một bảng hoặcbảng liên kết bên n của một quan hệ 1 - n.
- Thao tác xoá theotầng trong truy vấn chỉ xoá bảng bên n của quan hệ .
- Ví dụ,trong quan hệ giữa bảng Customers và bảng Orders, bảngOrders là phía n, nên thao tác xoá chỉ ảnh hưởng đến bảngOrders.Một truy vấn xoá xoá toàn bộ bản ghi, không xoá chọn lọc theocác trường.
- Nếu bạn muốn xoá dữ liệu trong một trường cụ thểnào đó, dùng truy vấn cập nhật (UPDATE) để thiết lập dữ liệutrường đó là rỗng (NULL).Một khi bạn đã loại bỏ các bản ghi bằng cách dùng truy vấnxoá, bạn không thể khôi phục lại thao tác của mình.
- Nếu bạnmuốn biết những bản ghi đã được xoá, trước hết, kiểm tra kếtquả của truy vấn chọn có cùng điều kiện (với truy vấn xoá) vàsau đó tiến hành truy vấn xoá.Bất cứ lúc nào bạn cũng nên sao lưu dữ liêu phòng khi bạn xoánhầm các bản ghi.4.Dùng truy vấn bổ sung.Bạn có thể dùng mệnh đề INSERT INTO để thêm các bản ghivào bảng hay tạo một truy vấn bổ sung.Bạn có thể dùng những cú pháp sau đây để thực hiện truy vấnbổ sung nhiều bản ghi:INSERT INTO target [IN externaldatabase] SELECT[source.]field1[, field2.
- FROM tableexpressionNgược lại, dùng cú pháp sau để thực hiện truy vấn bổ sung mộtbản ghi:INSERT INTO target [(field1[, field2.
- VALUES (value1[,value2[, ...])Bạn có thể dùng mệnh đề INSERT INTO để thêm một bản ghi đơn vào một bảng dùng cú pháp truy vấn bổ sung bản ghi đơn.Trong trường hợp này, Câu lệnh phải xác định tên và giá trị chomỗi trường của bản ghi.
- Bạn phải xác định các trường của bảnghi mà dữ liệu se được gán vào cũng như giá trị của trường đó.Khi bạn không chỉ rõ danh sách trường, giá trị mặc định hoặcNULL sẽ điền vào các trường vắng mặt.
- Các bản ghi được thêmvào cuối bảng.Bạn cũng có thể dùng INSERT INTO để nối một tập hợp các bảnghi từ một bảng khác hoặc một truy vấn dùng mệnh đềSELECT.
- Trong trường hợpnày, mệnh đề SELECT chỉ rõ trường nối thêm vào bảng đích.Bảng nguồn hoặc bảng đích có thể là một bảng hay một truyvấn.
- Nếu một truy vấn được xác định, Microsoft Jet databaseengine nối một tập hợp bản ghi vào một hoặc nhiều bảng đượcchỉ ra trong truy vấn.INSERT INTO là một tuỳ chọn, nhưng khi có mặt nó, phải đứngtrước SELECT.Nếu bảng đích chứa khoá chính, phải chắc chắn rằng bạn bổsung những bản ghi với nội dung khoá là duy nhất, và trườngđó không được để trống.Nếu bạn bổ sung các bản ghi vào một bảng với trường Couter,loại bỏ trường đó ra khỏi danh sách nếu bạn muốn Microsoft Jetđánh số lại các bản ghi.
- Thêm trường Counter vào truy vấn nếubạn muốn giữ lại giá trị ban đầu.
- Nếu có giá trị trùng, tất nhiênlà Jet database sẽ không bổ sung bản ghi đó.Dùng mệnh đề IN để nối các bản ghi vào một bảng của mộtCSDL khác.Để tạo một bảng mới, dùng mệnh đề SELECT.
- INTO thay thế để tạo một truy vấn tạo bảng.Để tìm ra các bản ghi sẽ được bổ sung, trươc khi thi hành truyvấn bổ sung, hãy xem qua kết quả của truy vấn chọn với cùngbiểu thức điều kiện.Một truy vấn bổ sung không ảnh hưởng tới các bảng hoặc truyvấn nguồn.5.Truy vấn cập nhật: Truy vấn UPDATE thay đổi giá trị trong các trường được thoảmãn các điều kiện cập nhật.UPDATE table SET newvalue WHERE criteria;UPDATE đặc biệt hữu dụng khi bạn muốn thay đổi nội dungnhiều bản ghi hoặc khi các bản ghi bạn muốn thay đổi nằm trênnhiều bảng.
- Thông thường bạn dùng truy vấn này với mộtphương thức thi hành.Bạn có thể thay đổi một vài trường cùng lúc.
- Ví dụ sau tăngOrder Amount lên 10% và giá trị Freight lên 3%:UPDATE Orders _ SET [Order Amount.
- Nếu bạn muốn xem nhữngbản ghi nào được cập nhật, trước tiên xem kết quả của truy vấnchọn (dùng cùng biểu thức điều kiện) và sau đó thi hành truyvấn cập nhật.Truy vấn Crosstab:Truy vấn Crosstab cho phép bạn chọn các giá trị từ các trườnghay các biểu thức như là các tiêu đề cột, vì thế, bạn có thể xemdữ liệu một cách cô đọng hơn với một câu lệnh SELECT bìnhthường.
- Bạn dùng mệnh đề TRANSFORM để tạo các truy vấnCrosstab.TRANSFORM aggfunction selectstatement PIVOT pivotfield [IN(value1[,value2[,...]])]Mệnh đề TRANSFORM dùng những tham số sau: aggfunctionMột hàm tổng hợp trên dữ liệu được chọn.selectstatement : Một câu lệnh SELECTpivofield : Trường hoặc biểu thức bạn muốn dùng để tạo tiêuđề cột trong kết quả của truy vấn.value1, value2: Các giá trị cố định được dùng để tạo tiêu đềcột.Khi bạn tổng hợp dữ liệu với công cụ là truy vấn Crosstab, bạnchọn các giá trị các trường hay biểu thức cụ thể như là các tiêuđề vì thế bạn có thể xem dữ liệu trong một dạnh cô đọng hơn.TRANSFORM đứng trước mệnh đề SELECT xác định các tiêu đềdòng và đứng trước một mệnh đề GROUP BY xác định các dòngcụ thể được nhóm.
- Tất nhiên, bạn có thể tuỳ chọn các mệnh đềkhác, như WHERE, những mệnh đề xác định thêm các tiêu chuẩn chọn hay sắp xếp.Các giá trị trả lại trong pivotfield được dùng như là tiêu đề cộttrong tập kết quả của truy vấn.
- Ví dụ, việc xoay doanh số bánhàng trong một tháng trong một truy vấn Crosstab sẽ tạo ra 12cột.
- Bạn có thể hạn chế pivotfield để tạo các tiêu đề cột từ cácgía trị cố định (giá trị 1, giá trị 2) được liệt kê trong mệnh đềtuỳ chọn IN.Ví dụ sau tạo ra một truy vấn Crosstab trình bày kết quả bánhàng theo tháng trong một năm của một người nào đó.
- PIVOT DatePart(“m”, [OrderDate]);Kết nối:Một trong những đặc tính hữu ích nhất của CSDL quan hệ làkhả năng nối hai hay nhiêu bảng với nhau để tạo nên một bảngmới (hay một Recordset) chứa đựng thông tin từ các bảng cũ.Các bảng được nối theo các mối quan hệ giữa chúng, thôngthường nhất là giữa khoá chính của một bảng và khoá ngoàitương ứng của bảng kia.
- Tuỳ thuộc vào cách thức nối các bảngvới nhau mà bạn có thể tạo ra các loại liên kết sau:INNER JOIN Các bản ghi của cả hai bảng được chứa trong liênkết chỉ khi một trường cụ thể trong bảng khớp với một trườngcụ thể trong bảng thứ hai.LEFT OUTER JOIN Tất cả các bản ghi từ bảng một được chứatrong liên kết, cùng với các bản ghi trong bảng hai mà ở đó cáctrường cụ thể khớp với các trường tương ứng trong bảng một.RIGHT OUTER JOIN Tất cả các bản ghi từ bảng thứ hai được đưavào liên kết cùng với các bản ghi từ bảng một mà có các trường SQL trong một phép hợp UNION đơn.
- Ví dụ sau kết hợp kết quảcủa một truy vấn có tên gọi New Accounts và một câu lệnhSELECT: TABLE [New Accounts] UNION ALL _ SELECT * FROMCustomers WHERE [Order Amount.
- 1000;Mặc định, không có hai bản ghi nào trùng nhau trong kết quảcủa một truy vấn hợp.
- tuy nhiên, bạn có thể bao gồm cả chỉdẫn ALL để kết quả có cả các bản ghi trùng nhau.
- Nó cũng làmcho truy vấn thi hành nhanh hơn.Tất cả các truy vấn trong phep hợp UNION yêu cầu có cùng sốtrường, tuy nhiên các trường không cần thiết phải có cùng kíchthước hoặc kiểu dữ liệu.Bạn có thể dùng mệnh đề GROUP BY và/hoặc HAVING trong mỗitruy vấn tham gia phép hợp để nhóm dữ liệu.
- Bạn có thể dùngmột mệnh đề ORDER BY ở cuối truy vấn cuối cùng để kết quảtrả về được sắp theo một thứ tự xác định.7.Tối ưu truy vấn:Tối ưu CSDL là một chủ đề lớn và bao hàm nhiều vấn đề.
- Nhiềuyếu tố, bao gồm cả cấu hình phần cứng và phần mềm, cài đặtWindows, bộ đệm, không liên quan đến các truy vấn, nhưngchúng ảnh hưởng đến hiệu quả của CSDL.Một yếu tố quan trọng khác là dùng các bảng gắn với CSDL hơnlà kết nối trực tiếp với CSDL từ xa.
- Vấn đề này được bàn kỹ ở trong cuốn “Accessing External Data”.Phần này sẽ trình bày ngắn gọn một số cách tối ưu liên quanđặc biệt tới sự xây dựng các truy vấn, và tận dụng khả năng tốiưu Jet database để xây dựng các truy vấn.Một số chiến lược tối ưu thường dùng:- Hạn chế dùng các trường sắp xếp, đặc biệt là các trườngkhông được tạo chỉ mục.- Đảm bảo các bảng kết nối từ các nguồn khác nhau đều đượctạo chỉ mục hoặc là được liên kết trên các khoá chính.- Nếu dữ liệu không thay đổi thường xuyên, dùng các truy vấntạo bảng từ truy vấn Dynasets của bạn.
- Dùng các bảng để làmcơ sở cho các form, các báo cáo hơn là dùng các truy vấn.- Nếu bạn đang tạo một truy vấn Crosstab, hãy dùng tiêu đềcột cố định bất cứ khi nào có thể.- Dùng BETWEEN...AND, IN và các dấu.
- trên các cột đượcđánh chỉ mục.- Khi tạo một truy vấn, không nên thêm các trường không cầnthiết.
- Tối ưu các truy vấn với công nghệ Rushmore:Rushmore là một công nghệ truy cập dữ liệu được dùng trong Jet database engine cho phép một tập hợp các bản ghi đượctruy cập một cách hết sức hiệu quả.
- Với Rushmore, khi bạndùng một kiểu biểu thức nhất định trong điều kiện truy vấn,truy vấn của bạn sẽ thi hành nhanh hơn rất nhiều.Biểu thức tối ưu ở dạng đơn giản: Jet database engine có thể tối ưu hoá các biểu thức đơn giảntrong mệnh đề WHERE trong câu lệnh SELECT.
- Dạng biểu thứcđơn giản có thể thành lập nên toàn bộ hoặc một phần phần củabiểu thức.Một biểu thức đơn giản có thể tối ưu hoá có một trong nhữngdạng sau:indexedfield comparisonoperator expression - or -expressioncomparisonoperator indexedfield Trong dạng biểu thức đơngiản nhất có thể tối ưu:- indexedfield phải là một trường mà trên đó có tạo lập chỉmục.- comparisonoperator phải là một trong những kiểu sau đây

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt