Kết Quả Khi Xác Định Tiêu Đề Trường


trong bảng. Hay nói cách khác, giá trị của khoá chính sẽ giúp cho ta xác định được duy nhất một dòng (bản ghi) trong bảng dữ liệu. Mỗi một bảng chỉ có thể có duy nhất một khoá chính và bản thân khoá chính không chấp nhận giá trị NULL.

Ràng buộc Primary Key là cơ sở cho việc đảm bảo tính toàn vẹn thực thể cũng như toàn vẹn tham chiếu. Khi thêm hay cập nhật trên trường Primary Key thì quá trình kiểm tra ràng buộc Primary Key sẽ xảy ra.

Cú pháp:

[CONSTRAINT tên_ràng_buộc]PRIMARY KEY [(danh_sách_trường)] Chú ý:

- Nếu khoá chính của bảng chỉ có một trường và ràng buộc Primary Key được chỉ định ở mức trường, thì không cần phải chỉ ra danh sách trường sau từ khoá Primary Key.

- Nếu khóa chính của bảng gồm có 2 trường trở lên thì phải chỉ ra danh sách các trường sau từ khóa Primary Key và tên các trường được phân cách nhau bởi dấu phẩy. Trong trường hợp này, việc khai báo khoá chính được tiến hành ở mức bảng.

Ví dụ 1: Tạo ràng buộc Primary Key cho bảng ngành đã có sẵn. use qlts

alter table nganh

add constraint PK_man Primary key (man) Ví dụ 2: Tạo bảng Ưu tiên

Cách 1

CREATE TABLE uutien

(maut varchar(20) not null Primary key, tenut text null,

dc int

)

Cách 2

CREATE TABLE uutien

(maut varchar(20) not null constraint chk_primarykey primary key,


tenut text null, dc int

)

5) Ràng buộc khóa ngoại (Foreign Key constraints)

Foreign Key là một trường hay nhiều trường được sử dụng để tạo mối liên kết dữ liệu giữa hai bảng. Foreign Key của một bảng sẽ giữ giá trị của Primary Key của một bảng khác và chúng ta có thể tạo ra nhiều Foreign Key trong một bảng.


Foreign Key có thể tham chiếu vào Primary Key hay trường có ràng buộc duy nhất.

Foreign Key có thể chứa giá trị NULL.

Ràng buộc Foreign Key không những kiểm soát dữ liệu chứa trong bảng có Foreign Key (tức bảng con) mà còn kiểm soát luôn cả dữ liệu trong bảng chứa Primary Key (tức bảng cha). Ví dụ nếu ta xóa dữ liệu trong bảng cha thì dữ liệu trong bảng con trở nên "mồ côi" (orphan) vì không thể tham chiếu ngược về bảng cha. Do đó ràng buộc Foreign Key sẽ đảm bảo điều đó không xảy ra. Nếu muốn xóa dữ liệu trong bảng cha thì trước hết bạn phải xóa hay vô hiệu hóa ràng buộc Foreign Key trong bảng con trước.

Cú pháp:

[CONSTRAINT tên_ràng_buộc] FOREIGN KEY[(danh_sách_trường)]

REFERENCES tên_bảng_tham_chiếu(danh_sách_trường_tham_chiếu) [ON DELETE CASCADE|NO ACTION|SET NULL|SET DEFAULT] [ON UPDATE CASCADE|NO ACTION|SET NULL|SET DEFAULT]

Cách thức xử lý đối với các bản ghi trong bảng được định nghĩa trong trường hợp các bản ghi được tham chiếu trong bảng tham chiếu bị xoá (ON DELETE) hay cập nhật (ON UPDATE). SQL chuẩn đưa ra 4 cách xử lý:

- CASCADE: Tự động xoá (cập nhật) nếu bản ghi được tham chiếu bị xoá (cập nhật).

- NO ACTION: (Mặc định) Nếu bản ghi trong bảng tham chiếu đang được tham chiếu bởi một bản ghi bất kỳ trong bảng được định nghĩa thì bản ghi đó không được phép xoá hoặc cập nhật (đối với trường được tham chiếu).

- SET NULL: Cập nhật lại khoá ngoài của bản ghi thành giá trị NULL (nếu trường cho phép nhận giá trị NULL).

- SET DEFAULT: Cập nhật lại khoá ngoài của bản ghi nhận giá trị mặc định (nếu trường có qui định giá trị mặc định).

