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 đủ
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:
huong_dan_thuc_hanh_co_so_du_lieu_bai_so_2.pdf

