Chương 1: Giới thiệu về SQL-Server
1.1. Chức năng của SQL
- SQL-Server là phần mềm dùng để quản lý cơ sở dữ liệu: tạo, tổ chức, xử lý dữ liệu. Các
phần mềm tương tự: Access, Excel, Visual Fox, Oracle, ...
- Cách học, nghiên cứu SQL giống Access, ...
- Ứng dụng:
+ Xây dựng CSDL cho các ứng dụng Web.
+ Xây dựng CSDL cho các ứng dụng quản lý
1.2 Đặc điểm của sql (so với access, Visual Fox)
Ưu điểm: (text, number, yen/no, memo, ole object, ...)
- Thích hợp cho các ứng dụng trên mạng.
- Có tính an toàn, bảo mật rất tốt.
- Quản lý khối lượng dữ liệu lớn
- Hỗ trợ nhiều kiểu dữ liệu
+ Ký tự: char, Nchar, VarChar, Nvarchar
+ Văn bản: Text, Ntext
+ Số nguyên: byte, tinyInt, SmallInt, Int, BigInt
+ Số thực: number, float, decimal, money
+ logic: bit
+ Khác: binary, ....
- Hỗ trợ rất tốt ngôn ngữ SQL. Do vậy, ta dễ dàng xây dựng các view, các thủ
tục chứa, các hàm hay nói cách khác mở rộng câu lệnh SQL.
Nhược điểm
- Không có các đối tượng như Form (để tạo giao diện ứng dụng), Report (để tạo
các báo cáo), module (lập trình ứng dụng CSDL).
- Ta cần sử dụng các công cụ bên ngoài để lập trình cho các ứng dụng CSDL
SQL: Visual Basic.Net, C#.net, ADO.Net, ..., Crystal Report
1.3 Cài đặt
a. Phần cứng:
- Pentium IV
- 512MB
- 20GB
b Phần mềm:
- Windows XP SP2 (.com), tốt nhất Windows server 2003 (.net)
- SQL server 2000, sql server 2005
- Visual Studio 2005, 2008
1.4 Các chức năng thường dùng trong SQL 2000
- Enterprise Manager (EM): Quản lý và khai thác dữ liệu thông qua giao diện đồ họa.
Thường dùng cho những người nghiệp dư.
- Query Analyzer: (QA)Thực hiện truy vấn thông qua các câu lệnh SQL.
Trong SQL 2005, hai chức năng này kết hợp làm một: studio Management.
1.5 Tài liệu tham khảo:
- Nghe bài giảng.
- Xem tài liệu trong đề cương
- ADO.net
1.6 Các đối tượng của SQL server
- Databases: (CSDL): quản lý các CSDL của SQL.
- Security: quản lý các user.
-...
1.7 Các đối tượng trong CSDL SQL server
a. Các đối tượng trong CSDL Access:
+ Tables: quản lý các bảng dữ liệu
+ Queries: quản lý các câu truy vấn khai thác Dữ liệu.
+ Forms: Quản lý các CSổ giao diện.
+ Reports: in ấn báo cáo.
+ Macros: Khai thác, sử dụng các chương trình con có sẵn.
+ Modules: Lập trình thêm các chức năng chưa có bằng Visual Basic.
+ Pages: Xuất dữ liệu ra dưới dạng web.
b. Các đối tượng trong Databases của SQL
+ Tables: quản lý các bảng dữ liệu (giống hoàn toàn Acc)
+ View: Quản lý các bảng (ảo) cho phép nhìn dữ liệu dưới nhiều góc độ khác
nhau (gần giống Queries)
+ Stored Procedure: Quản lý các module cho phép khai thác CSDL bằng ngôn
ngữ SQL (gần giống Queries)
+ User’s Function: Quản lý các hàm viết bằng ngôn ngữ SQL
+ Diagrams: Quản lý một tập hợp các bảng, View, nhóm Users
+ Users: Quản lý tài khoản người dùng CSDL: UserName, Password, thời gian
truy cập, dung lượng, quyền khai thác, ...
+ Roles (vai trò): quản lý các nhóm quyền.
+ Rules (quy tắc): quản lý các quy tắc ràng buộc dữ liệu
1.8. Xây dựng CSDL cho bài toán QL
a. Xác định các đối tượng cần quản lý (QL ai? QL cái gì?)
- Khách hàng
- Mặt hàng
- Nhân viên bán hàng
- Đơn đặt hàng
- Nhà cung cấp hàng
- Đội vận chuyển hàng
- Hồ sơ giao hàng
...
b. Xác định thông tin về các đối tượng.
Khách hàng(HT, ĐC, Phái, SĐT, Email, ...., MaKH)
Mặt hàng(Tên hàng, Giá mua, ngày nhập, SL, mã MH)
Đon hang(MaKH, MaHH, ngàyBán, SL bán, giá bán, Kmãi, ...., sohd)
....
c. Sử dụng một CSDL quan hệ để mô tả các đối tượng
* Một đối tượng đươc mô tả bởi một bảng (Table)
* Mỗi thông tin về đối tượng là một cột (trường) trong bảng
* Cần xác định một trường hay tổ hợp trường làm khóa (mã ...)
1.9. Giới thiệu về CSDL Northwind
a. Chức năng: đây là CSDL quản lý việc kinh doanh mua bán.
b. Các bảng dữ liệu (các đối tượng cần quản lý) của Northwind
+ Customers (Khách hàng)
+ Products (Hàng hóa)
+ Employees (Nhân Viên)
+ Categories(chủng loại hàng)
+ Orders (hoa don, đơn đặt hàng)
+ Order Details (chi tiet hóa đơn)
+ Suppliers (nhà cung cấp hàng)
Thông tin về
Orders
- Categories
+ CategoryID: mã chủng loại
+ CategoryName: tên chủng loại
- Products
+ ProductName: Tên hàng
+ ProductID: Mã hàng
+ UnitPrice: đơn giá
+ CategoryID
+ SupplierID: Mã nhà cung cấp
- Customers
+ CustomerID: Mã khách hàng
+ CompanyName: tên công ty
+ ContactName: tên đối tác
+ Address: địa chỉ
+ City: Thành phố
+ Country: quốc gia
- Employes (tương tự trên)
- Orders
+ OrderID: mã đơn hàng
+ OrderDate: ngày đặt hàng
+ CustomerID: Mã khách hàng
- Order Details
+ OrderID: mã đơn hàng
+ ProductID: mã sản phẩm
+ Quantity: số lượng
+ UnitPrice: giá bán
- Suppliers (tương tự như Customers)
MaHD, NgayBan, Khachhang,
Nhanvien
1. Tivi 5
2.Tu lanh 7,
10000
555
Order Details
Chương 2. Tạo cơ sở dữ liệu (CSDL) và Bảng
1. Tạo CSDL mới
VD: Tạo một CSDL quản lý nhân viên (QLNV)
...
a. Cách 1: Dùng Enterprise Manager (EM)
B1. Chạy E.M (Register Server)
b2. Chọn đối tượng Databases
B3. ... \ New Databases (nhiều cách làm) \ Gõ tên CSDL
Kết quả: Có 2 file cất trong folder
C:\Program Files\Microsoft SQL Server\MSSQL\Data
QLNV_data.MDF và QLNV_log.LDF
Ưu điểm: Thực hiện quá dễ, quá khỏe
Nhược điểm: Trực tiếp làm việc với Server. Không lập trình được.
b. Cách 2: Dùng lệnh SQL (ngôn ngữ SQL)
B1. Chạy Query Analyzer (QA)
B2. Gõ lệnh sau trong cửa sổ QA
Create Database <tên CSDL>
VD: Create database QLNV
B3. Thực hiên câu lệnh (Nhấp nút Execute ... hoặc gõ F5, chọn lệnh)
Làm tươi cửa sổ object browser: nhấp phải \ Refresh (f5).
Ưu điểm: Khắc phục được nhược điểm trên. Có khả năng lập trình.
Nhược điểm: Dành cho người chuyên về lập trình.
2. Xóa CSDL
C1. Dùng E.M
Nhấp phải vào CSDL \ Delete
C2. Dùng lệnh
Drop database <tên CSDL>
2. Tạo bảng (tables)
a. Tables: Đối tượng quan trọng bậc nhất của CSDL. Đây là đối tượng chứa dữ liệu. Mỗi
bảng tương ứng với một đôí tượng trong bài toán quản lý. VD đối tượng khách hàng có
bảng customers
Mỗi bảng có hai phần: Cấu trúc (structure, các cột) và các Records
* Cấu trúc (Header): bao gồm các trường (Fields, columns). Mỗi trường tương ứng với
thông tin về đối tượng quản lý.
Tên trường nên viết ngắn gọn, rõ nghĩa, không nên dùng chữ Việt có dấu, nên viết sít
nhau.
* Các Record: Mỗi Rec. là một đối tượng cụ thể.
Mỗi Rec. là một bộ giá trị của các trường.
Dữ liệu trong các Rec. có thể viết bằng chữ Việt có dấu, nên dùng Font Unicode (arial,
Time new Roman, Courier, Tahoma)
b. Tạo bảng
Nhanvien(MaNV, Hoten, Phai, ngaysinh, Hesl, Macv, Maph)
Phong(MaPh, tenPh)
Chucvu(MaCV, TenCV, Phucap)
C1. Dùng E.M (Y chang Access)
B1. Bung CSDL cần tạo bảng ra
B2. Nhấp phải vào tables\ New Table
B3. Lần lượt khai báo các trường
B4. Nhập dữ liệu cho các Rec.
C2. Dùng lệnh
Create table <tên bảng > ...
c. Sửa bảng
C1. Dùng E.M
C2. Dùng lệnh. Hơi phức tạp, khó nhớ (Alter table <tên bảng>)
d. Hủy bảng
C1. Dùng E.M
C2. Dùng lệnh. Drop table <tên_bảng>
3. Các kiểu DL trong SQL (rất nhiều so với Access)
* Kiểu số:
- Số nguyên: BigInt (8B); Int (4B), SmallInt (2B), TinyInt (1B)
- Số thực: Real (4B), Float (8B)2.15
- Số: Decimal, Numeric (8B)
* Kiểu ký tự
Char (lấp đầy ký tự trống cho các Byte rỗng)
Varchar(Max) (Cắt bỏ các Byte rỗng)
Nchar (chữ Việt)
NVarchar
* Kiểu văn bản
Text (chứa cả một văn bản, trang web)
Ntext (dùng cho chữ Việt)
* Kiểu ngày tháng
DateTime
* Các kiểu khác:
- Binary: dữ liệu dạng nhị phân (phải có phần mềm xử lý)
- Image: Dữ liệu dạng nhị phân
- Money (tiền tệ: thích hợp cho loại tiền USD, EUR...)
4. Khóa (trường có thuộc tính khóa)
- Khóa là một trường hay một tổ hợp các trường cho phép phân biêtj rec. này với rec.
khác trong bảng DL. Hai Rec. khác nhau thì giá trị của trường khóa phải khác nhau.
- Thường ta chon cột mã ... làm trường khóa
- Trong SQL, mỗi bảng dữ liệu phải có trường khóa.
Tạo khóa:
B1. Chọn 1 trường (hoặc tổ hợp nhiều trường)
B2. Nhấp nút Primary Key
5. Trường có thuộc tính Identity (AutoNumber – access)
- Đây là trường kiểu số, dữ liệu tự sinh, tự tăng, khác nhau, không được nhập.
- Ta chọn trường khóa có thuộc tính Identity
Cách làm:
+ Chọn trường (thường là trường khóa)
+ Cho Identity = Yes; cho ... seed = 1; Increment = 1;
6. Thiết lập quan hệ cho các bảng
* Ích lợi: Tận dụng được các chức năng kiểm tra ràng buộc dữ liệu giữa các bảng để hạn
chế sai sót khi nhập dữ liệu
* Yêu cầu cho 2 bảng DL có quan hệ với nhau:
- Có trường chung: kiểu, size, nên chung tên
- Có ít nhất một trường chung là khóa
Cách làm: (giống y chang Access)
B1. Nhấp phải diagram \ New ...
B2. Đưa các bảng lên sân khấu (add table)
B3. Kéo và thả trường chung giữa các bảng
Kiểm tra ràng buộc dữ liệu
- Nhấp phải vào đường quan hệ \ properties
- Khai báo:
• Cascade Update: sửa Tchung of cha --> sửa con (nên)
• Cascade Delete: Hủy rec. Cha --> Hủy rec. con (không nên)
Chương 3. Giới thiệu về lệnh SQL
Bài 1. Giới thiệu về lệnh (ngôn ngữ) SQL
1. Lệnh SQL. (Structure Query Language). Đây là các câu lệnh dùng để xử lý dữ
liệu trong SQL Server.
2. Các câu lệnh SQL trở thành chuẩn cho các phần mềm CSDL. Tuy nhiên mỗi phần
mềm có một số lệnh riêng.
3. Trong SQL Server ta dùng chức năng Q.A để thử nghiệm, chạy các câu lệnh.
4. Phân nhóm: có hai nhóm lệnh
- Nhóm thai thác: không làm thay đổi DL. Lệnh Select ...
- Nhóm thay đổi DL: Insert, Delete, Create, Update, Drop. ...
Bài 2. Các lệnh Select SQL lấy DL từ một bảng
1. Chức năng của lệnh Select:
- Trích một số cột dữ liệu.
- Lọc dữ liệu
- Tìm kiếm dữ liệu
- Thống kê dữ liệu
2. Câu lệnh tổng quát
Select <danh sách các trường cần lấy ra> from <Bảng>
[Where <biểu thức lọc>]
[Order by <trường>, ...]
[Group by <trường>, ...]
Having ...
3. Lệnh Select lấy dữ liệu gồm tất cả các trường
a. Dạng lệnh:
Select * from <bảng>
b. VD:
Cho xem danh sách các Customers
(mặt hàng, nhân viên, nhà cung cấp, ...)
- Mở CSDL NorthWind:
C1. Nhấp hộp chọn tên CSDL.
C2. Lệnh: Use <tên CSDL>
- Ẩn | hiện bảng Objects: F8
- Thay đổi Font chữ: Tools \ Option \ Font ...
- Tạo chú thích (tạm tắt câu lệnh):
+ Mỗi dòng: -+ Nhiều dòng: /* ... */
Select <danh sách các trường cần lấy ra> from <Bảng>
4. Lệnh Select lấy dữ liệu gồm một số trường (trích – phép chiếu)
a. DL:
Select <trường1>, <trường2>, ... from <bang>
b.VD: Cho xem (lấy ra) các khách hàng gồm các thông tin: CustomerID,
CompanyName, Address, City
5. Lấy ra chỉ một Record trong số các Rec. giống nhau.
a. DL: Select distinct <các trường> from <bảng>
b. Vd: Cho xem Tên các thành phố có mua hàng của công ty
6. Xem một số rec. đầu tiên
a. DL: Select [distinct] top <n> <các trường> from ....
b. Xem 10 mặt hàng đầu tiên
Chú ý:
- Trong MySQL ta có thể xem một số Rec. trong một khoảng bất kỳ.
- Trong SQL ta phải lập trình để xem n Records bắt đầu từ Rec. thứ k.
- Trong ADO.net ta cũng có thể xem một số Rec. trong một khoảng bất kỳ bằng
phương thức Fill của lớp DataAdapter.
7. Lệnh Select có sắp xếp thứ tự dữ liệu
a. DL: Select ... from <bảng> Order by <trường1> [asc | desc],
<trường2> [asc | desc], ...
b.Giải thích:
- Sắp xếp theo thứ tự ưu tiên <trường1>, <trường2>, ...
- Asc (hoặc để trống): tăng dần (ascending)
- Desc: giảm dần
(descending)
c. VD:
- Cho xem các tên các mặt hàng sắp xếp theo thứ tự Unitprice tăng dần
- Lấy ra 11 mặt hàng đầu tiên có giá cao nhất.
Chú ý: để lấy hết các record đầu tiên thỏa mãn điều kiện thì ta thêm từ
With ties ngay sau top N
Bài 3. Lệnh Select có trường tính toán (calculated fields)
1. Trường tính toán: Trường không có sẵn trong các bảng.
Đây là một biểu thức (expression) bao gồm các trường.
2. VD: Cho xem thêm cột Ttien trong bảng Order details
Chú ý: Nếu tên trường, tên bảng viết có dấu cách (viết hở) thì dùng dấu [...] hoặc " ...
" để bao lại.
3. Các phép toán dùng trong biểu thức:
a. Số học: +,-,*,/, % (modulus: phép chia lấy phần dư)
b. Phép nối chuỗi: +
Vd1: Cho xem thêm cột Ttien trong bảng Order details
Vd2: Cho xem giá mới của các mặt hàng có tăng thêm 5% giá cũ.
Chú ý:
- Để đặt tên khác cho trường ta viết:
<Tên cũ> as <tên mới>
Vd3 Cho xem tên khách hàng, phía trước có ghi chữ “ông/bà”
Chú ý:
- Dùng dấu + để nối chuỗi.
- Chuỗi được bao bởi dấu nháy đơn.
- Thêm ký tự N để dùng Font Unicode
VD4: Hãy chuẩn bị DL để xuất ContactName ra trang web dạng chữ màu đỏ (đậm).
VD5: Hãy chuẩn bị dữ liệu để xuất ảnh của nhân viên ra trang web.
4. Các hàm dùng trong biểu thức tính toán
a. Hàm (Function): Các module có sẵn (mua) hoặc do ta tự viết.
b. Hàm thực hiện các chức năng tính toán phức tạp, luôn trả về một giá trị và được
dùng như một toán hạng của biểu thức
c. Các hàm trong SQL giống Y chang các hàm trong Excel, Access, VisualFox.
d. Các nhóm hàm:
+ Hàm về số: Sqrt, Abs, Round...
+ Hàm ngày tháng: Day, Month, Year, DatePart
+ Hàm về chuỗi: Left, Right, Substring, Ltrim, Rtrim, Len, Space,...
+ Hàm thống kê: Count(*): đếm số Rec. Sum: Tính tổng, AVG: Tính trung bình,
Max, Min
+ Hàm đổi kiểu dữ liệu: Cast, Convert
+ Hàm điều kiện: Case ... when ... end
Xem phần Help.
VD1: Xem Thêm cột Tiền trong bảng [order details.]
(UnitPrice*Quantity)
VD2: Cho xem ngày (tháng, năm, quý) của các đơn đặt hàng (Orders).
Day(Orderdate)
VD3. Cho xem số lượng các khách hàng (Đơn đặt hàng)
– Count(*)
Cho xem số lượng các thành phố có làm ăn với NortWind
VD4. Cho xem giá thấp nhất (cao nhất) của mặt hàng
– Max(UnitPrice)
VD5. Tính toàn bộ doanh số bán ra của công ty
Sum(UnitPrice*Quantity)
Bài 4. Lệnh Select có lọc dữ liệu
Vd: Cho xem các khách hành ở thành phố london.
1. Dạng lệnh:
Select ... from <bảng> Where <biểu thức lọc> order by ...
2. Biểu thức lọc: là một biểu thức (expression) bao gồm các trường, hằng, hàm và các dấu
phép toán cho kết quả là True hoặc False.
Vd:
City = N’London’
VD: Cho xem các đơn đặt hàng trong tháng 7
Month(OrderDate) = 7
3. Các phép toán dùng trong biểu thức lọc
a. Phép so sánh: >, <, =, >=, <=, <> hoặc !=, !>, !<,
Vd:
- Cho xem các khách hàng không ở thành phố london. (customers, city)
- Cho xem các mặt hàng có giá trên 50$ (products, UnitPrice)
b. Phép between <gt1> and <gt2>: Có giá trị nằm giữa gt1 và gt2 (bao gồm cả gt1, gt2)
Vd: Cho xem các mặt hàng có giá từ 70 đến 100
UnitPrice between 70 and 100
c. Phép toán IN (thuộc, có trong danh sách, tập hợp): x∈ {a1, a2, ...}
- Phép toán IN dùng để kiểm tra một giá trị (phần tử) có thuộc trong tập các giá trị không.
- Cách viết: IN (Gt1, Gt2, ...)
IN (select <1 cot> from ....)
- Vd:
+ Cho xem các khách hàng ở thành phố London, Madrid, Paris.
+ Cho xem các mặt hàng có giá 15, 22, 25, 30.
+ Cho xem các đơn đặt hàng trong tháng 7, 10, 11
+ Cho xem tên các mặt hàng (ProductName) đã được bán
+ Cho xem tên các mặt hàng có giá cao nhất.
d. Phép toán Like
- Cách viết: Like <chuỗi mẫu>
- Phép Like dùng để kiểm tra một giá trị có giống một mẫu giá trị nào đó không?
- Hai ký hiệu sử dụng trong mẫu : % (đại diện cho các ký tự còn lại kể từ vị trí của nó), _
(đại diện cho một ký tự tại vị trí của nó)
- Vd:
- Cho xem DS các KH ở các City có tên bắt đầu bằng chữ M
- ...................................................................................M hoặc B hoặc L
[MBL]
--------------------------------------------------------------------K, L, M, N,O,P, Q, R
[K-R]
- ..................................mã CustomerID (5 ký tự) có ký tự E ở vị trí thứ 2
e. Phép toán liên kết các mệnh đề.
Mệnh đề là các biểu thức lọc (so sánh, Between, In, Like)
- AND: và
- OR: hoặc
- NOT: không, ngược lại.
Vd:
Cho xem các mặt hàng có giá >= 70 và <= 100
Unitprice between 70 and 100
(UnitPrice >= 70) AND (UnitPrice <= 100)
UnitPrice >= 70 and <= 100
Cho xem các mặt hàng có giá >= 50 và tên bắt bằng chữ M
Cho xem các khách hàng Không ở thành phố London, Berlin, Madrid
Cho xem tên các mặt hàng chưa từng được bán.
Bài 5. Lệnh Select dùng để thống kê dữ liệu
1. Các hàm thống kê: Count(*), Sum, AVG, Max, Min, ...
Vd:
- Cho xem số lượng các Nhân viên, Nhà cung cấp, ...)
- Tính giá trung bình các mặt hàng trên 30,...
- Cho xem tổng tiền bán hàng.
Chú ý: Các thống kế dạng này thường cho ra một giá trị (scalar), trong lệnh Select chỉ lấy
ra một hoặc nhiều cột chứa hàm thống kê
2. Thống kê dữ liệu có phân nhóm
a. Vd: Theo dõi số lượng khách hàng ở mỗi City
b. Các lệnh này thường chỉ lấy hai cột: cột phân nhóm (city) và cột thống kê (sum,
count ...)
City
Count
Hue
5
Da Nang
10
c. Dạng lệnh
Select <cột phân nhóm>, <cột thống kê>
From <Bảng>
Where ...
Group by <cột phân nhóm>
Having
Vd:
- Theo dõi số lượng khách hàng ở mỗi City
- Tính tổng tiền bán được của mỗi đơn hàng (orderID)
- Đếm số mặt hàng trong mỗi đơn hàng (orderID)
- Đếm số lượt khách mua hàng trong mỗi tháng (month(OrderDate))
- Đếm số khách mua hàng trong mỗi tháng (month(OrderDate))
3. Thống kê dữ liệu có phân nhóm và lọc dữ liệu
a. Trường hợp 1: dùng bộ lọc sau Where (bình thường)
VD: Theo dõi sl kh ở các City có tên bắt đầu bằng chữ M
VD: Cho xem sl kh ở các City có SL trên 1 người
b. Trường hợp 2: Dùng Having áp dụng cho bộ lọc trên hàm thống kê
Select city, count(*) from customers
group by city
Having count(*) > 1
Bài ... Lệnh Select SQL lấy dữ liệu từ nhiều bảng
1. Liên kết các bảng
- Các bảng muốn liên kết với nhau phải có trường chung (Kiểu, size, thường là chung
tên).
- Nếu hai bảng A, B không có trường chung, muốn liên kết với nhau ta phải tìm một bảng
C (có ít nhất 2 trường, đó là hai trường khóa của A và B) làm trung gian.
- Hai bảng đã liên kết với nhau thì được xem như là một bảng
Vd:
Order details
Orders
OrderID
OrderID
ProductID
Products
ProductID
* Cách liên kết.
+ Liên kết bảng A và bảng B có trường chung
A inner join B ON A.Trgc = B.Trgc
2. Dạng lênh:
Select ... from <bang1> inner join <bang2>
ON <Bang1>.<trgC> = <bang2>.<TrgC>
inner join <bang3> On ...
Where ....
Group by ...
Having ...
Order by ...
1.Vd: Cho xem tên hàng, tên chủng loại hàng, đơn giá các mặt hàng.
Các bảng cần lấy DL: Products, Categories trường chung CategryoID
Select ProductName, CategoryName, UnitPrice
From Products inner join Categories
On Products.CategoryID = Categories.CategoryID
Chú ý:
- Có thể đặt bí danh (alias) để viết gọn tên bảng.
Cách đặt bí danh: <tên bảng> <bí danh>
select productName, categoryName, UnitPrice from
Products A inner join categories B
on A.CategoryID = B.CategoryID
- Nếu một trường thuộc hơn 1 bảng thì ta phải chỉ rõ trường đó thuộc bảng nào.
Cách viết <tên bảng>.<tên trường> hoặc <tên bí danh>.<tên trường>
Vd:
Select ProductName, CategoryName, UnitPrice , B.CategoryID
from Products A inner join Categories B
on A.CategoryID = B.CategoryID
3. Các ví dụ:
a. Cho xem tên hàng, đơn giá, tên CompanyName cung cấp hàng đó.
(products và Suppliers)
b. Cho xem Mã đơn hàng (OrderID), ngày bán hàng (OrderDate), tên các mặt hàng
(ProductName), Số lượng (Quantity) và đơn giá (UnitPrice), tiền bán
(Quantity*UnitPrice).
(Orders, products, [order details])
c. Tính tổng tiền của mỗi hóa đơn và Cho xem tên công ty sở hữu các hóa đơn này.
supplierIDb. Cho xem Mã đơn hàng (OrderID), ngày bán hàng (OrderDate), tên các mặt
hàng (ProductName), Số lượng (Quantity) và đơn giá (UnitPrice), tiền bán
(Quantity*UnitPrice).
(Orders, products, [order details])
companyNamed.
Cho xem tên các mặt hàng đã được bán.
products[Order details],products
4. Các loại kết nối
- Inner join (hay dùng nhất – kết nối bằng)
- Left join
- Right join
- Full join
- Cross join
a. Inner Join: Các Rec. của bảng 1 sẽ lần lượt nối với các Rec. của bảng 2 có cùng trg
chung. Đây là phép kết nối hay dùng nhất.
A
A1
A2
A3
A2
B
B1
B2
B3
B4
(bang 1)
B
B1
B2
B1
B3
B5
C
C1
C2
C3
C4
C3
A B C
A1, B1, C1
A1, B1, C3
A2, B2, C2
A3, B3, C4
(bang 2)
b. Left Join: Lấy ra các rec. do kết nối Inner Join và thêm rec ở bảng bên trái không được
kết nối.
A B C
B
C
A
B
A1, B1, C1
B1
C1
A1 B1
A1, B1, C3
B2
C2
A2 B2
A2, B2, C2
B1
C3
A3 B3
A3, B3, C4
B3
C4
A2 B4
A2, B4, Null
B5
C3
(bang 1)
(bang 2)
c. Right Join: Lấy ra các rec. do kết nối Inner Join và thêm rec ở bảng bên phải không
được kết nối
B C A
B1, C1, A1
B2, C2, A2
B1, C3, A1
B3, C4, A3
B5, C3, Null
d. Full Join: Lấy ra các rec. do kết nối Inner Join và thêm rec ở bảng không được kết nối.
A B C
A1, B1, C1
A1, B1, C3
A2, B2, C2
A3, B3, C4
A2, B4, Null
Null B5, C3
e. Cross join: Tạo ra một bảng là tích đềcác của các rec ở hai bảng.
Số Rec. của bảng kết quả là tích số Rec. của hai bảng
Kết nối này xuất hiện khi ta không khai báo một kết nối nào cả.
5. Cách viết khác thay cho kết nối Join.
a. VD:
Cho xem tên hàng, đơn giá, tên công ty cung cấp hàng
Thay vì viết:
Select ProductName, UnitPrice, CompanyName
from Products A inner join Suppliers B
ON A.SupplierID = B.SupplierID
Ta viết:
Select ProductName, UnitPrice, CompanyName
from Products A, Suppliers B
Where A.SupplierID = B.SupplierID AND UnitPrice > 30
b. Nhận xét:
- Liệt kê danh sách các bảng sau from, cách nhau dấu phẩy
- Liên kết các bảng (=) đưa vào trong phát biểu Where.
- Where vừa dùng để liên kết các bảng, vừa dùng để lọc dữ liệu. Dùng AND để nối.
- Dấu = Inner join, *= Left join ; =* Right join;
Bài ... Các lệnh SQL làm thay đổi dữ liệu
Lệnh Select – SQL làm nhiệm vụ:
+ Trích ra một phần dữ liệu (phép chiếu).
+ Thống kê
+ Trích lọc dữ liệu (chọn)
+ Tìm kiếm
Không làm thay đổi dữ liệu
1. Lệnh hủy bảng
Drop Table <tên_bảng>
VD: Drop table customers1
2. Lệnh tạo cấu trúc của bảng
Create Table <tên_bảng>
Khó nhớ
Xem script tạo bảng trong Q.A. Ít khi phải sử dụng
3. Lệnh hủy Record trong một bảng
Dạng lệnh:
Delete [from] <tên_bảng> [Where <Bthức lọc>]
VD: Hủy tất cả các khách hàng ở bảng customers_1
VD: Hủy tất cả các khách hàng ở bảng customers_1 ở city London, Paris
Chú ý: khi thực hành các lệnh thay đổi dữ liệu ta nên tạo một bảng Copy
Cách viết Select * into <Table_copy> from <table_goc>
Vd: Select * into customers_1 from Customers
Cách viết Select * into #<Table_copy> from <table_goc>
(tạo bảng ảo – tồn tại tạm thời trong một phiên làm việc)
VD:
Select * into cus1 from customers
Select * into #cus1 from customers
Vd:
Hủy tất cả các Record của bảng cus1
Hủy các đơn hàng trong tháng 7 (orders1)
Hủy các mặt hàng không ai mua cả. (products1)
Hủy các mặt hàng thuộc loại SeaFood có giá từ 50 đến 100
4. Lệnh Update (cập nhật, sửa DL ): thay đổi giá trị trong các trường.
a. DL:
Update <tên_bảng> Set <tên_trg1> = <biểu_thức gtrị 1>,
<tên_trg2>= <..>, ... [Where <Đk Lọc>]
b. VD:
Cập nhật giá trong bảng Products1 tăng thêm 50% UnitPrice
Cập nhật giá (Gia_moi) trong bảng Products_1 tăng thêm 50% UnitPrice
Chỉ cho mặt hàng thuộc loại confections
5. Lệnh chèn thêm Record (bổ sung Record)
a. Dạng lệnh
Insert into <tên_bảng>(Trg1, Trg2, ...) Values (trị1, trị2, ...)
Vd: Bổ sung một Rec. vào bảng categories_1
Insert into categories_1( CategoryName)
values( N'Thức uống đóng chai')
b. Chú ý:
- Trường có thuộc tính Identity là trường mà giá trị của nó tự động tăng lên khi bổ sung
thêm Rec nên ta không nhập DL cho trường này.
c. Bổ sung một loạt các Rec.
Insert into <tên_bảng>[(Trg1, Trg2, ...) ]
Select [Trg1, Trg2,..] ... from <bangkhac>
Vd:
Bổ sung các Rec. trong Categories vào Categories_1
C1.
Insert into Categories_1 Select * from Categories
C2
Insert into Categories_1 (CategoryID, CategoryName, Description)
Select CategoryID, CategoryName, Description from Categories
6. Tổng kết các lệnh SQL cơ bản
Một bài toán QL CSDL luôn có 4 chức năng:
- Bổ sung record (Insert)
- Cập nhật, sửa đổi (Update)
- Hủy Record (delete)
- Tìm kiếm và đọc DL (select)
a. Xuất dữ liệu ra dưới dạng bảng
Select * into <ten bang> from ....
b. Bảng ảo:
- Chỉ tồn tại trong một phiên làm việc của SQL Server
- Lưu trong CSDL TempDB
- Được đối xử như bảng thật
- cách tạo:
Select * into #<ten bang> from ....
7. Các vấn đề còn lại
Hàm Case: tương tự như hàm IF trong Excel
(Xem phần Help)
Simple CASE function:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
Searched CASE function:
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
VD: Nhập giá mới cho các mặt hàng
Các mặt hàng categoryID = 1,2 thêm 30% (x 1.3)
Các mặt hàng categoryID = 3,5 thêm 50% (x 1.3)
Con lại thêm 70%
(x 1.7)
Update Categories_1
Set gia_moi = UnitPrice*(
Case CategoryID
When 1 then 1.3
When 2 then 1.3
When 3 then 1.5
...
else 1.7
)
Tương tự
IF(Boolean_expression , result_expression , else_result_expression )
Vd: Đếm số mặt hàng có giá trên >= 50$ và dưới 30$ (nằm trên 1 bảng)
Select count(*) from products where UnitPrice >= 50
Select Count(*) from products where UnitPrice < 50
Chương 4: View
1. View
- View là một cách để lưu lại các câu lệnh Select SQL .
- View là một giải pháp để xem dữ liệu một cách tổng hợp, dưới nhiều khía cạnh từ các
bảng.
- View được xem như một bảng thứ cấp. View là bảng chỉ lưu các trường. Dữ liệu trong
view được tạo ra khi mở (open) xem.
- View cung cấp dữ liệu cho Reports, các truy vấn, các thủ tục, hàm.
2. Tạo view bằng E.M: Giống như tạo Query trong Access, VisualFox.
Vd: Tạo view cho xem CategoryName, ProductName, UnitPrice của các Products
- Chon new View
- Chọn các bảng dữ liệu, chọn các trường, lọc (filter), sort (sắp xếp)
- Lưu ..
Ưu điểm:
- Nhanh, dễ làm.
- tự động phát sinh câu lệnh Select SQL.
Nhược điểm
- Làm việc tại máy chủ.
- Không lập trình được.
- Lấy vừa đủ bảng để tạo View (query)
3. Tạo view bằng lệnh (QA)
a. DL
Create View <Tên_view>
As
<Select SQL>
b.Vd:
Tạo view cho xem CategoryName, ProductName, UnitPrice của các Products
Create view V_XemSP
As
Select CategoryName, ProductName, UnitPrice
From Products
Where UnitPrice > 50
4. Sửa đổi View
C1. Dùng E.M (dễ ợt)
C2. Dùng lệnh
Alter view <tên view>
As
Câu lệnh SQL mới
5. Hủy View
Drop View <ten_View>
Chú ý:
- Trong CSDL Master có bảng hệ thống sysobjects lưu thông tin về các objects (table,
view, procedure, ...) trong Server
VD:
Xem thông tin về View V_Tuan1
- Ta cần quan tâm đến các trường Name, ID, Xtype.
Bài ... Thủ tục chứa (Stored Procedure)
1. Stored Procedure: (SP)
- Giống các module trong các ngôn ngữ lập trình khác. Mỗi Module đảm nhiệm một
công việc cụ thể nào đó.
- Cho phép mở rộng ngôn ngữ SQL
- Giúp các ứng dụng (Web, CSDL) chạy nhanh hơn, bảo mật tốt hơn, chống lại kỹ thuật
tấn công SQL Injection.
2. Tạo thủ tục chứa (dùng lệnh)
a. Dạng lệnh:
Create Procedure <Tên_thủ_tục>
<@Tham số 1> <Kiểu 1>,
<@Tham số 2> <Kiểu 2>, ...
As
Begin
<Các Lệnh SQL>
end
Chú ý:
- Các tham số (parameters) viết cách dấu phẩy.
- Tên tham số (tên biến) bắt đầu bằng dấu @.
- Kiểu DL giống các kiểu của các trường trong bảng (table)
- Lệnh SQL gồm các lệnh Select, Update, delete, Insert, drop, Create, Exec, declare, ...
b.VD: Thủ tục tính diện tích HCN
* Phiên bản1:
3. Sửa đổi thủ tục (giống view)
Alter Procedure <Tên_thủ_tục>
...
4. Hủy thủ tục (giống view, table)
Drop Procedure <Tên_thủ_tục>
5. Chạy (run, execute, thực thi) thủ tục
C1. <tên_thủ_tục> <giá trị1>, <giá trị 2>, ...
(các giá trị tương ứng với các tham số theo thứ tự)
Vd: SP_DTHCN 8, 3
C2. Exec <tên_thủ tục> ....
Vd: Exec Sp_DTHCN 5,6
C3.<tên_thủ_tục> <@tham số > = <giá trị>, ....
Vd: Sp_DTHCN @r = 5, @d = 6
C4. Exec <tên_thủ_tục> <@tham số > = <giá trị>, ....
Lệnh Exec dùng để thực thi một câu lệnh viết dưới dạng chuỗi (‘...’)
VD: Viết lệnh xem thông tin khách hàng.
C1: Select * from customers
C2: Exec ('select * from Customers')
4. Một vài ví dụ
VD1: Cho xem ds các khách hàng ở city nào đó .
Vd2: Cho xem các mặt hàng có unitPrice nằm trong khoảng nào đó.
Vd3: Cho xem các mặt hàng có ProductName bắt đầu (kết thúc, chứa) chuỗi ký tự
nào đó.
Vd4: Cho xem các record của bảng DL nào đó
5. Biến trong SQL
a. Lệnh khai báo biến:
Declare <@Tên_biến> <kiểu>
Vd: Declare @s varchar(100), ...
Chú ý: - Tên biến phải bắt đầu bằng chữ @
- Các kiểu DL tương tự như các kiểu DL trong bảng.
b. Gán giá trị cho biến
Set <@Tên_biến> = <biểu thức>
Vd: Set @s = 'Select * from customers'
VD: Viết lại TT Tính diện tích HCN
Phiên bản 2:
Viết lại TT cho xem các record của bảng DL nào đó
6. Lệnh If ... else
If (BT ĐK đúng)
Lệnh X
[Else
Lệnh Y ]
7. Lệnh lặp
while (BTĐK đúng)
Lệnh X
Chú ý:
- Các BTĐK phải được bao bởi dấu ngoặc (...)
- Nếu lệnh X là lệnh ghép từ nhiều lệnh thì phải bao bởi begin ... end
Begin
...
End
Vd: Viết lệnh xem dữ liệu của bảng Customers hoặc suppliers tùy theo sự chọn lựa của
người dùng
* Phiên bản 1
Chú ý:
Gán giá trị ban đầu cho tham số
@ts <kiểu> = <giá trị ban đầu>
Vd: @chon tinyInt = 0
* PB2
Alter procedure SP_xem_Cus_Sup
@chon tinyInt = 0
as
if (@chon = 0)
Select * from customers
else
Select * from Suppliers
8. Tham số vào và tham số ra
- Tham số có từ output là tham số ra (giống var trong Pascal, byRef VB)
- Tham số không có từ output là tham số đầu vào.
Vd: Viết thủ tục tính diện tích hình chữ nhật sao cho có thể sử dụng tiếp kết quả.
Phiên bản 3
ALTER procedure SP_DTHCN
@d real ,@r real, @kq real output
as
Set @kq = @d*@r
- Gọi thủ tục có tham số ra output
declare @kq real
exec sp_DTHCN 5, 6, @kq output
select (@kq * 7) +15
6. Ví dụ
- Viết viết thủ tục xem khách hàng ở tất cả hoặc một tp cụ thể nào đó.
- Viết thủ tục xem DL của bảng Customers hoặc Suppliers tùy thuộc yêu cầu người dùng.
a. Viết thủ tục cho xem khách hàng ở thành phố có tên bắt đầu bằng ký tự nào đó. (like)
b. Viết TT cho xem tên các mặt hàng bán được trong tháng X nào đó.
c. Viết TT với tham số vào là @chon. Nếu @chon = 1 thì cho xem danh sách các khách
hàng, nếu @chon = 0 thì xem danh sách nhân viên bán hàng.
d. Viết TT bổ sung thêm một khách có contactname nào đó vào bảng Customers_2
e. Viết TT bổ sung thêm một chủng loại hàng nào đó vào bảng categories_2
f. Viết TT tăng giá thêm X ($) cho mặt hàng có mã ProductID nào đó trong bảng
Products_2
g. Viết TT nhập lại số lượng (quantity) một mặt hàng có mã ProductID nào đó trong một
đơn hàng có mã OrderID nào đó. [order details_2]
h. Viết TT hủy một Rec. ra khỏi bảng [order details_2] có productID và OrderID nào đó.
Bài ... Function (hàm)
1. Hàm: Là một đối tượng trong CSDL SQL. Hàm nói chung là giống thủ tục (Chức
năng, cách viết, hiệu quả sử dụng). Khác với thủ tục, hàm trả về một giá trị hoặc một
bảng DL. Hàm có thể tham gia vào biểu thức như một toán hạng
2. Cách viết hàm trả về một giá trị
a. Lệnh SQL:
Create Function <Tên hàm>(
Tham_số_1 Kiểu 1,
Tham_số_2 Kiểu 2,
... ) ReturnS KiểuDL
As
Begin
Lệnh xử lý
...
Return <Giá trị trả về>
End
b. Khác biệt so với TT
- Các tham số đặt trong cặp ngoặc (...)
- Kiểu DL của hàm
- Từ khóa Begin ... end bao lấy các lệnh của hàm
- Lệnh Return <giá trị trả về>
Chú ý: Ta sử dụng hàm như một toán hạng trong biểu thức.
c. VD:
- Viết hàm tính diện tích HCN.
d. Gọi hàm.
- Hàm không phải là lệnh (Thủ tục được xem như là lệnh)
- Hàm tham gia vào biểu thức tính toán như một toán hạng.
- Gọi hàm dbo.<tên_hàm>(giá trị 1, giá trị 2, ....)
VD: Print dbo.F_DTHCN (10, 20)*500
VD:
select dbo.F_DTHCN(4,2)
Print dbo.F_DTHCN(4,2)
d.Một vài VD:
Viết hàm trả về số khách hàng ở một quốc gia (country) nào đó.
Viết lệnh cho xem tên các thành phố có số KH nhiều nhất
Viết lệnh cho xem các mặt hàng có giá trên mức trung bình
e. Bài tập:
- Viết hàm trả về tổng tiền bán được trong tháng nào đó.
- Viết hàm trả về số lượng các đơn đặt hàng trong tháng X năm Y nào đó.
- Viết hàm trả về số lượng khách hàng trong thành phố X nào đó.
- Viết hàm trả về số các mặt hàng trong một đơn hàng có mã OrderID nào đó.
- ...
3. Hàm trả về một bảng DL
a. Dạng lệnh:
Create Function <Tên_hàm>(<Các tham số> <kiểu>)
Returns Table
As
Return (<Lệnh Select SQL>)
b. Ví dụ:
Viết hàm trả về bảng dữ liệu chứa danh sách các KH của một thành phố bắt đầu bằng ký
tự nào đó.
c. Gọi hàm: Hàm trả về một bảng DL thực chất là một bảng (table, View). Cho nên ta sử
dụng hàm này như một Table, view
Vd:
select * from dbo.F_KH_City('Ba')
Viết hàm cho xem dữ liệu các mặt hàng có đơn giá bằng một giá trị nào đó
Bài ... Kiểu dữ liệu Cursor (con trỏ)
1. Kiểu dữ liệu Cursor. Kiểu dữ liệu cho phép lưu một tập các record trong bộ nhớ.
Khác với bảng, Ta có thể duyệt qua lần lượt các record. Điều này giúp ta có thể lấy
dữ liệu từ một rec. bất kỳ
Vd:
- Cho xem record thứ k trong bảng dữ liệu
- Cho xem n recs. bắt đầu từ rec. thứ k.
Giải quyết:
- Trong MySQL có lệnh Xlý vấn đề trên.
- Dùng đối tượng ADO.Net, vấn đề sẽ giải quyết rất đơn giản.
- Sử dụng biến Cursor
SQL
ADO.net
Web
appliaction
2. Các lệnh liên quan đến kiểu DL cursor
a. Khai báo biến kiểu cursor: để lưu tập các rec.
Declare <Tên cursor> CURSOR
....
FOR <câu lệnh Select >
b. Mở cursor
Open <Tên cursor>
c. Đọc dữ liệu từ Cursor (đọc một rec trong bieens)
Fetch
Absolute ±n | Relative ±n >
From <Tên cursor>
[into <danh sách các biến>]
• Giải thích
- Next: đi đến rec. tiếp theo
Lúc mới open thì Next là rec số 1
- Prior: đi đến rec. trước đó
- first : Rec. đầu tiên (số 1)
- last: rec. cuối cùng
- absolute n: đi đến rec thứ n kể từ rec. đầu tiên (n có thể là biến )
- absolute - n: đi đến rec. thứ n kể từ rec. cuối cùng
- relative n: đi đến re. thứ n kể từ rec. đang trỏ (đang làm việc)
- relative -n: nhảy ngược đến re. thứ n kể tù rec. đang trỏ
• Muốn lưu DL vào biến ta phải khai báo danh sách các biến
d. Đóng cursor. CLOSE <tên_cursor> (Tam thoi)
e. Huỷ cursor. DeAllocate <tên_cursor>
VD: Lấy ContactName, City của Rec thứ 2 trong bảng customers
và lưu vào hai biến tuơng ứng
Declare Cur1 Cursor
For Select customerID , companyName
From customers
Open Cur1
Declare @CustomerId nchar(5)
Declare @CompanyName nVarchar(40)
Fetch absolute 2 from Cur1 Into @CustomerId , @CompanyName
4. Hàm @@Fetch_status dùng để kiểm tra lệnh Fetch có thành công không.
Nếu @@Fetch_status = 0 thì thành công, ngược lại (=1, = -1) không thành công.
VD: Viết thủ tục lấy n rec. của bảng customers bắt đầu từ rec. thứ k (chỉ lấy hai
trường ContactName, city) và lưu kết quả vào bảng tbl_tam in ra màn hình.
3. Mở rộng lệnh khai báo cursor
a. Cách mở rộng
Declare <tên cursor> Cursor
<mở rộng>
For Select …
b. Các từ mở rộng
• loại Cursor.
o Forward-only (mặc nhiên)
o Scroll (duyệt hai chiều)
Chú ý: nếu dùng Absolute hoặc Relative thì phải có Scroll
• Phạm vi Cursor.
o Local : địa phương, cục bộ (mặc nhiên)
o Global (ngoài thủ tục)
• Kiểu Cursor
o Static (mặc nhiên): Cắt đứt quan hệ
o Dynamic (động): Duy trì quan hệ
Customers
cur_customer
s
Khi Dynamic bảng DL và cursor có quan hệ ràng buộc nhau. Cụm từ current of
cursor> cho phép làm việc với rec. trên bảng DL ứng với rec. trên cursor
BT: Lấy ra từ Customers, n Recs kể từ Rec. thứ k
Lưu vào hai biến tương ứng ContactName và City, xuất ra màn hình
Customers
CurKH
Create Procedure SPCursor_HS
@k smallint, @n SmallInt
As
Declare CurSorHS Cursor Scroll Global
For Select Mahs, tenhs, Malop from Hoc_sinh
Open CurSorHS
Declare @Mahs char(3), @tenhs Nvarchar(3), @Malop Char(2)
Declare @dem SmallInt
Fetch Absolute @k From CurSorHS Into @Mahs , @tenhs , @Malop
Set @dem = 1
While (@@Fetch_Status = 0 and @dem <= @n)
Begin
Print @Mahs + @tenhs + @Malop
Fetch Next From CurSorHS Into @Mahs , @tenhs , @Malop
Set @dem = @dem +1
End
Close CurSorHS
Deallocate CurSorHS
Alter procedure trich_DL
@k smallint, @n smallInt As
declare cur_customers Cursor scroll
for select ContactName, city from customers
Open cur_customers
Declare @ContactName Nvarchar(40), @city Nvarchar(15)
Fetch absolute @k from cur_customers into @ContactName, @city
Declare @dem smallInt , @Flag tinyInt
set @dem = 1
set @Flag = 1
if (Exists(select * from sysobjects where Name = 'Tbl_tam'))
Drop table Tbl_tam
while( (@@Fetch_status = 0) and (@dem <= @n))
Begin
If (@Flag = 1)
begin
select @ContactName as ContactName , @city as city into Tbl_Tam
set @Flag = 0
end
else
Insert into Tbl_Tam(ContactName, city) values(@ContactName, @city)
Fetch next from cur_customers into @ContactName, @city
set @dem = @dem + 1
end
Close cur_customers
DeAllocate cur_customers
Bài ...: Transaction (chuyển tác)
1. Transaction có thể xem như là một tập các lệnh SQL được thực hiện đồng thời.
2. VD: Lệnh rút tiền từ tài khoản A rồi chuyển vào tài khoản B. Hai lệnh phải thực
hiện đồng thời. Nếu một trong hai lệnh bị lỗi thì cả hai phải được huỷ bỏ
3. Các lệnh dùng để tạo transaction
Begin tran[saction] [<tên>]: bắt đầu một chuyển tác
Commit [tran[saction]] [<tên>]: : Kết thúc một chuyển tác
Save trans[saction] <tên điểm đánh dấu>: đánh dấu vị trí để quay lại
Rollback tran[saction] [<điểm đánh dấu>]Quay lại vị trí đã đánh dấu (từ đầu)
Thường ta kết hợp với câu lệnh If và hàm kiểm tra lỗi @@error (0: không lỗi, #0:
lỗi) trong chuyển tác.
Cú pháp:
Begin tran
Lệnh 1
Lệnh 2
…
If (@@error <> 0 )
Rollback tran
Else
--Thưc hiện lệnh
Commit
Vd: Viết TT hủy đồng thời hai record trong hai bảng Cate1 và cate2
Bài .... Quản trị và bảo mật dữ liệu
I. Quản trị CSDL trong SQL
* Nhiệm vụ chủ yếu: đảm bảo dữ liệu được đưa vào hoạt động an toàn, thông suốt.
Cu the
- Khắc phục sự hư hỏng vật chứa dữ liệu: ổ cứng, .
- Khắc phục lỗi trong bộ máy CSDL
- Phải nắm một ít về các ngôn ngữ lập trình ứng dụng CSDL để hỗ trợ cho người
phát triển ứng dụng. Các ngôn ngư cần biết: SQL, VB.net, C#, ADO.net
- Sao lưu dữ liệu (Backup)
- Phục hồi (Restore)
- Biến đổi DL và truyền đi
- Tạm tháo CSDL ra khỏi Server (Detach)
- Gắn lại DL vào server (Attach)
- Tạo User, account cho người dùng
- Phải có kiến thức về Hệ điều hành Windows server, Linux
Active Directory
1. Sao lưu dữ liệu (Backup)
B1. Chạy EM \ Chọn CSDL
B2. Nhấp phải \ All tasks\ Back up…
2. Phục hồi (Restore)
B1. Chạy EM \ Chọn Databases