Tải bản đầy đủ (.pdf) (14 trang)

Bài 8 Quản trị dữ liệu trong SQL Server pps

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 (335.9 KB, 14 trang )

SQL Server
Bài 8 Quản trị dữ liệu trong SQL Server
Mục tiêu:
Hoàn thành bài này chúng ta có thể –
Làm việc được với biểu thức điều kiện và các toán tử logic trong T-SQL
Sử dụng T-SQL để chèn dữ liệu vào bảng
Cách cập nhật dữ liệu đã có trong bảng
Cách xóa dữ liệu trong bảng
Cách export và import dữ liệu bằng công cụ Enterprise Manager
Giới thiệu
Trong phần trước chúng ta đã biết cách thiết kế, tạo và quản lý bảng sử dụng công cụ Enterprise
Manager cũng như T-SQL và công cụ Query Analyzer. Chúng ta cũng đã hiểu các khái niệm toàn
vẹn thực thể (Entity Intergrity) và toàn vẹn Domain, biết được cách triển khai chúng. Cuối cùng
là cách xóa và sửa thiết kế của một bảng.
Trong bài này chúng ta sẽ học cách thêm, sửa và xóa dữ liệu từ các bảng. Chúng ta cũng sẽ nắm
được sự đa dạng của các câu lệnh điều kiện và các toán tử được hỗ trợ bởi SQL Server 2000.
Chúng ta sẽ nghiên cứu cú pháp của các câu lệnh INSERT, UPDATE và DELETE và áp dụng nó
vào các ví dụ minh họa. Khái niệm join các bảng cũng sẽ được giới thiệu và cuối cùng chúng ta
sẽ học cách import và export dữ liệu từ SQL Server 2000 sử dụng DTS Wizard.
8.1 Biểu thức điều kiện và các toán tử logic trong T-SQL
Như chúng ta đã biết, Transact-SQL (T-SQL) là một tập hợp các câu lệnh mở rộng của Microsoft.
Nó cho phép chúng ta có thể thực hiện các chức năng lập trình bên trong các CSDL quan hệ được
cung cấp bởi SQL Server 2000.
Mệnh đề WHERE được sử dụng để lọc dữ liệu. Mệnh đề WHERE cho phép sử dụng các biểu
thức điều kiện kết hợp với các toán tử logic. Một biểu thức (expression) được cấu thành từ các
toán tử và các toán hạng, nó được SQL Server tính toán sau đó trả về một giá trị. Biển thức đơn
giản có thể là một hằng số (constant), biến (variable), cột (column), hoăc một giá trị vô hướng.
Các toán tử có thể được dùng để nối hai hay nhiều biểu thức đơn giản thành một biểu thức phức
tạp.
Mệnh đề WHERE sẽ được nói chi tiết hơn trong bài sau
Một biểu thức có thể gồm có một trong những thành phần sau:


 Constant: là một ký hiệu diễn tả một giá trị xác định. Constant có thể bao gồm ký tự và chữ