Ví dụ: Tạo bảng thí sinh use qlts

CREATE TABLE thisinh

(sbd varchar(20) not null primary key, hoten text null,

ngaysinh datetime null, gioitinh bit default(0) not null, quequan text null,

dtoan float null, dly float null,


dhoa float null,

maut nvarchar(20) constraint fk_utien foreign key references uutien(maut)

on delete cascade on update cascade,

man nvarchar(20) constraint fk_man foreign key references nganh(man)

on delete cascade on update cascade,

sophong int null

)

6) Ràng buộc duy nhất (Unique constraints)

Ràng buộc duy nhất tương tự như ràng buộc khóa chính nhưng chỉ yêu cầu giá trị duy nhất chứa trong trường của mỗi bảng dữ liệu. Khi thiết lập ràng buộc duy nhất cho một trường thì giá trị trong trường là duy nhất. Do đó, khi thêm và sửa bản ghi mà giá trị trường bị trùng lặp thì SQL Server sẽ thông báo lỗi.

Cú pháp

[CONSTRAINT tên_ràng_buộc]UNIQUE[(danh_sách_trường)]

Ví dụ 1: Tạo bảng khách hàng trong đó trường điện thoại không được trùng nhau. use qlmbh

CREATE TABLE Khachhang

(makh varchar(20) not null primary key, hoten text null,

ngaysinh datetime null, gioitinh bit not null, diachi text null,

dienthoai varchar(15) not null UNIQUE

)

Ví dụ 2: Tạo trường điện thoại không được trùng nhau khi đã có bảng khách hàng. use qlmbh

alter table khachhang

add constraint uq_dt unique(dienthoai)

7) Ràng buộc kiểm tra (Check constraints)

Ràng buộc kiểm tra được sử dụng nhằm xác định điều kiện hợp lệ đối với dữ liệu. Khi có sự thay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc này sẽ được sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không.


Cú pháp:

[CONSTRAINT tên_ràng_buộc] CHECK(các_điều_kiện)

Ví dụ: Thiết lập ràng buộc kiểm tra cho 3 trường điểm toán, điểm lý, điểm hóa khi đã có bảng thí sinh.

Cách 1: use qlts

Alter table thisinh

add constraint check_dtoan check(dtoan>=0 and dtoan<=10), constraint check_dly check(dly in(0,1,2,3,4,5,6,7,8,9,10)), constraint check_dhoa check(dhoa>=0 and dhoa<=10)

Cách 2: use qlts

Alter table thisinh

add constraint check_diem check((dtoan>=0 and dtoan<=10) and (dly in(0,1,2,3,4,5,6,7,8,9,10)) and (dhoa>=0 and dhoa<=10))

8) Ràng buộc mặc nhiên (Default constraints)

Ràng buộc mặc nhiên giúp cho bảng có dữ liệu phù hợp ngay cả khi không được người dùng nhập dữ liệu. Ràng buộc mặc nhiên được thiết lập bằng cách gắn một giá trị mặc nhiên cho một trường nào đó. Giá trị mặc nhiên chỉ được dùng cho trường hợp thêm bản ghi, không quan tâm đến việc cập nhật hay xóa.

Nếu giá trị đưa vào là rỗng thì giá trị mặc nhiên được sử dụng. Ngược lại, giá trị mặc nhiên không được sử dụng.

Cú pháp:

[<Tên_trường><Kiểu_dữ_liệu>][CONSTRAINT tên_ràng_buộc]DEFAULT

<Giá_trị> [For <Tên_trường>]

Ví dụ: Tạo bảng mua bán trong đó trường mua bán có giá trị mặc định là 0, trường ngày mua bán có giá trị mặc định là ngày hiện tại.

use qlmbh

CREATE TABLE Muaban

(makh varchar(20) not null mamh varchar(20) not null, soluong float,

dongia float,

muaban bit DEFAULT 0,

ngaymb datetime DEFAULT Getdate() , dienthoai varchar(15) not null UNIQUE)


2.3. Ngôn ngữ thao tác dữ liệu

Ngôn ngữ thao tác dữ liệu bao gồm các câu lệnh: SELECT, INSERT, UPDATE, DELETE, dùng để thao tác với dữ liệu trong bảng.

Các câu lệnh trong ngôn ngữ thao tác dữ liệu:

