87
from DMHang i inner join CTHD od
on i.MaH = od.MaH
WHERE TenH = 'LAPTOP')
Xoá toàn bộ dữ liệu trong bảng
Câu lệnh DELETE không chỉ đnh điều kiện đối với các dòng dliệu cần xoá
trong mệnh đề WHERE sẽ xoá toàn bộ dữ liệu trong bng. Thay vì sdụng câu lệnh
DELETE trong trường hợp này, ta có th sử dụng câu lệnh TRUNCATE pháp
như sau:
TRUNCATE TABLE tên_bảng
Ví dụ:
truncate table tmp1
2.5. View
2.5.1 Khái niệm
Khung nhìn một bảng tạm thời, cấu trúc như một bng, khung nhìn
không lưu trữ dữ liệu mà nó được tạo ra khi sử dụng, khung nhìn đối tượng thuộc
CSDL.
Khung nhìn được tạo ra từ câu lệnh truy vấn dữ liệu (lệnh SELECT), truy vấn
t một hoặc nhiều bảng dữ liệu.
Khung nhìn được sử dng khai thác dữ liệu như mt bảng dliệu, chia sẻ
nhiu người dùng, an toàn trong khai thác, không nh hưởng dữ liệu gốc.
thể thực hiện truy vấn dữ liệu trên cấu trúc của khung nhìn.
Như vậy, một khung nhìn trông ging như một bảng với một tên khung nhìn
và là một tập bao gồm các dòng và các ct. Điểm khác biệt giữa khung nhìn và bảng
là khung nhìn không được xem là mt cấu trúc lưu trữ dữ liệu tồn tại trong cơ sở dữ
liệu. Thực cht dữ liệu quan sát được trong khung nhìn được lấy từ các bảng thông
qua câu lệnh truy vấn dữ liệu.
Câu lệnh CREATE VIEW được sử dụng để tạo ra khung nhìn có pháp
như sau:
CREATE VIEW tên_khung_nhìn[(danh_sách_tên_cột)] AS
câu_lệnh_SELECT
88
Ví dụ:
create view thongtinkhachhang
as
select tenk, (year(getdate()) - year(ngaysinh)) as tuoi, dc
from khachhang
Thực hiện câu truy vấn trên khung nhìn vừa tạo ra:
select * from thongtinkhachhang
Nếu trong câu lệnh CREATE VIEW, ta không chỉ định danh ch các tên cột
cho khung nhìn, tên các cột trong khung nhìn s chính là tiêu đề các cột
trong kết qu của câu lệnh SELECT. Trong trường hp tên các ct của khung
nhìn đươc chỉ đnh, chúng phải có cùng s lượng với số lượng cột trong kết quả của
câu truy vấn.
Ví dụ:
create view thongtinkhachhang (tenk, tuoi, dc)
as
select tenk, year(getdate()) - year(ngaysinh), dc
from khachhang
u ý:
Phải đặt tên cho các ct ca khung nhìn trong các trường hợp sau đây:
Trong kết quả của câu lệnh SELECT có ít nhất mt cột được sinh ra bởi một
biu thức (tức là không phi là mt tên ct trong bng sở) và cột đó không được
đặt tiêu đề.
89
Tồn tại hai cột trong kết quả ca câu lệnh SELECT có cùng tiêu đề cột.
2.5.2. Thêm, cập nhật, xóa dữ liệu trong VIEW
Đối với một s khung nhìn, tathể tiến hành thc hiện các thao tác cập nhp,
thêm xoá dliệu. Thực chất, những thao tác này sđược chuyển thành những
thao tác trên các bng cơ sở và có tác động đến những bảng cơ sở.
Vmặt thuyết, đ thể thực hiện thao tác bổ sung, cp nhật và xoá, mt
khung nn trước tiên phi thomãn các điều kiện sau đây:
Các thành phần xuất hiện trong danh sách chọn ca câu lệnh SELECT phải
các ct trong các bảng cơ sở. Trong danh sách chọn không được chứa c biểu
thc nh toán, các hàm gộp.
Ngoài nhng điều kiện trên, các thao tác thay đổi đến dữ liệu thông qua khung
nhìn còn phải đảm bảo thoả mãn các ràng buộc trên các bng s, tức là vn đảm
bo tính toàn vẹn dữ liệu.
Mặc dù thông qua khung nhìn ththc hiện được thao tác bsung và cp
nhật dữ liu cho bảng sở nhưng chỉ hạn chế đối với nhng khung nhìn đơn giản.
Đối với những khung nhìn phức tạp thì thường không thực hiện được; hay nói cách
khác là d liệu trong khung nhìn là chỉ đọc.
2.5.3. Thay đổi định nghĩa khung nhìn
Câu lệnh ALTER VIEW dùng đđịnh nghĩa lại khung nhìn cu trúc n
sau:
ALTER VIEW n_khung_nhìn [(danh_sách_n_cột)] AS
Câu_lệnh_SELECT
Ví dụ: Ví dụ dưới đây định nga lại khung nhìn thongtinkhachhang
alter view thongtinkhachhang
as
select tenk, (year(getdate()) - year(ngaysinh)) as tuoi,dc,gioitinh
from khachhang
u ý: lệnh CREATE VIEW không làm thay đổi các quyn đã được cấp phát
cho người sử dụng trước đó.
2.5.4. Xóa khung nhìn
90
Câu lệnh DROP VIEW dùng để xóa khung nhìn có cu trúc như sau:
DROP VIEW tên_khung_nhìn
Ví dụ:
drop view thongtinkhachhang
u ý: Nếu một khung nhìn bxoá, toàn b những quyền đã cấp phát cho
người sử dụng trên khung nhìn cũng đồng thời bxoá. Do đó, nếu ta tạo lại khung
nhìn thì phải tiến hành cp phát lại quyền cho người s dụng.
2.6. Thủ tục lưu trữ (Stored procedure)
Th tục lưu trữ là một đối tượng trong CSDL, bao gồm nhiều câu lệnh T-SQL
được tập hợp lại với nhau thành mt nhóm, và tất c các lệnh này sđược thực thi
khi thủ tục lưu trữ được thực thi.
Với thtục lưu trữ, một phần nào đó khnăng ca ngôn ngữ lập trình được
đưa vào trong ngôn ngữ SQL. Thủ tục lưu trữth có các thành phần sau:
Các cấu trúc điều khiển (IF, WHILE, FOR) có thể được sử dụng trong thủ tc.
Bên trong thtục lưu trữ thể sử dụng các biến ntrong ngôn nglập trình
nhằm lưu giữ các giá trị nh toán được, các giá trị được truy xuất được tcơ sở dữ
liệu. Một tập các câu lệnh SQL được kết hợp lại với nhau thành một khối lệnh bên
trong một thủ tục. Một thủ tc có thể nhận các tham số truyền vào cũng như thể
trvề các g trị thông qua các tham số (như trong các ngôn ngữ lập trình).
Khi một thủ tục lưu trữ đã được đnh nghĩa, có thể được gọi thông qua tên
th tục, nhận các tham số truyền vào, thực thi c câu lệnh SQL bên trong
th tc và có thể trả về các giá trị sau khi thực hiện xong.
Li ích của việc sử dụng thủ tục lưu trữ:
SQL Server ch biên dịch các thủ tục lưu trữ một lần và sdụng lại kết qu
bn dịch này trong các ln tiếp theo trừ khi người dùng những thiết lập khác.
Việc sử dụng lại kết quả biên dịch không làm ảnh hưởng đến hiu suất hệ thống khi
th tc lưu trữ được gọi liên tc nhiều lần.
Th tục lưu trữ được phân tích, tối ưu khi tạo ra nên việc thực thi chúng nhanh
hơn nhiều so với việc phải thc hiện một tập rời rạc các câu lệnh SQL
ơng đương theo cách thông tng.
Th tục lưu trữ cho phép chúng ta thực hiện cùng mt yêu cầu bằng một câu
lệnh đơn giản thay vì phải sử dụng nhiều dòng lệnh SQL. Điều này slàm giảm
91
thiu sự lưu thông trên mng.
Thay cấp phát quyền trực tiếp cho người sử dụng trên các câu lệnh SQL và
trên các đi tượng cơ sở d liệu, ta có thcấp phát quyn cho người sử dụng thông
qua các thủ tục lưu trữ, nhờ đó tăng khả năng bảo mật đối với h thống.
Các th tục lưu trữ trả về kết quả theo 4 cách:
Sử dụng các tham số output
Sử dụng các lệnh trả về giá trị, các lệnh này luôn trả về giá trị số nguyên.
Tập các giá trtrả vể của mi u lệnh SELECT trong thủ tục u trữ hoặc
của quá trình gọi một thủ tục lưu trữ khác trong một thủ tục lưu trữ.
Một biến con trỏ toàn cục có thể tham chiếu từ bên ngoài thtc.
2.6.1. To thủ tục lưu tr
Th tc lưu trđược tạo thông qua câ.u lệnh CREATE PROCEDURE.
CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số)]
[WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]
AS
c_câu_lệnh_của_thủ_tục
Trong đó:
WITH RECOMPILE: yêu cầu SQL Server biên dịch lại thủ tục lưu trữ mỗi khi
được gi. WITH ENCRYPTION: yêu cu SQL Server mãa thủ tục lưu trữ.
c_câu_lệnh_của_thủ_tục: Các lnh T-SQL. Các lệnh này th
nm trong cặp BEGIN…END hoặc không.
Ví dụ: Giả sử cần thực hin các công việc theo thứ tự như sau:
Nhp một đơn đặt hàng mi của khách hàng mã khách hàng là 3
Nhp các chi tiết đơn đặt hàng cho đơn đặt hàng trên.
Để thc hiện các công việc trên chúng ta cnc câu lệnh như sau:
Trước tiên nhp đơn đặt hàng cho khách hàng mã khách hàng là 3
insert into orders
values(3, '7/22/2008')
Tiếp theo thêm các chi tiết đơn đặt hàng choa đơn này. Giả sử rằng đơn đặt