số (a-z, A-Z, và n 0-9) hoặc các ký hiệu (!, @, #, ). Các hằng ký tự và hằng datetime phải
nằm trong dấu nháy đơn, trong khi các hằng chuỗi nhị phân (binary strings) và hằng số
(numeric) thì không cần dấu nháy.
Quản trị dữ liệu trong SQL Server 131
SQL Server
 Column: Tên cột trong bảng. Trong biểu thức có thể sử dụng tên cột; không nhất thiết phải
chỉ rõ tên cột gồm đầy đủ bốn phần như tên Server, tên CSDL, tên owner.
 Unary Operator: Toán tử mả chỉ làm việc với một toán hạng (toán tử một ngôi):
Toán tử + xác định một số dương. Toán tử – xác định một số. Toán tử ~ xác định phần bù
của một số. Toán tử một ngôi chỉ áp dụng với các biểu thức được đánh giá theo kiểu numeric.
 Binary Operator: Là toán tử xác định cách kết hợp 2 biểu thức để mang lại một kết quả đơn
(toán tử hai ngôi). Một binary _operator có thể là một toán tử số học, toán tử gán(=), toán tử
bít, toán tử so sánh, toán tử logíc, toán tử kết hợp các chuỗi (+), hoặc toán tử đơn nguyên. Có
thể xem thêm Operators để biết thêm chi tiết
Bảng 8.1 liệt kê các toán tử so sánh có thể sử dụng được trong các câu lệnh T-SQL cùng với
WHERE.
Toán tử Ý nghĩa
= Bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
<> Khác
! Phủ định
Bảng 8.1 Các toán tử so sánh
Ví dụ:
PRICE >100
NAME LIKE ‘DAVID’
GRADE <> ‘FAIL’

Cũng có thể sử dụng các toán tử đại diện(wildcard operators) trong bảng 8.2
Wildcard Mô tả Ví dụ
‘_’ Một ký tự Select UDesc From UserTypes
Where UDesc Like ‘C_’
% Nhiều ký tự Select UserName From Users
Where UserName Like ‘'AL%'’
[] Một ký tự thuộc khoảng đặt trong
ngoặc vuông
Select * from CourseMaterial where
YearSem Like 'Sem[1-2]'
[^] Một ký tự mà không thuộc khoảng
đặt trong ngoặc vuông
Select * from CourseMaterial where
YearSem Like 'Sem[^1-2]'
Bảng 8.2: Các toán tử đại diện
Quản trị dữ liệu trong SQL Server 132
SQL Server
Với nhu cầu chọn lọc dữ liệu. Mệnh đề WHERE sủ dụng trong câu lệnh T-SQL sẽ hoạt động như
một bộ lọc và hoàn toàn thỏa mãn các nhu cầu chọn lọc dữ liệu. Nó không thể đứng đơn lẻ nhưng
lại rất hữu ích khi kết hợp với các câu lênh T-SQL. Mệnh đề Where có thể coi như là mệnh đề để
phát biểu điều kiện tìm kiếm.
8.1.2 Logical operators
Các toán tử logíc được hỗ trợ bới T-SQL là AND, OR, và NOT.
Toán tử AND và OR được sử dụng để kết hợp các biểu thức điều kiện trong mệnh đề WHERE.
NOT phủ định điều kiện tìm kiếm. AND kết hợp hai điều kiện và trả về TRUE khi và chỉ khi cả
hai điều kiện đều là true, OR cũng kết hợp hai đièu kiện, nhưng nó trả về TRUE khi một trong
hai điều kiện là true.
Nếu trong câu lệnh sử dụng nhiều hơn một toán tử logíc, NOT được đánh giá đầu tiên, sau đó là
AND, và cuối cùng là OR.
8.2 Sử dụng T-SQL để chèn dữ liệu

Chúng ta đã biết cách tạo bảng, sửa cấu trúc của bảng và thêm các ràng buộc, bây giờ chúng ta sẽ
học cách thêm dữ liệu vào bảng. Chúng ta có thể thêm dữ liệu vào bảng hay cũng có thể lấy dữ
liệu từ một bảng đã tồn tại để đưa vào một bảng mới.
8.2.1 Sử dụng INSERT để chèn dữ liệu
Cú pháp để thêm dữ liệu vào bảng sử dụng T-SQL là:
Cú pháp:
INSERT [INTO] <Table_name> VALUES <values>
Trong đó:
[INTO] là một từ khoá tuỳ chọn (optional keyword) đặt giữa INSERT và bảng đích.
<Table_name> là tên bảng mà dữ liệu sẽ được chèn vào.
<Values> danh sách các giá trị cho các cột của bảng.
Ví dụ:
INSERT INTO jobs VALUES (‘Graphics Artist’, 25, 100)
Bảng jobs bao gồm 4 cột: job_id, job_desc, min_lvl, max_lvl. Trong đó, cột job_id được thiết đặt
là cột Identity, vì vậy câu lệnh trên chèn một dòng với 3 giá trị ứng với 3 cột còn lại trong bảng
jobs. Hình 8.1 chỉ ra cách thực thi câu lệnh trên trong trình Query Analyzer.
Quản trị dữ liệu trong SQL Server 133
SQL Server
Hình 8.1: Thêm dữ liệu vào bảng
Chúng ta có thể xem dữ liệu mới được thêm vào bằng công cụ Enterprise Manager.
Hình 8.2: Xem kết quả nhập liệu
8.2.2 Sử dụng SELECT INTO để thêm dữ liệu từ một bảng vào một bảng khác
Một cách nhập liệu nữa, chúng ta có thể lấy dữ liệu từ một bảng đã tồn tại để thêm vào một bảng
mới bằng câu lệnh INSERT SELECT.
Cú pháp như sau
INSERT <table name> SELECT <column list> FROM <tablename2>
Trong đó, table name là tên của bảng mà ta muốn thêm dữ liệu, column list là danh sách cột được
chọn từ bảng nguồn và tablename2 là tên bảng nguồn.
CREATE TABLE author_details ( au_id varchar(11), au_lname varchar(40))
GO

INSERT author_details SELECT authors.au_id, authors.au_lname FROM authors
Quản trị dữ liệu trong SQL Server 134
SQL Server
Hình 8.3: Thêm dữ liệu từ một bảng vào bảng khác
Chúng ta cũng có thể lấy dữ liệu từ một bảng để thêm vào một bảng khác như dưới đây:
INSERT INTO Sales (Stor_id) SELECT stor_id FROM Stores
Trong ví dụ này, chỉ dữ liệu trong cột stor_id của bảng Stores sẽ được thêm vào bảng Sales
chứ không phải dữ liệu của tất cả các cột sẽ đựoc thêm vào.
8.3 Sử dụng T-SQL để cập nhật dữ liệu vào bảng
Bên cạnh việc thêm dữ liệu vào bảng ta còn có thể chỉnh sửa dữ liệu bằng câu lệnh UPDATE.
Việc cập nhật là cần thiết với bất cứ khi nào dữ liệu cần được thay đổi. Ví dụ địa chỉ của một sinh
viên bất kỳ có thể thay đổi hoặc Batchno cũng có thể bị thay đổi. Trong mọi trường hợp chúng ta
sẽ không thêm dữ liệu để thể hiện các thay đổi mà thay vào đó ta sẽ sửa trực tiếp vào dữ liệu có
sẵn.
8.3.1 Cập nhật dữ liệu cho một dòng
Cú pháp cập nhật dữ liệu cho một dòng sử dụng T-SQL là:
Cú pháp:
UPDATE <Table_name>
SET <Column_name = Value>
[WHERE <Search condition>]
Tham số được mô tả như sau:
<Table_name> là tên bảng nơi dữ liệu được cập nhật.
<Value> giá trị mới sẽ được thay vào.
Giả sử chúng ta muốn tăng giá của một quyển sách lên 25%. Chúng ta cũng biết title id của quyển
sách đó và biết cả tên trường chứa giá. Câu lệnh để thực hiện sẽ là:
UPDATE titles set price=price + (25/100*price) where title_id='TC7777'
Dữ liệu trong bảng trước và sau khi cập nhật có thể xem bằng công cụ Enterprise Manager. Câu
lệnh T-SQL được thực hiện trong công cụ Query Analyzer như trong hình 8.5.
Quản trị dữ liệu trong SQL Server 135
SQL Server

Hình 8.4: Dữ liệu trước khi cập nhật
Hình 8.5: Cập nhật dữ liệu vào một dòng

Hình 8.6: Dữ liệu sau khi cập nhật
8.3.2 Câp nhật nhiều dòng trong một bảng
Chúng ta có thể cập nhật nhiều dòng trong một bảng bằng cách bỏ mệnh đề WHERE hoặc sử
dụng điều kiện kết hợp trong WHERE để cập nhật nhiều dòng dữ liệu. Khi chúng ta không sử
dụng mệnh đề WHERE, tất cả các dòng trong bảng sẽ được tác động bởi câu lệnh UPDATE.
Ví dụ,
UPDATE publishers
SET city = 'Atlanta', state = 'GA'
Sẽ cập nhật tất cả các giá trị của city thành Atlanta và giá trị của state thành GA.
Quản trị dữ liệu trong SQL Server 136
SQL Server
Hình 8.7: Cập nhật nhiều dòng
Tương tự, để thay tất cả phiên bản (edition) của các quyển sách thành 1, chúng ta sử dụng câu
lệnh sau:
UPDATE Books
SET Edition = 1
8.3.3 Cập nhật với mệnh đề JOIN
Chúng ta cũng có thể thay đổi dữ liệu dựa trên dữ liệu từ 2 bảng khác nhau. Có thể làm được việc
này bằng cách sử dụng mệnh đề Join. JOINS được sử dụng để lấy dữ liệu từ 2 hoặc nhiều bảng
dựa trên quan hệ logíc giữa các bảng. Đặc trưng của Join là chỉ ra một Khóa Ngoại (Foreign key)
liên quan giữa các bảng. Nó định nghĩa cách mà 2 bảng được quan hệ với nhau trong câu truy
vấn:
 Chỉ ra cột liên quan giữa các bảng để JOIN. Đặc trưng của JOIN là chỉ định một Khóa Ngoại
(Foreign Key) từ một bảng và các trường khoá liên quan tới nó từ bảng kia.
 Chỉ ra toán tử so sánh giữa các cột.
JOIN có thể sử dụng cùng với FROM hoặc WHERE với cú pháp như sau:
Table_A AS Table_Alias_A

<join_type>
Table_B AS Table_Alias_B
ON
Table_Alias_A.<Common_Field> = Table_Alias_B.<Common_Field>
Trong đó,
Table_A và Table_B – Tên của các bảng để join
AS Table_Alias – bí danh (alias) của bảng. Một bí danh định nghĩa trong một truy vấn có thể sử
dụng thay cho tên bảng và như vậy không cần phải chi rõ tên đầy đủ của bảng.
Có 3 kiểu JOINS khác nhau:
Quản trị dữ liệu trong SQL Server 137
SQL Server
 Inner Joins
 Outer Joins
 Self Joins
A. Inner Joins
Trong Inner Join các dòng của 2 bảng được kết hợp lại và đưa vào trong kết quả nếu các dòng của
cả 2 bảng thoả mãn điều kiện kết hợp dựa trên cột kết hợp.
Một ví dụ của cập nhật các dòng sử dung Inner Join như sau:
Hình 8.8: Cập nhật sử dụng INNER Join
B. Outer Joins
Inner Join trả về dòng chỉ khi có ít nhât một dòng của cả 2 bảng thoả mãn điều kiện kết hợp. Inner
Joins loại bỏ những dòng mà không thoả mãn điều kiện kết hợp. Outer Joins, trả về tất cả các
dòng của ít nhất một trong những bảng xuất hiện sau FROM thêm vào đó là những dòng phù hợp
với bất kỳ điều kiện đặt trong WHERE hoặc HAVING.
Left Outer Join trả về tất cả các dòng ở bảng bên trái và những dòng thoả mãn điều kiện kết hợp ở
bảng bên phải.
The Right Outer Join trả về tất cả các dòng ở bảng thứ 2 và bỏ qua những dòng không thoả mãn
điều kiện kết hợp ở bảng đầu tiên.
Hình 8.9: Outer Joins
C. Self Join

Self-join là một kiểu của inner join. Được sử dụng để tìm những dòng trong một bảng mà có quan
hệ với các dòng khác trong chính bảng đó. Một bảng mà được Join với chính nó thì được gọi là
self-join.
Quản trị dữ liệu trong SQL Server 138
SQL Server
8.4 Sử dụng T-SQL để xoá dữ liệu khỏi bảng
Chúng ta không chỉ có thể thay đổi dữ liệu trong bảng của SQL Server 2000, mà chúng ta còn có
thể xóa dữ liệu khỏi bảng. Xoá dữ liệu bằng câu lệnh T-SQL là rất đơn giản như mô tả sau đây.
8.4.1 Xoá một dòng
Cú pháp để xoá một dòng khỏi bảng sử dụng T-SQL như sau:
Cú pháp:
DELETE FROM <Table_name> [WHERE <Search_Condition>]
Ở đây <Table_name> là tên bảng sẽ được xoá bớt các dòng. WHERE được sử dụng để đưa ra
các điều kiện. Điều kiện phải trả về dòng sẽ bị xoá.
Ví dụ:
DELETE FROM pub_info WHERE pub_id=9999
Câu lệnh dưới đây sẽ xoá dòng có publisher id là 9999.
Hình 8.10: Xoá một dòng khỏi bảng
Chú ý: Trong khi xoá dòng khỏi bảng, cần xem xét sự toàn vẹn tham chiếu có được duy trì
không. Nếu có những dòng của bảng khác đang được liên kết với dòng bị xoá, sẽ không thể xoá
được các dòng này nếu như nó gây ra sự không toàn vẹn trong tham chiếu.
8.4.2 Xoá nhiều dòng
Nếu WHERE không được sử dụng trong câu lệnh DELETE, tất cả các dòng trong bảng sẽ bị xoá
hết. Thông thường, mệnh đề WHERE được sử dụng để lọc ra những dòng dữ liệu cần phải xóa.
Hình 8.11: Xoá nhiều dòng khỏi bảng
Quản trị dữ liệu trong SQL Server 139
SQL Server
8.4.3 Sử dụng TRUNCATE TABLE để xoá tất cả dữ liệu khỏi bảng
TRUNCATE TABLE là câu lệnh mà chúng ta có thể sử dụng để xoá tất cả các dòng khỏi bảng.
Câu lệnh TRUNCATE TABLE chạy nhanh hơn và sử dụng ít tài nguyên hệ thống và transaction

log hơn câu lệnh DELETE.
Mặc dù TRUNCATE TABLE loại bỏ hoàn toàn các dòng khỏi bảng, tuy nhiên cấu trúc bảng và
các cột, các ràng buộc, indexes, … là vẫn còn nguyên
Hình 8.12 chỉ ra câu lệnh được thực hiện trong công cụ Query Analyzer.
Hình 8.12: Truncate table
8.5 Importing và Exporting dữ liệu trên SQL Server 2000
Có thể sử dụng các nguồn dữ liệu từ bên ngoài đưa vào trong SQL Server 2000. Quá trình này
được gọi là importing dữ liệu. Cũng có thể gửi dữ liệu từ SQL Server 2000 ra các nguồn khác.
Quá trình này được gọi là exporting dữ liệu.
Chúng ta có thể import và export dữ liệu bằng một trong hai cách sau:
 Chọn Import/Export công cụ trong bộ công cụ Microsoft SQL Server hoặc
 Chọn Import/Export trong công cụ Enterprise Manager
Chọn Import/Export trong bộ công cụ Microsoft SQL Server sẽ khởi động Data
Transformation Services (DTS) Import/Export Wizard. Công cụ wizard sẽ hướng dẫn người
sử dụng thực hiện các chức năng của DTS gồm import, export, … dữ liệu và các đối tượng giữa
nhiều nguồn dữ liệu khác nhau.
Cách khác là chúng ta có thể chọn một bảng riêng và chọn Import/Export rồi gọi Data
Transformation Services (DTS) Import/Export Wizard sau đó thực hiện các bước theo hướng
dẫn của DTS để import hoặc export dữ liệu.
Hình 8.13 chỉ cách DTS được sử dụng để import hoặc export dữ liệu.
Quản trị dữ liệu trong SQL Server 140
SQL Server
Figure 8.13: Data Transformation Services Import/Export Wizard
Nguồn dữ liệu đích của quá trình export có thể là CSDL MS Access, bảng tính Excel hoặc thậm
chí cả các tệp văn bản thông thường. SQL Server 2000 hỗ trợ khá nhiều nguồn dữ liệu để export.
Tương tự như vậy chúng ta cũng có thể import dữ liệu từ các nguồn ở trên.
Quản trị dữ liệu trong SQL Server 141
SQL Server
Tóm tắt
 T-SQL cung cấp nhiều toán tử và nhiều biểu thức điều kiện có thể làm việc cùng nhau.

 Mệnh đề WHERE hoạt động như một bộ lọc trong các câu lệnh T-SQL.
 Các toán tử logíc được hỗ trợ bởi T-SQL là AND, OR, và NOT.
 Các toán tử AND và OR được sử dụng để kết hợp các biểu thức điều kiện trong câu lệnh
WHERE. NOT phủ định biểu thức điều kiện. AND kết hợp 2 điều kiện và trả về TRUE khi
và chỉ khi cả hai điều kiện đều là true. OR cũng kết hợp 2 điều kiện nhưng nó trả về TRUE
khi một trong 2 điều kiện là true.
 Câu lệnh T-SQL để thêm dữ liệu vào bảng là INSERT [INTO] <Table_name> VALUES
<values>
 Câu lệnh T-SQL để lấy dữ liệu từ một bảng đã có thêm vào một bảng mới là INSERT <table
name> SELECT <column list> FROM <tablename2>
 Câu lệnh T-SQL để cập nhật một dòng trong bảng là UPDATE <Table_name> SET
<Column_name = Value> [WHERE <Search condition>]
 Nếu WHERE không được sử dụng trong câu lệnh UPDATE, thì tất cả các dòng trong bảng sẽ
bị cập nhật.
 Mệnh đề Joins được sử dụng để lấy dữ liệu từ 2 hay nhiều bảng dựa trên quan hệ logíc giữa
các bảng.
 Câu lệnh để xoá một dòng khỏi bảng là DELETE FROM <Table_name> [WHERE
<Search_Condition>]
 TRUNCATE TABLE là câu lệnh chúng ta có thể sử dụng để xoá tất cả các dòng trong bảng.
 Chúng ta có thể import và export dữ liệu bằng một trong 2 cách sau:
• Chọn Import/Export trong bộ công cụ Microsoft SQL Server hoặc
• Chọn Import/Export trong công cụ Enterprise Manager
Quản trị dữ liệu trong SQL Server 142
SQL Server
Kiểm tra kiến thức
1. Các toán tử logíc được hỗ trợ bởi T-SQL là ___________, _______ và _______.
2. _________ là ký hiệu diễn tả một giá trị xác định.
3. Công cụ ______________ wizard hướng dẫn người sử dụng thực hiện các chức năng của
DTS gồm import, export, … dữ liệu và các đối tượng giữa nhiều nguồn khác nhau.
4. Nếu ____________không được sử dụng cùng với câu lệnh DELETE, thì tất cả các dòng trong

bảng sẽ bị xoá hết.
5. Khi có nhiều hơn một toán tử logíc được sử dụng trong một câu lệnh, __________ được đánh
giá trước, sau đó là _______ và cuối cùng là ________.
6. _________ chạy nhanh hơn và sử dụng ít tài nguyên hệ thống và transaction log hơn câu lệnh
DELETE.
7. Một bảng là join với chính nó thì được gọi là ______________.
8. Có ba kiểu join là _____________ , _________________ và ____________.
9. Chúng ta có thể lấy dữ liệu từ một bảng đã có thêm vào một bảng mới bằng câu lệnh
______________.
10. Gửi dữ liệu từ một CSDL của SQL Server 2000 tới một nguồn dữ liệu khác được gọi là
__________.
Quản trị dữ liệu trong SQL Server 143
SQL Server
Trang này được chủ ý để trống.
Quản trị dữ liệu trong SQL Server 144

×