Hướng dẫn thực hành Cơ sở dữ liệu - Bài số 2

Hướng dẫn thực hành CSDL  
BÀI THỰC HÀNH SỐ 2:  
Thao tác dữ liệu với T-SQL cơ bản  
Mục lục  
1.Structured Query Language (SQL) ..............................................................................................3  
1.1.SQL là ngôn ngữ của cơ sở dữ liệu quan hệ........................................................................ 3  
1.2.Vai trò của SQL .......................................................................................................................3  
1.3. Giới thiệu sơ lược về Transact SQL (T-SQL)....................................................................4  
1.3.1.Ngôn ngữ định nghĩa dữ liệu ( Data Definition Language – DDL)......................... 4  
1.3.2.Ngôn ngữ điều khiển dữ liệu (Data control language – DCL) ..................................5  
1.3.3. Ngôn ngữ thao tác dữ liệu (Data manipulation language – DML). ........................6  
1.3.4. Cú pháp của T-SQL.........................................................................................................................7  
1.3.5.Các kiểu dữ liệu........................................................................................................................8  
1.3.6.Biến (Variables) .......................................................................................................................9  
1.3.7.Hàm (Function) .......................................................................................................................10  
1.3.8.Các toán tử (Operators).........................................................................................................10  
1.3.9.Các thành phần điều khiển (Control of flow) .................................................................11  
1.3.10.Chú thích (Comment)..........................................................................................................11  
1.3.11.Giá trị NULL...................................................................................................................................11  
2.Ngôn ngữ thao tác dữ liệu – DML......................................................................................................12  
2.1.Câu lệnh SELECT..............................................................................................................................12  
2.1.1.Danh sách chọn trong câu lệnh SELECT................................................................................13  
2.1.2.Mệnh đề FROM..............................................................................................................................15  
2.1.3.Mệnh đề WHERE - điều kiện truy vấn dữ liệu.....................................................................17  
2.1.4.Phép hợp (UNION) .......................................................................................................................21  
2.1.5.Phép nối ............................................................................................................................................24  
2.1.6.Các loại phép nối.............................................................................................................................24  
1
Hướng dẫn thực hành CSDL  
2.1.7.Phép nối theo chuẩn SQL-92 ...................................................................................................26  
2.1.8.Mệnh đề GROUP BY.................................................................................................................28  
2.1.9. Truy vấn con (Subquery) ........................................................................................................ 30  
2.2.Thêm, cập nhật và xóa dữ liệu...................................................................................................... 32  
2.2.1.Thêm dữ liệu ............................................................................................................................33  
2.2.2. Cập nhật dữ liệu......................................................................................................................... 33  
2.2.3.Xóa dữ liệu ...............................................................................................................................34  
3. Ngôn ngữ định nghĩa dữ liệu – DDL................................................................................................ 34  
3.1. Tạo bảng................................................................................................................................................35  
3.2.Các loại ràng buộc ............................................................................................................................36  
3.2.1.Ràng buộc CHECK........................................................................................................................ 37  
3.2.2.Ràng buộc PRIMARY KEY........................................................................................................38  
3.2.3. Ràng buộc FOREIGN KEY........................................................................................................38  
3.3.Sửa đổi định nghĩa bảng.....................................................................................................................39  
3.4.Xóa bảng................................................................................................................................................40  
3.5.Khung nhìn - VIEW...........................................................................................................................41  
3.6. Thêm, cập nhật, xóa dữ liệu trong VIEW...................................................................................41  
3.7.Thay đổi định nghĩa khung nhìn.....................................................................................................41  
3.8. Xóa khung nhìn .................................................................................................................................41  
2
Hướng dẫn thực hành CSDL  
1.Structured Query Language (SQL)  
1.1 SQL là ngô n ngữ của cơ sở dữ liệu quan hệ  
SQL, viết tắt của Structured Query Language (ngôn ngữ hỏi có cấu trúc), là công cụ sử dụng để  
tổ chức, quản lý và truy xuất dữ liệu đuợc lưu trữ trong các cơ sở dữ liệu. SQL là một hệ thống  
ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với cơ sở dữ liệu quan hệ.  
Khả năng của SQL vượt xa so với một công cụ truy xuất dữ liệu, mặc dù đây là mục đích ban đầu  
khi SQL được xây dựng nên và truy xuất dữ liệu vẫn còn là một trong những chức năng quan trọng  
của nó. SQL được sử dụng để điều khiển tất cả các chức năng mà một hệ quản trị cơ sở dữ liệu  
cung cấp cho người dùng bao gồm:  
Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ liệu, các cấu trúc lưu trữ và  
tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu.  
Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực hiện các thao  
tác truy xuất, bổ sung, cập nhật và loại bỏ dữ liệu trong các cơ sở dữ liệu.  
Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các thao tác của người sử  
dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu  
Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ sở dữ liệu nhờ đó  
đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật cũng như các lỗi của hệ  
thống.  
Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong các hệ thống cơ sở  
dữ liệu và là một thành phần không thể thiếu trong các hệ quản trị cơ sở dữ liệu. Mặc dù SQL  
không phải là một ngôn ngữ lập trình như C, C++, Java,... song các câu lệnh mà SQL cung cấp có  
thể được nhúng vào trong các ngôn ngữ lập trình nhằm xây dựng các ứng dụng tương tác với cơ sở  
dữ liệu.  
Khác với các ngôn ngữ lập trình quen thuộc như C, C++, Java,... SQL là ngôn ngữ có tính khai  
báo. Với SQL, người dùng chỉ cần mô tả các yêu cầu cần phải thực hiện trên cơ sở dữ liệu mà  
không cần phải chỉ ra cách thức thực hiện các yêu cầu như thế nào. Chính vì vậy, SQL là ngôn ngữ  
dễ tiếp cận và dễ sử dụng.  
1.2 Vai trò của SQL  
Bản thân SQL không phải là một hệ quản trị cơ sở dữ liệu, nó không thể tồn tại độc lập. SQL  
thực sự là một phần của hệ quản trị cơ sở dữ liệu, nó xuất hiện trong các hệ quản trị cơ sở dữ liệu  
với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng và hệ quản trị cơ sở dữ liệu.  
Trong hầu hết các hệ quản trị cơ sở dữ liệu quan hệ, SQL có những vai trò như sau:  
SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng thông qua các trình tiện  
ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến cơ sở dữ liệu và nhận kết quả  
3
Hướng dẫn thực hành CSDL  
trả về từ cơ sở dữ liệu  
SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng các câu lệnh SQL vào  
trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao tiếp với cơ sở dữ  
liệu  
SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ sở dữ liệu có thể  
quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ liệu, điều khiển truy cập cơ sở dữ  
liệu,...  
SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các hệ thống cơ sở dữ liệu  
khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng dụng phía máy khách  
với máy chủ cơ sở dữ liệu.  
SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các máy chủ Web cũng  
như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để tương tác với dữ liệu trong  
các cơ sở dữ liệu.  
SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ liệu phân tán, mỗi một  
hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gởi và nhận các yêu cầu truy  
xuất dữ liệu với nhau.  
SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong một hệ thống mạng máy  
tính với nhiều hệ quản trị cơ sở dữ liệu khác nhau, SQL thường được sử dụng như là một chuẩn  
ngôn ngữ để giao tiếp giữa các hệ quản trị cơ sở dữ liệu.  
1.3 Giới thiệu sơ lược về Transact SQL (T-SQL)  
Transact-SQL là ngôn ngữ SQL mở rộng dựa trên SQL chuẩn của ISO (International Organization  
for Standardization) và ANSI (American National Standards Institute) đư ợc sử dụng trong SQL  
Server khác với P-SQL (Procedural-SQL) dùng trong Oracle.  
SQL chuẩn bao gồm khoảng 40 câu lệnh. Trong các hệ quản trị cơ sở dữ liệu khác nhau, mặc dù  
các câu lệnh đều có cùng dạng và cùng mục đích sử dụng song mỗi một hệ quản trị cơ sở dữ liệu  
có thể có một số thay đổi nào đó. Điều này đôi khi dẫn đến cú pháp chi tiết của các câu lệnh có thể  
sẽ khác nhau trong các hệ quản trị cơ cơ sở dữ liệu khác nhau.  
T-SQL được chia làm 3 nhóm:  
1.3.1 Ngô n ngữ định nghĩa dữ liệu ( Data Definition Language – DDL)  
Đây là những lệnh dùng để tạo (create), thay đổi (alter) hay xóa (drop) các đối tượng  
trong CSDL. Các câu lệnh DDL thường có dạng:  
Create object  
Alter object  
Drop object  
Trong đó object có thể là: table, view, storedprocedure, function, trigger…  
4
Hướng dẫn thực hành CSDL  
Ví dụ: Câu lệnh Create sau sẽ tạo một bảng mới có tên là CAULACBO trong CSDL QLBongda.  
Bảng CAULACBO này gồm có ba cột: MACLB, TENCLB, MASAN, MATINH  
Lưu ý: Nếu trong SQL Server 2005 chưa có CSDL QLBongda, hãy tạo một CSDL có tên  
QLBongda theo hướng dẫn trong Chương 1.  
create table CAULACBO  
(
MACLB varchar(5) primary key,  
TENCLB nvarchar(100) not null,  
MASAN varchar(5) not null  
)
Để chạy câu lệnh SQL trên, mở một Query Editor, copy câu lệnh vào Query Editor, bôi  
đen toàn bộ câu lệnh và bấm F5.  
Tiếp theo, dùng lệnh alter để thay đổi cấu trúc bảng CAULACBO. Cụ thể là một thêm một cột mới  
có tên MATINH vào bảng CAULACBO.  
alter table CAULACBO1  
add MATINH varchar(5) not null  
Cuối cùng, dùng lệnh drop để xóa hoàn toàn bảng CAULACBO ra khỏi CSDL, nghĩa là toàn bộ  
định nghĩa bảng và các dữ liệu bên trong đều bị xóa.  
drop table CAULACBO1  
Lưu ý: Lệnh drop khác với lệnh delete. Lệnh delete chỉ xóa các dòng dữ liệu có trong  
bảng  
1.3.2 Ngô n ngữ điều khiển dữ liệu (Data control language – DCL)  
Đây là các lệnh quản lý quyền truy cập lên các object (table, view, storedprocedure…). Bao  
gồm:  
Grant  
Deny  
Revoke  
Ví dụ: Lệnh grant sẽ cấp quyền Select trên bảng CAULACBO trong CSDL QLBongda cho các  
Users thuộc Role public  
grant select on CAULACBO  
to public  
Sau khi thực hiên lệnh này, có Users trong Role public có thể thực hiện câu lệnh Select  
trên bảng CAULACBO trong CSDL QLBongda.  
Dùng lệnh deny để từ chối quyền select trên bảng CAULACBO trong CSDL QLBongda của  
5
Hướng dẫn thực hành CSDL  
các Users thuộc Role public  
deny select on caulacbo to public  
Sau khi thực hiện lệnh này, có Users trong Role public sẽ không thể thực hiện câu lệnh  
Select trên bảng CAULACBO trong CSDL QLBongDa.  
Dùng lệnh revoke để xóa bỏ các quyền được cấp hay từ chối trươc đó.  
revoke select on caulacbo to public  
Sau khi thực hiện lệnh này, các quyền được gán hay từ chối của Users trong Role public  
trên bảng CAULACBO trong CSDL QLBongDa sẽ được “xóa” hoàn toàn.  
1.3.3 Ngô n ngữ thao tá c dữ liệu (Data manipulation language – DML  
Đây là các lệnh phổ biến dùng để xử lý dữ liệu. Bao gồm:  
Select  
Insert  
Update  
Delete  
Ví dụ: a ) Câu lệnh sau sẽ lọc ra các câu lạc bộ có tên bắt đầu bằng chữ A trong bảng  
CAULACBO  
select *  
from CAULACBO as CLB  
where CLB.TENCLB like 'T%'  
Kết quả hiển thị  
Dấu * hàm ý là lựa chọn tất cả các cột của bảng Nhanvien. Toán tử like và ký tự đại diện  
sẽ được nói trong phần sau.  
b) Thực hiện thêm dữ liệu về một câu lạc bộ mới vào trong bảng CAULACBO  
insert into CAULACBO  
values(' SLNA', N'Sông Lam Nghệ An','TH','PY')  
Kết quả:  
c) Thực hiện cập nhật lai mã tinh của câu lạc bộ có maclb là SLNA  
update CAULACBO  
set MATINH = 'GL'  
where maclb like 'SLNA'  
Kết quả:  
6
Hướng dẫn thực hành CSDL  
d) Thực hiện sẽ xóa thông tin của câu lạc bộ có maclb là SLNA trong bảng CAULACBO  
delete CAULACBO where maclb = 'SLNA'  
Kết quả:  
1.3.4 Cú phá p của T-SQL  
Các đối tượng trong cơ sở dữ liệu dựa trên SQL (table, view, index, storedprocedure…) được xác  
định thông qua tên của đối tượng (hay còn gọi là identifier). Tên của các đối tượng là duy nhất  
trong mỗi cơ sở dữ liệu. Tên được sử dụng nhiều nhất trong các truy vấn SQL và được xem là nền  
tảng trong cơ sở dữ liệu quan hệ là tên bảng và tên cột.  
Có hai loại Identifiers một loại thông thường (Regular Identifier) và một loại gọi là Delimited  
Identifier, loại này cần có dấu "" hay dấu [] để ngăn cách. Loại Delimited được dùng đối với các  
chữ trùng với từ khóa của SQL Server (reserved keyword) hay các chữ có khoảng trống.  
Ví dụ:  
Select *  
From “My table”  
Where [sum] = 10  
Trong các cơ sở dữ liệu lớn với nhiều người sử dụng, khi ta chỉ định tên của một bảng nào đó  
trong câu lệnh SQL, hệ quản trị cơ sở dữ liệu hiểu đó là tên của bảng do ta sở hữu (tức là bảng do  
ta tạo ra). Thông thường, trong các hệ quản trị cơ sở dữ liệu này cho phép những người dùng khác  
nhau tạo ra những bảng trùng tên với nhau mà không gây ra xung đột về tên. Nếu trong một câu  
lệnh SQL ta cần chỉ đến một bảng do một người dùng khác sở hữu (hiển nhiên là phải được phép)  
thì tên của bảng phải được viết sau tên của người sở hữu và phân cách với tên người sở hữu bởi  
dấu chấm:  
tên_người_sở_hữu.tên_bảng  
Một số đối tượng cơ sở dữ liệu khác (như khung nhìn, thủ tục, hàm), việc sử dụng tên cũng tương  
tự như đối với bảng.  
Ta có thể sử dụng tên cột một cách bình thường trong các câu lệnh SQL bằng cảch chỉ  
cần chỉ định tên của cột trong bảng. Tuy nhiên, nếu trong câu lệnh có liên quan đến hai cột trở  
lên có cùng tên trong các bảng khác nhau thì bắt buộc phải chỉ định thêm tên bảng trước tên cột;  
tên bảng và tên cột được phân cách nhau bởi dấu chấm  
Ví dụ: Giả sử chúng ta có CSDL như sau:  
7
Hướng dẫn thực hành CSDL  
Để tìm ra thông tin cầu thủ ‘’ đá cho câu lạc bộ nào, ở vị trí nào, câu truy vấn như  
sau:  
select HOTEN,VITRI,TENCLB  
from CAUTHU,CAULACBO  
where (CAUTHU.MACLB=CAULACBO.MACLB)and (HOTEN = N'Nguyễn Công Vinh')  
1.3.5 Cá c kiểu dữ liệu  
Bảng dưới đây liệt kê một số kiểu dữ liệu thông dụng được sử dụng trong SQL.  
8
Hướng dẫn thực hành CSDL  
Char(n)  
Kiểu chuỗi với độ dài cố định  
Nchar(n)  
Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE  
Kiểu chuỗi với độ dài chính xác  
Varchar(n)  
Nvarchar(n)  
Kiểu chuỗi với độ dài chính xác hỗ trợ UNICODE  
31  
31  
Số nguyên có giá trị từ -2 đến 2  
Số nguyên có giá trị từ 0 đến 255.  
Int  
- 1  
Tinyint  
15  
15  
Số nguyên có giá trị từ -2  
đến 2  
Smallint  
Bigint  
– 1  
Số nguyên có giá trị từ -263 đến 263-1  
Kiểu số với độ chính xác cố định.  
Numeric  
Decimal  
Float  
Tương tự kiểu Numeric  
Số thực có giá trị từ -1.79E+308 đến 1.79E+308  
Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38  
Kiểu tiền tệ  
Real  
Money  
Bit  
Kiểu bit (có giá trị 0 hoặc 1)  
Datetime  
Smalldatetime  
Binary  
Kiểu ngày giờ (chính xác đến phần trăm của giây)  
Kiểu ngày giờ (chính xác đến phút)  
Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes)  
Dữ liệu nhị phân với độ dài chính xác (tối đa 8000 bytes)  
Dữ liệu nhị phân với độ dài chính xác (tối đa 2,147,483,647  
Varbinary  
Image  
bytes)  
Text  
Dữ liệu kiếu chuỗi với độ dài lớn (tối đa 2,147,483,647 ký tự)  
Dữ liệu kiếu chuỗi với độ dài lớn và hỗ trợ UNICODE  
Ntext  
(tối đa 1,073,741,823 ký tự)  
Ví dụ: Mỗi cột trong bảng sẽ chứa những dữ liệu thuộc về duy nhất một kiểu dữ liệu trong SQL  
Server. Cột nào chứa những dữ liệu thuộc kiểu nào sẽ được quy định lúc định nghĩa bảng.  
CREATE TABLE [dbo].[CAUTHU](  
[MACT] [numeric](18, 0) IDENTITY(1,1) PRIMARY KEY NOT  
NULL, [HOTEN] [nvarchar](100) NOT NULL,  
[VITRI] [nvarchar](50) NOT NULL,  
[NGAYSINH] [datetime] NULL,  
[DIACHI] [nvarchar](200) NULL,  
[MACLB] [varchar](5) NOT NULL,  
[MAQG] [varchar](5) NOT NULL,  
[SO] [int] NOT NULL,  
)
1.3.6 Biến (Variables)  
9
Hướng dẫn thực hành CSDL  
Biến trong T-SQL cũng có chức năng tương tự như trong các ngôn ngữ lập trình khác nghĩa là cần  
khai báo trước loại dữ liệu trước khi sử dụng. Biến được bắt đầu bằng dấu @ (Ðối với các biến  
toàn cục - global variable - thì có hai dấu @@)  
Ví dụ: Ví dụ dưới đây khai báo một biến có tên @SLCauLacBo thông qua từ khóa declare. Biến  
này lưu số câu lạc bộ đếm được thông qua hàm count. Sau đó in ra giá trị của biến.  
declare @SLCauLacBo int  
select @SLCauLacBo= count(*)  
from CAULACBO  
print @SLCauLacBo  
1.3.7 Hàm (Function)  
Có 2 loại hàm: một loại là được xây dựng sẵn trong SQL Server 2005 Edition (built-in) và một  
loại do người dùng tự định nghĩa (user-defined) Các hàm Built-In được chia làm 3 nhóm:  
Rowset Functions: Loại này thường trả về một object và được đối xử như một table. Ví dụ như  
hàm OPENQUERY sẽ trả về một recordset và có thể đứng vị trí của một table trong câu lệnh  
Select.  
Aggregate Functions: Loại này làm việc trên một số giá trị và trả về một giá trị đơn hay là các giá  
trị tổng. Ví dụ như hàm AVG sẽ trả về giá trị trung bình của một cột.  
Scalar Functions: Loại này làm việc trên một giá trị đơn và trả về một giá trị đơn. Trong loại này  
lại chia làm nhiều loại nhỏ như các hàm về toán học, về thời gian, xử lý kiểu dữ liệu String....Ví  
dụ như hàm MONTH('2002-09-30') sẽ trả về tháng 9.  
Các hàm User-Defined (được tạo ra bởi câu lệnh CREATE FUNCTION và phần body thường  
được gói trong cặp lệnh BEGIN...END) cũng được chia làm các nhóm như sau:  
Scalar Functions: Loại này cũng trả về một giá trị đơn bằng câu lệnh RETURNS.  
Table Functions : Loại này trả về một table  
1.3.8 Cá c toá n tử (Operators)  
Trong SQL Server các biểu diễn (expression) có thể xuất hiện nhiều toán tử. Độ ưu tiên của toán  
tử sẽ quyết định thứ tự thực hiện của các phép tính. Thứ tự thực hiện ảnh hưởng rất lớn đến kết  
quả.  
Bảng dưới đây mô tả các toán tử trong SQL Server 2005 Standard Edititon và mức độ ưu tiên của  
các toán tử đó.  
Level Operators  
1
2
3
4
5
* (Multiply), / (Division), % (Modulo)  
+ (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract),  
=, >, <, >=, <=, <>, !=, !>, !< (Comparison operators)  
NOT  
AND  
10  
Hướng dẫn thực hành CSDL  
6
7
ALL, ANY, BETWEEN, IN, LIKE, OR, SOME  
= (Assignment)  
1.3.9 Cá c thành phần điều khiển (Control of flow)  
Như BEGIN...END, BREAK, CONTINUE, GOTO, IF...ELSE, RETURN, WHILE…  
1.3.10 Chú thí ch (Comment)  
T-SQL dùng kí hiệu -- để chú thích cho một dòng đơn và kí hiệu /*…*/ để chú thích cho  
một nhóm dòng  
Ví dụ:  
/* Minh họa chú thích  
Chú thích cho một dòng đơn và một nhóm các dòng*/  
DECLARE @MyNumber int  
-- khai báo biến  
SET @MyNumber = 4 - 2 + 27  
-- kết quả là 29  
SELECT @MyNumber  
1.3.11 Giá trị NULL  
Một cơ sở dữ liệu là sự phản ánh của một hệ thống trong thế giới thực, do đó các giá trị dữ liệu  
tồn tại trong cơ sở dữ liệu có thể không xác định được. Một giá trị không xác định được xuất hiện  
trong cơ sở dữ liệu có thể do một số nguyên nhân sau:  
- Giá trị đó có tồn tại nhưng không biết.  
- Không xác định được giá trị đó có tồn tại hay không.  
- Tại một thời điểm nào đó giá trị chưa có nhưng rồi có thể sẽ có.  
- Giá trị bị lỗi do tính toán (tràn số, chia cho không,...)  
Những giá trị không xác định được biểu diễn trong cơ sở dữ liệu quan hệ bởi các giá trị NULL.  
Đây là giá trị đặc biệt và không nên nhầm lẫn với chuỗi rỗng (đối với dữ liệu kiểu chuỗi) hay giá  
trị không (đối với giá trị kiểu số). Giá trị NULL đóng một vai trò quan trọng trong các cơ sở dữ  
liệu và hầu hết các hệ quản trị cơ sở dữ liệu quan hệ hiện nay đều hỗ trợ việc sử dụng giá trị này.  
11  
Hướng dẫn thực hành CSDL  
2.Ngô n ngữ thao tá c dữ liệu – DML  
SQL được xem như là công cụ hữu hiệu để thực hiện các yêu cầu truy vấn và thao tác trên dữ  
liệu. Trong chương này, ta sẽ bàn luận đến nhóm các câu lệnh trong SQL được sử dụng cho mục  
đích này. Nhóm các câu lệnh này được gọi chung là ngôn ngữ thao tác dữ liệu (DML: Data  
Manipulation Language) bao gồm các câu lệnh sau:  
SELECT: Sử dụng để truy xuất dữ liệu từ môt hoặc nhiều bảng.  
INSERT: Thêm dữ liệu.  
UPDATE: Cập nhật dữ liệu  
DELETE: Xoá dữ liệu  
Trong số các câu lệnh này, có thể nói SELECT là câu lệnh tương đối phức tạp và được sử dụng  
nhiều trong cơ sở dữ liệu. Với câu lệnh này, ta không chỉ thực hiện các yêu cầu truy xuất dữ liệu  
đơn thuần mà còn có thể thực hiện được các yêu cầu thống kê dữ liệu phức tạp. Cũng chính vì  
vậy, phần đầu của chương này sẽ tập trung tương đối nhiều đến câu lệnh SELECT. Các câu lệnh  
INSERT, UPDATE và DELETE được bàn luận đến ở cuối chương  
2.1 Câ u lệnh SELECT  
Câu lệnh SELECT được sử dụng để truy xuất dữ liệu từ các dòng và các cột của một hay nhiều  
bảng, khung nhìn. Câu lệnh này có thể dùng để thực hiện phép chọn (tức là truy xuất một tập con  
các dòng trong một hay nhiều bảng), phép chiếu (tức là truy xuất một tập con các cột trong một  
hay nhiều bảng) và phép nối (tức là liên kết các dòng trong hai hay nhiều bảng để truy xuất dữ  
liệu). Ngoài ra, câu lệnh này còn cung cấp khả năng thực hiện các thao tác truy vấn và thống kê  
dữ liệu phức tạp khác.  
Cú pháp chung của câu lệnh SELECT có dạng:  
SELECT [ALL | DISTINCT][TOP n] danh_sá ch_chọn [INTO tên_bảng_mới]  
FROM danh_sá ch_bảng/khung_nhì n  
[WHERE điều_kiện] [GROUP BY danh_sá ch_cột] [HAVING điều_kiện]  
[ORDER BY cột_sắp_xếp]  
[COMPUTE danh_sá ch_hàm_gộp [BY danh_sá ch_cột]]  
Điều cần lưu ý đầu tiên đối với câu lệnh này là các thành phần trong câu lệnh SELECT nếu được  
sử dụng phải tuân theo đúng thứ tự như trong cú pháp. Nếu không, câu lệnh sẽ được xem là  
không hợp lệ.  
12  
Hướng dẫn thực hành CSDL  
Câu lệnh SELECT được sử dụng để tác động lên các bảng dữ liệu và kết quả của câu lệnh cũng  
được hiển thị dưới dạng bảng, tức là một tập hợp các dòng và các cột (ngoại trừ trường hợp sử  
dụng câu lệnh SELECT với mệnh đề COMPUTE).  
Ví dụ dưới đây hiển thị tên cầu thủ và vị trí cầu thủ đó trong bảng  
select hoten, vitri  
from cauthu  
-
2.1.1 Danh sá ch chọn trong câ u lệnh SELECT  
Danh sách chọn trong câu lệnh SELECT được sử dụng để chỉ định các trường, các biểu thức cần  
hiển thị trong các cột của kết quả truy vấn. Các trường, các biểu thức được chỉ định ngay sau từ  
khoá SELECT và phân cách nhau bởi dấu phẩy. Sử dụng danh sách chọn trong câu lệnh SELECT  
bao gồm các trường hợp sau:  
Chọn tất cả các cột: Như đã nói trong chương 1, chúng ta dùng dấu * trong câu lệnh Select để  
hàm ý chọn hết tất cả các cột. Trong trường hợp này, các cột được hiển thị trong kết quả truy vấn  
sẽ tuân theo thứ tự mà chúng đã được tạo ra khi bảng được định nghĩa.  
Ví dụ:  
select *  
from cauthu  
Chọn một số cột cụ thể: Trong trường hợp cần chỉ định cụ thể các cột cần hiển thị trong kết quả  
truy vấn, ta chỉ định danh sách các tên cột trong danh sách chọn. Thứ tự của các cột trong kết quả  
truy vấn tuân theo thứ tự của các trường trong danh sách chọn.  
Ví dụ:  
select HOTEN, VITRI  
from cauthu  
Lưu ý: Nếu truy vấn được thực hiện trên nhiều bảng/khung nhìn và trong các bảng/khung nhìn có  
các trường trùng tên thì tên của những trường này nếu xuất hiện trong danh  
sách chọn phải được viết dưới dạng: tên_bảng.tên_trường  
13  
Hướng dẫn thực hành CSDL  
Thay đổi tiêu đề các cột:  
Trong kết quả truy vấn, tiêu đề của các cột mặc định sẽ là tên của các trường tương ứng trong  
bảng. Tuy nhiên, để các tiêu đề trở nên thân thiện hơn, ta có thể đổi tên các tiêu đề của các cột.  
Để đặt tiêu đề cho một cột nào đó, ta sử dụng cách viết:  
tiêu_đề_cột = tên_trường hoặc tên_trường AS tiêu_đề_cột hoặc tên_trường tiêu_đề_cột  
Ví dụ:  
select [Mã cầu thủ]=MACT, HOTEN AS [Tên cầu thủ], VITRI [vị  
trí] from CAUTHU  
Sử dụng cấu trúc CASE…WHEN:  
Cấu trúc CASE được sử dụng trong danh sách chọn nhằm thay đổi kết quả của truy vấn  
tuỳ thuộc vào các trường hợp khác nhau. Cấu trúc này có cú pháp như sau:  
CASE biểu_thức  
WHEN biểu_thức_kiểm_tra THEN kết_quả  
[...]  
[ELSE kết_quả_của_else]  
END hoặc: CASE  
WHEN điều_kiện THEN kết_quả  
[...]  
[ELSE kết_quả_của_else]  
END  
Ví dụ: Câu lệnh SQL dưới đây sẽ hiện thị giới tính của khách hàng tùy theo giá trị thực được lưu  
trong CSDL. Nếu giá trị trong CSDL là FALSE-> hiện thị giới tính NỮ, nếu giá trị là TRUE->  
hiện thị giới tính NAM.  
select HOTEN, DIACHI, case GENDER  
when 1 then 'NAM' else N'NỮ'  
end as [GIỚI TÍNH]  
from CAUTHU  
Câu lệnh trên cũng có thể viết như sau:  
14  
Hướng dẫn thực hành CSDL  
Loại bỏ các dòng dữ liệu trùng nhau:  
Từ khóa DISTINCT sẽ loại bỏ các dòng dữ liệu giống nhau.  
Ví dụ: Hiển thị các Mã câu lạc bộ tham gia thi đấu ở sân nhà trong bảng TRANDAU  
select distinct MACLB1  
from TRANDAU  
Lựa chọn một số lượng giới hạn các dòng: Từ khóa TOP n sẽ trả về chỉ n dòng dữ liệu  
Ví dụ: Hiển thị 7 cầu thủ từ bảng CAUTHU  
select top 7 HOTEN AS [Tên cầu thủ]  
from CAUTHU  
Nếu sử dung TOP n PERCENT thì sẽ trả về n % số dòng dữ liệu hiện có trong CSDL.  
2.1.2 Mệnh đề FROM  
Mệnh đề FROM trong câu lệnh SELECT được sử dung nhằm chỉ định các bảng và khung nhìn  
cần truy xuất dữ liệu. Sau FROM là danh sách tên của các bảng và khung nhìn tham gia vào truy  
vấn, tên của các bảng và khung nhìn được phân cách nhau bởi dấu phẩy.  
Ví dụ: Câu lệnh sau hiển thị thông tin cầu thủ  
select *  
from cauthu  
15  
Hướng dẫn thực hành CSDL  
Trong mệnh đề FROM có thể sử dụng bí danh (alias) nhằm làm cho câu truy vấn dễ nhìn  
Ví dụ:  
select HOTEN AS [Tên cầu thủ]  
from CAUTHU ct  
where ct.MACT = 4  
16  
Hướng dẫn thực hành CSDL  
2.1.3 Mệnh đề WHERE - điều kiện truy vấn dữ liệu  
Mệnh đề WHERE trong câu lệnh SELECT được sử dụng nhằm xác định các điều kiện đối với  
việc truy xuất dữ liệu. Sau mệnh đề WHERE là một biểu thức logic và chỉ những dòng dữ liệu  
nào thoả mãn điều kiện được chỉ định mới được hiển thị trong kết quả truy vấn.  
Ví dụ: Lọc ra thông tin các cầu thủ có mã cầu thủ >5  
select HOTEN AS [Tên cầu thủ]  
from CAUTHU ct  
where ct.MACT > 2  
Trong mệnh đề WHERE thường sử dụng:  
- Các toán tử kết hợp điều kiện (AND, OR)  
-
Các toán tử so sánh  
- Kiểm tra giới hạn của dữ liệu (BETWEEN/ NOT BETWEEN)  
- Tập hợp  
- Kiểm tra khuôn dạng dữ liệu.  
- Các giá trị NULL  
Các toán tử so sánh  
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  
Không lớn hơn  
Không nhỏ hơn  
Ví dụ: Hiển thị họ tên, ngày sinh theo định dạng dd/MM/yyyy và địa chỉ của các cầu thủ có tuổi  
lớn hơn 20  
17  
Hướng dẫn thực hành CSDL  
select  
HOTEN,  
convert (varchar, NGAYSINH, 103) as NGAYSINH,  
DIACHI from CAUTHU  
where year(getdate()) - year(NGAYSINH) > 20  
Kiểm tra giới hạn của dữ liệu  
Để kiểm tra xem giá trị dữ liệu nằm trong (ngoài) một khoảng nào đó, ta sử dụng toán tử  
BETWEEN/ NOT BETWEEN như sau:  
Mệnh đề  
Ý nghĩa  
variable BETWEEN a AND b  
variable NOT BETWEEN a AND b  
a <= variable <=b  
variable <a hoặc variable > b  
Ví dụ: Hiển thị họ tên, ngày sinh theo định dạng dd/MM/yyyy và địa chỉ của các cầu thủ có tuổi  
lớn hơn 20 và nhỏ hơn 30  
select  
HOTEN,  
convert (varchar, NGAYSINH, 103) as NGAYSINH,  
DIACHI from CAUTHU  
where year(getdate()) - year(NGAYSINH) between 20 and 25  
Toán tử làm việc trên tập hợp (IN/ NOT IN)  
Từ khoá IN/ NOT IN được sử dụng khi ta cần chỉ định điều kiện tìm kiếm dữ liệu cho câu lệnh  
SELECT là một danh sách các giá trị. Sau IN/ NOT IN có thể là một danh sách các giá trị hoặc là  
một câu lệnh SELECT khác.  
Ví dụ: Câu lệnh dưới đây lấy ra các thông tin của cầu thủ có mã là 5,6 hoặc 7  
select  
HOTEN,  
convert (varchar, NGAYSINH, 103) as NGAYSINH,  
DIACHI from CAUTHU  
where MACT in (4,6,7)  
18  
Hướng dẫn thực hành CSDL  
Ví dụ: Hiển thị các câu lạc bộ chưa thi đấu trận nào ở sân nhà. Sử dụng SELECT đ ứng sau mệnh  
đề IN/ NOT IN  
select TENCLB  
from CAULACBO  
where MACLB not in  
(Select MACLB1 from TRANDAU )  
Toán tử LIKE/ NOT LIKE và ký tự đại diện (WildCard)  
Từ khoá LIKE (NOT  
LIKE) sử dụng trong câu lệnh SELECT nhằm mô tả khuôn dạng  
của dữ liệu cần tìm kiếm. Chúng thường được kết hợp với các ký tự đại diện sau đây:  
Ký tự đại diện  
Ý nghĩa  
%
_
Chuỗi ký tự bất kỳ gồm không hoặc nhiều ký tự  
Một ký tự bất kì  
[]  
Một ký tự nằm trong giới hạn được chỉ định. Ví dụ:[a-f] hàm  
ý chỉ một trong các ký tự: a, b, c, d, e, f.  
[^]  
Một ký tự không nằm trong giới hạn được chỉ định. Ví dụ:[^a-f]  
hàm ý chỉ một ký tự khác tất cả các ký tự: a, b, c, d, e, f.  
Ví dụ: Hiển thị các cầu thủ có tên bắt đầu bằng Nguyễn  
select HOTEN  
from CAUTHU  
where HOTEN like N'Nguyễn %'  
Giá trị NULL  
Dữ liệu trong một cột cho phép NULL sẽ nhận giá trị NULL trong các trường hợp sau:  
- Nếu không có dữ liệu được nhập cho cột và không có mặc định cho cột hay kiểu dữ  
liệu trên cột đó.  
- Người sử dụng trực tiếp đưa giá trị NULL vào cho cột đó.  
- Một cột có kiểu dữ liệu là kiểu số sẽ chứa giá trị NULL nếu giá trị được chỉ định  
gây  
tràn  
số.  
19  
Hướng dẫn thực hành CSDL  
Trong mệnh đề WHERE, để kiểm tra giá trị của một cột có giá trị NULL hay không, ta sử  
dụng cách viết:  
WHERE tên_cột IS NULL  
hoặc:  
WHERE tên_cột IS NOT NULL  
Ví dụ: Hiển thị các huấn luyện viên chưa nhập số điện thoại  
select *  
from HUANLUYENVIEN  
where DIENTHOAI is NULL  
Tạo mới bảng dữ liệu từ câu lệnh SELECT  
Câu lệnh SELECT ... INTO có tác dụng tạo một bảng mới có cấu trúc và dữ liệu được xác định từ  
kết quả của truy vấn. Bảng mới được tạo ra sẽ có số cột bằng số cột được chỉ định trong danh  
sách chọn và số dòng sẽ là số dòng kết quả của truy vấn Ví dụ:  
select  
MACT,HOTEN,  
convert (varchar, NGAYSINH, 103) as NGAYSINH, DIACHI into NEWTABLE  
from CAUTHU  
Lưu ý: Nếu trong danh sách chọn có các biểu thức thì những biểu thức này phải được đặt tiêu đề  
20  
Tải về để xem bản đầy đủ
pdf 40 trang Thùy Anh 18040 Free
Bạn đang xem 20 trang mẫu của tài liệu "Hướng dẫn thực hành Cơ sở dữ liệu - Bài số 2", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfhuong_dan_thuc_hanh_co_so_du_lieu_bai_so_2.pdf