- Câu lệnh SELECT

- Câu lệnh INSERT

- Câu lệnh UPDATE

- Câu lệnh DELETE

2.3.1. Câu lệnh SELECT

Tác dụng: Dùng để lọc các mẩu tin. Cú pháp:

SELECT distinct [ <danh_sách_trường biểu thức>] FROM <danh_sách_tên_bảng tên_các_view>

WHERE <biểu_thức_điều_kiện của bản ghi | kết nối>

GROUPE BY <danh_sách_tên_trường | biểu thức có trong SELECT>

HAVING <biểu_thức_điều_kiện của nhóm>

ORDER BY < tên_trường số_thứ_tự_trường biểu_thức>, [ASC/ DESC ] Ví dụ: Đưa ra các thông tin gồm : Mã mặt hàng, tên mặt hàng, tổng số lượng, thành tiền của mỗi mặt hàng đã được bán với tổng số lượng lớn hơn 50. Danh sách sắp xếp

theo chiều giảm dần của thành tiền. use qlmbh

select Mathang.mamh, Mathang.tenmh, sum(muaban.soluong) as tongsl,

SUM(soluong*dongia) as thanhtien from Mathang, Muaban

where Mathang.mamh=Muaban.mamh and muaban.muaban=1 group by Mathang.mamh, Mathang.tenmh

having sum(muaban.soluong)>50 order by thanhtien desc

1) Mệnh đề Select:

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 trường 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. Dùng dấu * trong câu lệnh Select để chọn hết tất cả các trường.

Nếu truy vấn được thực hiện trên nhiều bảng/View và trong các bảng/View 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.


Trong kết quả truy vấn, tiêu đề của các trường 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 trường. Để đặt tiêu đề cho một trường nào đó, ta sử dụng cách viết:

- Cách 1: Tiêu_đề_trường = tên_trường

- Cách 2: Tên_trường AS tiêu_đề_trường

- Cách 3: Tên_trường tiêu_đề_trường

Ví dụ: Đưa ra các thông tin gồm: số báo danh, họ tên, ngày sinh, quê quán của mỗi thí sinh.

use qlts

Select 'Số báo danh' = sbd, Hoten as 'Họ tên', ngaysinh 'Ngày sinh',quequan From Thisinh

Hình 2 3 Kết quả khi xác định tiêu đề trường 2 Mệnh đề FROM Mệnh đề 1

Hình 2.3. Kết quả khi xác định tiêu đề trường

2) Mệnh đề FROM

Mệnh đề FROM được sử dụng nhằm chỉ định các bảng và view cần truy xuất dữ liệu. Sau FROM là danh sách tên của các bảng và view 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.

3) Mệnh đề WHERE

Mệnh đề WHERE đượ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.

Mệnh đề where được biểu diễn dạng:

WHERE [NOT] <biểu_thức phép_sánh biểu_thức>

WHERE [NOT] <tên_trường> [ NOT ] LIKE <xâu_ký_tự>

WHERE [NOT] <biểu_thức>[ NOT ] BETWEEN <biểu_thức and biểu_thức> WHERE [NOT] <biểu_thức> [ NOT ] IN (<danh_sách câu_hỏi_con>) WHERE [NOT] EXISTS (<câu_hỏi_con>)

WHERE [NOT] <biểu_thức> < phép_sánh > ANY ALL (<câu_hỏi_con>) WHERE [NOT] <tên_trường> <phép_kết_nối> <tên_trường>

WHERE [NOT] <biểu_thức_logic>


WHERE [NOT] <biểu_thức_logic> ANDORNOT <biểu_thức_logic> Ký tự đại diện cho phép toán Like

STT

Ký tự

Ý nghĩa

Ví dụ

1

%

Chuỗi ký tự bất kỳ gồm không hoặc

nhiều ký tự


2

_

Một ký tự bất kì


3

[]

Một ký tự nằm trong giới hạn được

chỉ định

[a-f] chỉ một trong các ký tự:

a, b, c, d, e, f


4


[^]

Một ký tự không nằm trong giới hạn được chỉ định

[^a-f] hàm ý chỉ một ký tự

khác tất cả các ký tự: a, b, c, d, e, f.

Có thể bạn quan tâm!

Xem toàn bộ 323 trang tài liệu này.

SQL Server - 9

Giá trị NULL: Dữ liệu trong một trường 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 trường và không có mặc định cho trường hay kiểu dữ liệu trên trường đó, người sử dụng trực tiếp đưa giá trị NULL vào cho trường đó. Một trường 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ố. Trong mệnh đề WHERE, để kiểm tra giá trị của một trường có giá trị NULL hay không, ta sử dụng cách viết:

Cách 1: WHERE tên_trường IS NULL

Cách 2: WHERE tên_trường IS NOT NULL

4) Sắp xếp kết quả truy vấn

Mặc định, các dòng dữ liệu trong kết quả của câu truy vấn tuân theo thứ tự của chúng trong bảng dữ liệu hoặc được sắp xếp theo chỉ mục (nếu trên bảng có chỉ mục). Trong trường hợp muốn dữ liệu được sắp xếp theo chiều tăng hoặc giảm của giá trị của một hoặc nhiều trường, ta sử dụng thêm mệnh đề ORDER BY Sau ORDER BY là danh sách các trường cần sắp xếp (tối đa là 16 trường). Dữ liệu được sắp xếp có thể theo chiều tăng (ASC) hoặc giảm (DESC), mặc định là sắp xếp theo chiều tăng. Nếu sau ORDER BY có nhiều trường thì việc sắp xếp dữ liệu sẽ được ưu tiên theo thứ tự từ trái qua phải.

5) Phép hợp (UNION)

Phép hợp được sử dụng trong trường hợp ta cần gộp kết quả của hai hay nhiều truy vấn thành một tập kết quả duy nhất. SQL cung cấp toán tử UNION để thực hiện phép hợp.

Cú pháp: Câu_lệnh_1

UNION [ALL] Câu_lệnh_2


[UNION [ALL] Câu_lệnh_3]

...

[UNION [ALL] Câu_lệnh_n] [ORDER BY trường_sắp_xếp]

[COMPUTE danh_sách_hàm_gộp [BY danh_sách_trường]] Trong đó:

- câu_lệnh_ 1,…., câu_lệnh_ 1 có dạng:

SELECT danh_sách_trường [INTO tên_bảng_mới] [FROM danh_sách_bảng|View]

[WHERE điều_kiện]

[GROUP BY danh_sách_trường] [HAVING điều_kiện]

- Mệnh đề ORDER BY và COMPUTE dùng để sắp xếp kết quả truy vấn hoặc tính toán các giá trị thống kê chỉ được sử dụng ở cuối câu lệnh UNION. Chúng không được sử dụng ở trong bất kỳ truy vấn thành phần nào.

Mặc định, nếu trong các truy vấn thành phần của phép hợp xuất hiện những dòng dữ liệu giống nhau thì trong kết quả truy vấn chỉ giữ lại một dòng. Nếu muốn giữ lại các dòng này, ta phải sử dụng thêm từ khoá ALL trong truy vấn thành phần.

Các nguyên tắc khi sử dụng toán tử UNION:

- Danh sách trường trong các truy vấn thành phần phải có cùng số lượng.

- Các trường tương ứng trong tất cả các bảng, hoặc tập con bất kỳ các trường được sử dụng trong bản thân mỗi truy vấn thành phần phải cùng kiểu dữ liệu.

- Các trường tương ứng trong bản thân từng truy vấn thành phần của một câu lệnh UNION phải xuất hiện theo thứ tự như nhau. Nguyên nhân là do phép hợp so sánh các trường từng trường một theo thứ tự được cho trong mỗi truy vấn.

- Khi các kiểu dữ liệu khác nhau được kết hợp với nhau trong câu lệnh UNION, chúng sẽ được chuyển sang kiểu dữ liệu cao hơn (nếu có thể được). Tiêu đề trường trong kết quả của phép hợp sẽ là tiêu đề trường được chỉ định trong truy vấn đầu tiên.

- Phép toán UNION có thể được sử dụng bên trong câu lệnh INSERT.

- Phép toán UNION không được sử dụng trong câu lệnh CREATE VIEW.

Ví dụ: Đưa ra các thông tin gồm: số báo danh, họ tên, ngày sinh, quê quán của những thí sinh có quê quán „Nam Định‟ hoặc „Thái Bình‟.

use qlts

select sbd, hoten, ngaysinh, quequan from Thisinh

where quequan='Nam Dinh'

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 16/07/2022