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

Chương 5 ngôn ngữ truy vấn SQL docx

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 (221.18 KB, 32 trang )

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 1
11
1


Chơng 5
ngôn ngữ truy vấn sql

i. Tổng quan

1. Lịch sử phát triển

Vào những năm 1970, SQL lần đầu đợc hãng IBM phát triển nh một bộ phận
của hệ quản trị CSDL mô hình quan hệ có tên là SYSTEM R. Sau đó vào các
năm 1980 IBM tiếp tục phát triển SQL cho các hệ quản trị cơ sở dữ liệu nổi tiếng
là SQL/DS trên nền hệ điều hành VM, DB2 trên nền hệ điều hành MVS, Hệ quản
trị cơ sở dữ liệu mở rộng trên nền hệ điều hành IBM OS/2, Hệ quản trị cơ sở dữ
liệu cho hệ thống IBM AS/400. Năm 1986, Viện tiêu chuẩn quốc gia Hoa kỳ
(ANSI American National Standards Institute) và Tổ chức Tiêu chuẩn Quốc tế
(ISO International Standards Organization) đã thừa nhận SQL nh là ngôn
ngữ chuẩn xử lý dữ liệu. Ngôn ngữ chuẩn ANSI SQL tiếp tục đợc cập nhật vào
những năm 1989 và 1992 sau đó. Hiện nay một phiên bản mới SQL3 đang đợc
phát triển.

SQL đợc cài đặt cho hệ thống máy tính lớn (mainframe) cũng nh máy tính
cá nhân. Bên cạnh các sản phẩm của hãng IBM, cũng cần phải kể đến các hệ quản
trị cơ sở dữ liệu nổi tiếng khác nh ORACLE của Công ty Oracle, SQL Server


của hãng Microsoft, SQLBase của hãng Sybase, Ingres của hãng Relational
Technologies,


2. SQL là ngôn ngữ chuẩn cho các hệ quản trị cơ sở dữ liệu quan hệ

Hệ quản trị cơ sở dữ liệu quan hệ là hệ quản trị cơ sở dữ liệu xử lý dữ liệu
dạng tập hợp các bảng quan hệ, trong đó sự quan hệ gia các bảng đợc biểu diễn
bằng các giá trị chung trong các bảng liên quan.

Để định hớng phát triển các hệ quản trị cơ sở dữ liệu quan hệ, ANSI và ISO
đã phê chuẩn ngôn ngữ truy vấn quan hệ chuẩn SQL đợc Uỷ ban Kỹ thuật cơ sở
dữ liệu X3H2 đa ra năm 1986.

Mục đích của chuẩn SQL là
1. Xác định cú pháp và ngữ nghĩa của ngôn ngữ SQL định nghĩa và thao tác
dữ liệu
2. Định nghĩa các cấu trúc dữ liệu và phép toán cơ bản để thiết kế, truy cập,
lu trữ, kiểm soát và bảo vệ cơ sở dữ liệu SQL
3. Cung cấp công cụ đảm bảo tính tơng thích của cấu trúc dữ liệu và các
modul ứng dụng giữa các hệ quản trị cơ sở dữ liệu
4. Xác định chuẩn tối thiểu (Mức 1) và chuẩn hoàn chỉnh (Mức 2), cho phép
các cấp độ sử dụng SQL khác nhau trong các sản phẩm
5. Cung cấp chuẩn ban đầu, có thể cha hoàn chỉnh, cho phép mở rộng các
chức năng xử lý những vấn đề nh sự toàn vẹn tham chiếu, giao thức
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 2

22
2

chuyển đổi, các hàm ngời dùng, các toán tử nối ngoài phép đẳng nối, và
các hệ thống ký tự quốc gia,

Một ngôn ngữ quan hệ chuẩn nh SQL sẽ mang lại các lợi ích sau đây:

Giảm thiểu chi phí đào tạo. Các hệ quản trị cơ sở dữ liệu có chung ngôn ngữ
chuẩn SQL sẽ làm giảm chi phí chuyển đổi từ hệ này sang hệ khác.

Nâng cao hiệu năng công việc. Các chuyên gia hệ thống thông tin với kiến
thức sâu sắc về SQL sẽ nhanh chóng nắm bắt các chơng trình ứng dụng của
các hệ quản trị cơ sở dữ liệu, vì họ đã quen thuộc với ngôn ngữ của các chơng
trình này.

Tính khả chuyển của các ứng dụng. Các ứng dụng có thể dễ dàng sử dụng
trên các hệ thống khác nhau, nhng cùng sử dụng SQL.

Tăng tuổi thọ của các ứng dụng. Một ngôn ngữ chuẩn có xu hớng tồn tại
thời gian dài, điều đó làm giảm áp lực viết lại chơng trình.

Làm giảm sự phụ thuộc vào nhà cung cấp. Vì SQL là ngôn ngữ chung nên
ngời dùng dễ dàng sử dụng nhiều sản phẩm của các nhà cung ứng khác nhau,
với giá cả cạnh tranh.

Khả năng giao tiếp giữa các hệ thống chéo. các hệ quản trị cơ sở dữ liệu
quan hệ và các chơng trình ứng dụng khác nhau có thể dễ dàng giao tiếp và
hợp tác để xử lý dữ liệu và thực hiện chơng trình ngời dùng.



SQL là ngôn ngữ có cấu trúc. Trong câu lệnh của SQL có một số mệnh đề
tuân theo những cú pháp riêng của nó. Có 4 loại lệnh trong SQL:
- Các lệnh truy vấn dữ liệu (DML);
- Các lệnh định nghĩa dữ liệu (DDL);
- Các lệnh xử lý cập nhật dữ liệu (DML);
- Các lệnh kiểm soát dữ liệu.

SQL thuộc loại ngôn ngữ thế hệ thứ t (4GL) đợc nghiên cứu nhiều năm và
trở thành tiêu chuẩn quốc tế về kiểm soát dữ liệu. SQL kế thừa tính phi thủ tục
của 4GL : Xử lý đồng thời hàng loạt câu lệnh. Ngời dùng chỉ cần nêu ra yêu cầu
về dữ liệu mà không cần biết máy tính xử lý bên trong nh thế nào. Ngời dùng
có thể truy xuất nhanh chóng với những CSDL lớn, yêu cầu những xử lý phức
tạp tinh vi mà không cần lập trình.

Sau đây chúng ta sẽ tìm hiểu các thành phần cơ bản của SQL.

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 3
33
3

3. Các thành phần cơ bản của SQL

a. Kiểu dữ liệu
SQL có các kiểu dữ liệu sau


INTEGER : Kiểu số nguyên 2 byte -2 147 483 648 2 147 483 647
SMALLINT : Kiểu số nguyên 1 byte - 32 768 32 767
DECIMAL(n,d): Kiểu số thực độ dài n (kể cả dấu), số chữ số thập phân d
FLOAT : Kiểu số thực khoa học
CHAR(n) : Kiểu chuỗi ký tự độ dài n
DATE : Kiểu ngày tháng (ngày/tháng/năm)
LOGICAL : Kiểu lôgic, nhận giá trị true hoặc false
VARCHAR(n) : Kiểu chuỗi ký tự độ dài thay đổi, tối đa n ký tự
LONGVARCHAR : Kiểu chuỗi ký tự độ dài thay đổi (chứa dữ liệu nh ghi
chú, )

Chuẩn SQL92 bổ sung các kiểu dữ liệu nh thời gian, bit, khoảng, tập ký tự
(character set).

Ngoài ra một số phần mềm thơng mại SQL còn có nhiều kiểu dữ liệu chuyên
biệt khác nh :
Kiểu tiền tệ
Kiểu văn bản
Kiểu hình ảnh
Kiểu âm thanh


Các kiểu dữ liệu, ngoài miền giá trị của mình, có thể nhận giá trị đặc biệt null.
giá trị NULL
Giá trị NULL nghĩa là không xác định, cha sử dụng đợc .
Trờng khoá không thể chấp nhận giá trị NULL.
Tất cả các phép toán, ngoại trừ phép toán lô-gic, chứa thành phần có giá trị
NULL đều cho kết quả NULL.

b. Các toán tử

Cũng nh phần lớn các ngôn ngữ khác, SQL sử dụng các loại toán tử sau.

Toán tử số học
+ cộng
trừ
* nhân
/ chia

Toán tử so sánh
> Lớn hơn
>= Lớn hơn hoặc bằng
= Bằng
< Nhỏ hơn
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 4
44
4

<= Nhỏ hơn hoặc bằng
<> Khác

Toán tử logic
OR Hoặc
AND Và
NOT Phủ định

Toán tử tập hợp

UNION Hợp
INTERSECT Giao
MINUS Hiệu

c. Hàm tính toán
COUNT( ) Đếm số bản ghi.
SUM( ) Tính tổng biểu thức số.
AVG( ) Tính trị trung bình biểu thức số.
MAX( ) Tìm trị lớn nhất.
MIN( ) Tìm trị nhỏ nhất.

d. Hàm tập hợp
SET( ) Tập hợp các phần tử.

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 5
55
5


4. Các quy ớc biểu diễn câu lệnh SQL

Câu lệnh đợc cấu thành từ các thành phần: từ khoá, thành phần bắt buộc,
thành phần không bắt buộc, thành phần lựa chọn.

Từ khoá là từ dành riêng, có ý nghĩa nhất định trong ngôn ngữ, bắt buộc phải
có trong câu lệnh. Không đợc dùng từ khoá cho mục đích khác, chẳng hạn nh

đặt tên cho trờng hay bảng.

Ví dụ: Trong lệnh

CREATE TABLE

từ CREATE và TABLE là từ khoá.

Thành phần bắt buộc là biểu thức bắt buộc phải có trong câu lệnh, thành
phần bắt buộc đợc đặt trong dấu ngoặc nhọn < >.

Ví dụ: Trong lệnh

CREATE TABLE <bảng>

thành phần bảng là bắt buộc.

Thành phần không bắt buộc là biểu thức không bắt buộc phải có trong câu
lệnh, thành phần không bắt buộc đợc đặt trong dấu ngoặc vuông [ ].

Ví dụ: Trong lệnh

CREATE TABLE <bảng>
<thuộc tính> <kiểu> [(<kích thớc>)] [NOT NULL],

thành phần (<kích thớc>), NOT NULL là không bắt buộc.

Thành phần lựa chọn là các thành phần phân cách bởi dấu :

TP1 TP2 TPn


Khi đó, nếu đợc chọn, thì chỉ một trong các thành phần trên đợc xuất hiện
trong câu lệnh.
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 6
66
6


ii. Ngôn ngữ định nghĩa dữ liệu

Cơ sở dữ liệu (CSDL) là mô hình thực thể phản ánh thế giới thực đợc đề cập
đến, do đó nó là sự trìu tợng hoá thế giới thực. Cụ thể hơn, CSDL là kho dữ liệu
có tổ chức để đáp ứng mục tiêu kỹ thuật hay quản lý. Với ý nghĩa đó, CSDL
chính là trái tim của hệ thống thông tin quản lý, là nguồn dữ liệu cho mọi hệ
thông tin dựa trên máy tính. Dữ liệu trong CSDL phải đợc tổ chức chặt chẽ khoa
học sao cho có thể truy cập, cập nhật dễ dàng và xử lý tổng hợp thống kê nhanh
chóng. Về bản chất CSDL là tập hợp các file dữ liệu (table) có quan hệ logic với
nhau đảm bảo giảm thiểu sự d thừa (chuẩn hoá) và thống nhất dữ liệu (toàn vẹn
dữ liệu).

1. Các lệnh về bảng (table)
a. Khởi tạo cấu trúc bảng

Cú pháp
CREATE TABLE <Bảng>
(<thuộc tính 1> <kiểu dữ liệu> [NOT NULL] [DEFAULT <giá trị>],

<thuộc tính 2> <kiểu dữ liệu> [NOT NULL] [DEFAULT <giá trị>],

<thuộc tính n> <kiểu dữ liệu> [NOT NULL] [DEFAULT <giá trị>] )

Công dụng
Tạo lợc đồ quan hệ tên <Bảng> có các thuộc tính <thuộc tính 1>, <thuộc tính
2>, cùng kiểu dữ liệu tơng ứng.

Tham số NOT NULL dùng để chỉ rằng thuộc tính tơng ứng không đợc
phép nhận giá trị NULL.

Tham số DEFAULT <giá trị> dùng để gán giá trị ngầm định mỗi khi thêm
bản ghi mới vào bảng.

Ví dụ
- Tạo cấu trúc bảng PHONG:
CREATE TABLE PHONG
(MaPhong CHAR(3) NOT NULL,
TenPhong CHAR(20))

- Tạo cấu trúc bảng NHANVIEN :
CREATE TABLE NHANVIEN
(Manv CHAR(4) NOT NULL,
Tennv CHAR(20) DEFAULT Nguyễn Văn ,
GioiTinh CHAR(1) ,
DiaChi CHAR(30) DEFAULT Đà nẵng ,
HSLuong DECIMAL(5,2),
MaPhong CHAR(3) NOT NULL )
Ghi chú: GioiTinh = '+' là nam, '


' là nữ.

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 7
77
7

b. Các chức năng tăng cờng sự toàn vẹn CSDL (Integrity Enhancement
Feature)

Thiết lập ràng buộc đơn thuộc tính:

CREATE TABLE <bảng>
( ,
<thuộc tính> <kiểu dữ liệu>
CONSTRAINT <tên ràng buộc> <CHECK <điều kiện>
UNIQUE PRIMARY KEY
REFERENCES <Bảng ngoại> [(<thuộc tính ngoại>)]
[ON DELETE SET <NULLDEFAULT <giá trị> >]
[ON UPDATE SET CASCADE]>,

)

Ràng buộc <tên ràng buộc> đợc khai báo cùng với thuộc tính. Các ràng buộc
tuỳ chọn có ý nghĩa nh sau:

- CHECK <điều kiện> : Kiểm tra <điều kiện> ràng buộc của thuộc tính.

- UNIQUE : Thuộc tính khoá, có giá trị duy nhất.
- PRIMARY KEY : Thuộc tính khoá chính, có giá trị duy nhất.
- REFERENCES : Thuộc tính tham chiếu đến <bảng ngoại>. Nếu
thuộc tính đợc tham chiếu khác tên thì phải khai báo thành phần < thuộc tính
ngoại>.
ON DELETE SET <NULLDEFAULT <giá trị>>: Trờng hợp hàng đợc
tham chiếu trong <bảng ngoại> bị xoá thì giá trị thuộc tính đợc gán NULL
hoặc giá trị mặc định khai báo sau DEFAULT.
ON UPDATE SET CASCADE : Trờng hợp <thuộc tính ngoại> của hàng
đợc tham chiếu trong <bảng ngoại> bị sửa thì giá trị thuộc tính đợc cập nhật
theo.

Thiết lập ràng buộc đa thuộc tính

CREATE TABLE <bảng>
( ,
<thuộc tính cuối> <kiểu dữ liệu>,
CONSTRAINT <tên ràng buộc> <CHECK <điều kiện>
UNIQUE (<ds trờng khoá>)
PRIMARY KEY (<ds trờng khoá chính>)
FOREIGN KEY (<ds trờng tham chiếu>) REFERENCES
<Bảng ngoại> [(<ds trờng ngoại>)]
[ON DELETE SET <NULLDEFAULT <giá trị> >]
[ON UPDATE SET CASCADE]> )

Ràng buộc <tên ràng buộc> đợc khai báo độc lập, sau thuộc tính cuối cùng.
Các ràng buộc tuỳ chọn có ý nghĩa nh sau:

- CHECK <điều kiện> : Kiểm tra <điều kiện> ràng buộc liên thuộc tính.
Trần Quốc Chiến Cơ sở dữ liệu


Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 8
88
8

- UNIQUE : Danh sách trờng khoá, có giá trị duy nhất.
- PRIMARY : Danh sách trờng khoá chính, có giá trị duy nhất.
- FOREIGN KEY (<ds trờng tham chiếu>) REFERENCES : Danh sách
trờng tham chiếu đến <bảng ngoại>. Nếu các trờng đợc tham chiếu có tên
khác thì phải khai báo thành phần <ds trờng ngoại>.
Thành phần ON DELETE và ON UPDATE có công dụng nh ở lệnh trớc.

Thiết lập ràng buộc liên bộ

CREATE ASSERTION <tên ràng buộc>
CHECK (<điều kiện ràng buộc liên bộ>)

Thiết lập ràng buộc toàn cục (assertion) <tên ràng buộc>.

Ví dụ
- Tạo cấu trúc bảng PHONG:
CREATE TABLE PHONG
(MaPhong CHAR(3) CONSTRAINT kcphong PRIMARY KEY,
TenPhong CHAR(20))

- Tạo cấu trúc bảng NHANVIEN :
CREATE TABLE NHANVIEN
(Manv CHAR(4) CONSTRAINT kcnhanvien PRIMARY KEY,

Tennv CHAR(20) DEFAULT Nguyễn Văn ,
GioiTinh CHAR(1) CONSTRAINT gtgioitinh CHECK (GioiTinh IN
(+,,'0')),
NgaySinh DATE,
NgayLV DATE,
CMND CHAR(12) CONSTRAINT kcmnd UNIQUE,
DiaChi CHAR(30),
HSLuong DECIMAL(5,2) CONSTRAINT gthsluong CHECK
(HSLuong >=1 AND HSLuong <= 10),
MaPhong CHAR(3) NOT NULL CONSTRAINT tcmaphong
REFERENCES PHONG,
CONSTRAINT rbNgay CHECK (NgaySinh < NgayLV))

- Tạo ràng buộc liên bộ tổng lơng không vợt quá 1 000 000 000:

CREATE ASSERTION tongluong
CHECK (SELECT SUM(HSLuong*730000) FROM NHANVIEN <=
1 000 000 000)

Ví dụ: Tạo lợc đồ cơ sở dữ liệu quan hệ Khách-Hàng.
- Tạo cấu trúc bảng KHACH(Ten, DiaChi, SoDu), trong đó khóa chính là số d:
CREATE TABLE KHACH
(Ten CHAR(20) CONSTRAINT kckhach PRIMARY KEY,
DiaChi CHAR(20),
SoDu DECIMAL(10,0))

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5

5 9
99
9

- Tạo cấu trúc bảng HOPDONG(Sohd, TenKh, Hang, SoLuong):
CREATE TABLE HOPDONG
(Sohd CHAR(4) CONSTRAINT kchopdong PRIMARY KEY,
TenKh CHAR(20) CONSTRAINT tcten REFERENCES
KHACH(Ten),
Hang CHAR(20),
SoLuong DECIMAL(8,0) CONSTRAINT gtsoluong CHECK
(SoLuong>0))


- Tạo cấu trúc bảng CUNGUNG(Ten, DiaChi, Hang, DonGia):
CREATE TABLE CUNGUNG
(Ten CHAR(20),
DiaChi CHAR(20),
Hang CHAR(20),
DonGia DECIMAL(8,0) CONSTRAINT gtdongia CHECK (DonGia >
0),
CONSTRAINT kccungung PRIMARY KEY (Ten, Hang))


c. Hiệu chỉnh cấu trúc dữ liệu

Thêm thuộc tính mới

ALTER TABLE < Bảng>
ADD [COLUMN] <thuộc tính mới><Kiểu dữ liệu>[NOT NULL][INIT =

<giá trị>] [CONSTRAINT ]

Xoá thuộc tính

ALTER TABLE < Bảng>
DROP [COLUMN] < thuộc tính >

Thay đổi tính chất thuộc tính

ALTER TABLE < Bảng>
CHANGE COLUMN < thuộc tính > [<Kiểu dữ liệu>] [CONSTRAINT
]

Ghi chú. Trong ORACLE: CHANGE thay bằng MODIFY; trong VISUAL
FOXPRO: CHANGE thay bằng ALTER.

Thay đổi tên thuộc tính

ALTER TABLE < Bảng>
RENAME COLUMN < thuộc tính cũ> TO <thuộc tính mới>

Thêm ràng buộc đa thuộc tính

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 10
1010
10


ALTER TABLE < Bảng>
ADD CONSTRAINT <ràng buộc mới>

Xoá ràng buộc

ALTER TABLE < Bảng>
DROP CONSTRAINT <ràng buộc>

Ví dụ
- Thêm thuộc tính NoiSinh vào bảng NHANVIEN và gán giá trị Đà nẵng :
ALTER TABLE NHANVIEN
ADD COLUMN NoiSinh CHAR(30) INIT = Đà nẵng

- Xoá thuộc tính DiaChi khỏi bảng NHANVIEN :
ALTER TABLE NHANVIEN
DROP COLUMN DiaChi

- Thay đổi kích thớc của thuộc tính Tennv :
ALTER TABLE NHANVIEN
CHANGE COLUMN Tennv CHAR(30)

- Đổi tên thuộc tính Tennv thành HoTen:
ALTER TABLE NHANVIEN
RENAME COLUMN Tennv TO HoTen

- Xóa ràng buộc :
ALTER TABLE NHANVIEN
DROP CONSTRAINT kcnhanvien


ALTER TABLE NHANVIEN
DROP CONSTRAINT kcmnd

- Thêm ràng buộc:
ALTER TABLE NHANVIEN
ADD CONSTRAINT kcnhanvien PRIMARY KEY (CMND)

ALTER TABLE NHANVIEN
ADD CONSTRAINT kmanv UNIQUE (manv)

d. Xoá bảng
Cú pháp :
DROP TABLE <bảng>

Công dụng: Xoá bỏ bảng <bảng>
Ví dụ
- Huỷ bảng NHANVIEN :
DROP TABLE NHANVIEN

- Huỷ bảng PHONG :
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 11
1111
11

DROP TABLE PHONG


e. Tạo và xoá bí danh bảng
Bí danh thờng là tên ngắn gọn của bảng, làm đơn giản câu lệnh.

Tạo bí danh:
CREATE SYNONYM <bí danh> FOR <Bảng>

Xoá bí danh:
DROP SYNONYM <bí danh>

Ví dụ
Tạo và xoá bí danh NV cho bảng NHANVIEN :
CREATE SYNONYM NV FOR NHANVIEN
DROP SYNOMYM NV

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 12
1212
12

2. Các lệnh về chỉ mục (index)

Khái niệm chỉ mục
Chỉ mục là một file riêng đi kèm với bảng CSDL quan hệ, dùng để tăng tốc độ
truy cập xử lý dữ liệu. Chỉ mục có hai cột. Cột thứ nhất chứa các giá trị của khoá-
chỉ mục. Cột thứ hai chứa các số hiệu bản ghi của giá trị khoá-chỉ mục tơng ứng.
Để tìm giá trị của khoá-chỉ mục, hệ thống sẽ tìm trên cột thứ nhất của chỉ mục,
sau đó chiếu sang cột thứ 2 để xác định bản ghi tơng ứng.


Khởi tạo chỉ mục

Cú pháp:
CREATE [UNIQUE] INDEX <Chỉ mục>
ON <Bảng>
(<cột 1> [ASC | DESC] [, ] )

Công dụng:
Tạo file chỉ mục <Chỉ mục> cho bảng <Bảng>. Khoá chỉ mục là <cột 1>, <cột
2>
Tham số ASC là tăng dần ( ngầm định ), DESC là giảm dần, UNIQUE là lấy
giá trị khoá-chỉ mục duy nhất.

Ví dụ
- Tạo chỉ mục CMMANV theo khoá Manv cho bảng NHANVIEN
CREATE INDEX CMMANV
ON NHANVIEN (Manv)

- Tạo chỉ mục CMHD theo khoá TenKh và Hang cho bảng HOPDONG
CREATE INDEX CMHD
ON HOPDONG (TenKh, Hang)

Xoá chỉ mục

Cú pháp:

DROP INDEX <Chỉ mục>

Công dụng: Xoá chỉ mục <Chỉ mục>.


Ví dụ : Xoá chỉ mục CMHD

DROP INDEX CMHD

Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 13
1313
13

iii. Ngôn ngữ cập nhật dữ liệu

1. Thêm bản ghi

Cú pháp
INSERT INTO <Bảng>
[(<danh sách thuộc tính>)]
VALUE (<danh sách giá trị>)

Công dụng : Chèn bản ghi mới và điền giá trị trong <danh sách giá trị> vào các
cột của <Bảng> theo trình tự vật lý (nếu không có <danh sách thuộc tính>) hoặc
theo thứ tự các cột trong <danh sách thuộc tính>.

Ví dụ
- Chèn bản ghi vào bảng KHACH(Ten, DiaChi, SoDu) :
INSERT INTO KHACH
VALUE ('KS Sông Hàn', '20 Bạch Đằng', 0)


- Chèn bản ghi vào bảng NHANVIEN chỉ có một số giá trị :
INSERT INTO NHANVIEN
(Manv, Tennv, GioiTinh)
VALUE ('1234', 'Lê Thị Lan', '')

2. Hiệu chỉnh dữ liệu

Cú pháp :
UPDATE <Bảng>
SET <thuộc tính 1> = <biểu thức 1> [, ]
[WHERE <điều kiện>]

Công dụng : Cập nhật <Bảng>, gán giá trị <biểu thức 1> cho <thuộc tính 1>,
của bản ghi hiện hành.
Nếu có tuỳ chọn WHERE <điều kiện> thì phép cập nhật thực hiện với tất cả
các bản ghi thoả <điều kiện>.

Ví dụ
- Gán giá trị 10000000 cho số d của KS Bạch Đằng :
UPDATE KHACH
SET SoDu = 10000000
WHERE Ten = ' KS Bạch Đằng'

- Tăng số d của KS Sông Hàn lên 2 000 000 đ :
UPDATE KHACH
SET SoDu = SoDu + 2000000
WHERE Ten = ' KS Sông Hàn'

- Cty Lơng thực giảm 50% giá bán đờng :

UPDATE CUNGUNG
SET DonGia = DonGia / 2
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 14
1414
14

WHERE (Ten = 'Cty Lơng thực') AND (Hang = 'Đờng')

3. Xoá bản ghi

Cú pháp
DELETE FROM <Bảng>
[WHERE <điều kiện>]

Công dụng : Xoá bản ghi hiện hành của <Bảng>.
Nếu có tuỳ chọn WHERE <điều kiện> thì xoá tất cả các bản ghi thoả <điều
kiện>.

Ví dụ
Cty Công nghệ phẩm ngng bán cà phê :
DELETE FROM CUNGUNG
WHERE (Ten = 'Cty Công nghệ phẩm') AND (Hang = 'Cà phê')
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5

5 15
1515
15

iv. Ngôn ngữ truy vấn dữ liệu

1. Phép toán cơ bản của SQL là mệnh đề truy vấn có điều kiện

Cú pháp tổng quát

SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [, ] | *
FROM <bảng 1> [<bí danh 1>] [, ]
[INTO <dbf đích>]
[WHERE <điều kiện nối > [AND | OR <điều kiện lọc>]]
[ORDER BY <biểu thức sắp xếp 1> [ASC | DESC] [, ]]
[GROUP BY <cột nhóm 1> [, ]
[HAVING <điều kiện nhóm>]]
[UNION | INTERSECT | MINUS
< câu truy vấn khác>]

Các thành phần cơ bản của câu lệnh
+ Biểu thức sau SELECT có thể bao gồm :
- Danh sách các cột, kể cả các biểu thức chứa các cột, của các bảng hoặc
khung nhìn khai báo sau FROM. Các biểu thức ngăn cách nhau bằng dấu phảy (,)
và có thể đổi tên bằng tuỳ chọn AS <tên >.
- * là ký tự đại diện tất cả các thuộc tính của bảng sau FROM
- Các hàm tính toán : COUNT, SUM, AVG, MIN, MAX

+ Biểu thức sau FROM gồm một hoặc danh sách các bảng quan hệ (có thể đặt
bí danh).

+ INTO <dbf đích>: Lu bảng kết quả vào đĩa.
+ Biểu thức sau WHERE bao gồm:
- Các thuộc tính của các bảng quan hệ sau FROM
- Các toán tử số học : + (cộng),
(trừ)
, * (nhân) , / (chia)
- Các toán tử so sánh, có thể so sánh với ANY (giá trị nào đó trong 1 tập hợp)
hoặc ALL (tất cả giá trị trong 1 tập hợp)
- Các toán tử Boolean : AND (và), OR (hoặc), NOT (phủ định)
- Các toán tử tập hợp : UNION (hợp), INTERSECT (giao), MINUS (hiệu)
- Các quan hệ bao hàm : IN (), NOT IN (), CONTAINS (chứa), DOES
NOT CONTAIN (không chứa)
- <biểu thức> BETWEEN < biểu thức 1> AND < biểu thức 2> : biểu diễn
điều kiện < biểu thức 1> <biểu thức> < biểu thức 2>
- <biểu thức> NOT BETWEEN < biểu thức 1> AND < biểu thức 2> : biểu
diễn điều kiện <biểu thức> < < biểu thức 1> hoặc <biểu thức> > < biểu thức 2>
- <biểu thức ký tự> [NOT] LIKE <chuỗi ký tự> : biểu diễn điều kiện
<biểu thức ký tự> [không] giống <chuỗi ký tự>
Trong <chuỗi ký tự> có thể dùng dấu
% (dấu phần trăm) đại diện cho chuỗi ký tự bất kỳ
_ (dấu nối) đại diện cho một ký tự bất kỳ
- <trờng> IS [NOT] NULL: biểu diễn điều kiện giá trị <trờng> là [khác]
NULL
- Điều kiện tồn tại : EXISTS (tồn tại), NOT EXISTS (không tồn tại)
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 16
1616

16

- Câu vấn tin con kiểu SELECT FROM WHERE
+ GROUP BY : Tổng hợp dữ liệu.
+ ORDER BY : Sắp xếp dữ liệu.

2. Truy vấn giản đơn

Cú pháp
SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [, ] | *
FROM <bảng>

Công dụng
Tạo bảng kết quả gồm các cột liệt kê sau SELECT hoặc tất cả các cột <*>
lấy từ <Bảng>.
Từ khoá DISTINCT dùng liệt kê những giá trị duy nhất tránh trùng lặp.

Ví dụ
- Tạo bảng kết quả gồm tất cả các cột và các bộ của bảng CUNGUNG(Ten,
DiaChi, Hang, DonGia).

SELECT *
FROM CUNGUNG

- Tạo bảng kết quả gồm 2 cột Hang, DonGia của bảng CUNGUNG.

SELECT Hang, DonGia
FROM CUNGUNG
hoặc
SELECT DISTINCT Hang, DonGia

FROM CUNGUNG

- Tạo bảng kết quả gồm 1 cột Hang với giá trị duy nhất của bảng CUNGUNG.

SELECT DISTINCT Hang
FROM CUNGUNG

- Có thể cho hiển thị giá trị hằng, chẳng hạn
SELECT Mặt hàng, Hang, có đơn giá là, DonGia
FROM CUNGUNG

3. Truy vấn có điều kiện

Cú pháp
SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [, ] | *
FROM <bảng >
WHERE <điều kiện lọc>

Công dụng
Tạo bảng kết quả gồm các cột liệt kê sau SELECT hoặc tất cả các cột <*>
lấy từ <Bảng> gồm các bộ thoả mãn <điều kiện lọc>.
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 17
1717
17



Ví dụ
- Tạo bảng kết quả gồm các cột Ten, DiaChi có giá trị duy nhất từ bảng
CUNGUNG(Ten, DiaChi, Hang, DonGia) của các nhà cung ứng hoặc Đờng
hoặc Sữa.

SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
WHERE (Hang = Đờng) OR (Hang = Sữa)
hoặc
SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
WHERE Hang IN (Đờng, Sữa)

- Tạo bảng kết quả gồm các Ten, DiaChi của các khách hàng có SoDu không
âm từ bảng KHACH(Ten, DiaChi, SoDu)

SELECT Ten, DiaChi
FROM KHACH
WHERE SoDu >= 0

- Tạo bảng kết quả gồm các hợp đồng mua gạo có SoLuong từ 100 đến 200 từ
bảng HOPDONG(SoHD, TenKH, Hang, Soluong)

SELECT *
FROM HOPDONG
WHERE (Hang = Gạo) AND (SoLuong BETWEEN 100 AND 200)

- Tạo bảng kết quả gồm Tên và địa chỉ các nhà cung ứng có tên bắt đầu bằng
Công ty từ bảng CUNGUNG(Ten, DiaChi, Hang, DonGia)


SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
WHERE Ten LIKE Công ty %

- Tạo bảng kết quả gồm các nhà cung ứng có mặt hàng Bia từ bảng
CUNGUNG(Ten, DiaChi, Hang, DonGia)

SELECT *
FROM CUNGUNG
WHERE Hang LIKE Bia %

- Chọn những khách hàng cha có địa chỉ

SELECT *
FROM KHACH
WHERE DiaChi IS NULL

- Chọn những khách hàng có số d xác định :
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 18
1818
18


SELECT *
FROM KHACH
WHERE SoDu IS NOT NULL



4. Truy vấn có sắp xếp
Cú pháp
SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [, ] | *
FROM <bảng >
ORDER BY <biểu thức sắp xếp 1> [ASC | DESC] [, ]

Công dụng
Tạo bảng kết quả gồm các cột liệt kê sau SELECT hoặc tất cả các cột <*>
lấy từ <Bảng> gồm các bộ đợc sắp xếp theo các biểu thức sau ORDER BY.

ý nghĩa các tham số :
ASC : tăng dần (ngầm định)
DESC : giảm dần

Ví dụ
- Tạo bảng kết quả khách hàng sắp xếp theo Ten tăng dần
SELECT *
FROM KHACH
ORDER BY Ten

- Tạo bảng kết quả các nhà cung ứng Sữa sắp xếp theo thứ tự DonGia giảm
dần
SELECT *
FROM CUNGUNG
WHERE Hang = Sữa
ORDER BY DonGia DESC

- Tạo bảng kết quả các nhà cung ứng sắp xếp theo thứ tự Ten và Hang :

SELECT *
FROM CUNGUNG
ORDER BY Ten, Hang


5. Truy vấn kết nối nhiều bảng

Cú pháp
SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [, ] | *
FROM <bảng 1> [<bí danh 1>], <bảng 2> [<bí danh 2>] [, ]
WHERE <điều kiện nối > [AND | OR <điều kiện lọc>]

Công dụng
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 19
1919
19

Tạo bảng kết quả gồm các thuộc tính liệt kê sau SELECT hoặc tất cả các thuộc
tính <*> lấy từ <Bảng 1>, <Bảng 2>, gồm các bộ thoả mãn <điều kiện nối>
(và <điều kiện lọc>).

Ví dụ
- Tạo bảng gồm tất cả hợp đồng và hãng cung ứng có mặt hàng trong hợp
đồng.
SELECT a.Sohd, a.TenKh, a.Hang, a.SoLuong, b.Ten, b.DonGia
FROM HOPDONG a, CUNGUNG b

WHERE a.Hang = b.Hang

- Tạo bảng gồm tất cả hợp đồng của khách hàng Khách sạn Bạch Đằng và
hãng cung ứng có mặt hàng trong hợp đồng, sắp xếp theo Sohd.

SELECT a.Sohd, a.Hang, a.SoLuong, b.Ten, b.DonGia
FROM HOPDONG a, CUNGUNG b
WHERE (a.Hang = b.Hang) AND (a.TenKh = Khách sạn Bạch Đằng)
ORDER BY a.Sohd


6. Truy vấn sử dụng các phép toán tập hợp

Cú pháp
SELECT FROM WHERE GROUP BY ORDER
UNION | MINUS | INTERSECT
SELECT FROM WHERE GROUP BY ORDER

Công dụng
Thực hiện các phép toán tập hợp trên quan hệ: hợp (UNION), hiệu (MINUS),
giao (INTERSECT).

Ví dụ
- Tạo bảng hợp hai quan hệ R và S ứng hợp
SELECT *
FROM R
UNION
SELECT *
FROM S


- Tìm các mặt hàng trong bảng CUNGUNG(Ten, DiaChi, Hang, DonGia) cha
đợc đặt hàng trong bảng HOPDONG(SoHD, TenKH, Hang, SoLuong)

SELECT DISTINCT Hang
FROM CUNGUNG
MINUS
SELECT DISTINCT Hang
FROM HOPDONG

- Tìm Ten, DiaChi các hãng cung ứng Đờng và Sữa
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 20
2020
20


SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
WHERE Hang = Đờng
INTERSECT
SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
WHERE Hang = Sữa


7. Các hàm tính toán


COUNT([DISTINCT] ) : Đếm số bản ghi.
SUM( ) : Tính tổng các biểu thức số.
AVG( ) : Tính trị trung bình các biểu thức số.
MAX( ) : Tìm trị lớn nhất.
MIN( ) : Tìm trị nhỏ nhất.

Ví dụ
- Tính tổng số hợp đồng :

SELECT COUNT(*)
FROM HOPDONG

- Tính số các hãng cung ứng :

SELECT COUNT( DISTINCT Ten)
FROM CUNGUNG

- Tính số hãng cung ứng sữa :

SELECT COUNT( DISTINCT Ten)
FROM CUNGUNG
WHERE Hang = Sữa

- Tính tổng số lợng Đờng trong các hợp đồng

SELECT SUM(SoLuong)
FROM HOPDONG
WHERE Hang = Đờng

- Tính giá bình quân Đờng của các hãng cung ứng :


SELECT AVG(DonGia)
FROM CUNGUNG
WHERE Hang = Đờng

- Tính SoDu lớn nhất trong bảng KHACH

SELECT MAX(SoDu)
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 21
2121
21

FROM KHACH

- Tìm giá Gạo thấp nhất trong bảng CUNGUNG:

SELECT MIN(DonGia)
FROM CUNGUNG
WHERE Hang = Gạo


8. Truy vấn theo nhóm

Cú pháp
SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [, ] | *
FROM <bảng 1> [<bí danh 1>] [, ]

[WHERE <điều kiện nối > [AND / OR <điều kiện lọc>]]
GROUP BY <biểu thức nhóm 1> [, ]
[HAVING <điều kiện nhóm>]

Công dụng
Nhóm các bản ghi (thoả mãn <điều kiện nối> hoặc <điều kiện lọc>, nếu có)
theo danh sách thuộc tính sau GROUP BY, sau đó kết xuất kết quả tổng hợp
(thoả <điều kiện nhóm>).
Các thuộc tính sau GROUP BY phải có trong danh sách thuộc tính sau
SELECT.

Ghi chú
- Các hàm tính toán có thể sử dụng sau SELECT hoặc trong điều kiện nhóm.
- Hàm tập hợp SET( ) (tập hợp các phần tử) chỉ sử dụng trong điều kiện
nhóm.

Ví dụ
- Liệt kê các hãng cùng tổng số mặt hàng mà nó cung ứng :
SELECT Ten, COUNT(Hang) AS SoHang
FROM CUNGUNG
GROUP BY Ten

- Liệt kê các mặt hàng cùng tổng SoLuong trong HOPDONG
SELECT Hang, SUM(SoLuong) AS TongCong
FROM HOPDONG
GROUP BY Hang

- Liệt kê các mặt hàng cùng giá bình quân trong CUNGUNG :
SELECT Hang, AVG(DonGia) AS DonGiaBQ
FROM CUNGUNG

GROUP BY Hang

- Liệt kê các mặt hàng cùng tổng số hãng cung ứng mặt hàng đó :
SELECT Hang, COUNT(Ten) AS SoCty
FROM CUNGUNG
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 22
2222
22

GROUP BY Hang

- Liệt kê các mặt hàng độc quyền chỉ có 1 hãng cung ứng:
SELECT Hang, COUNT(Ten) AS SoCty
FROM CUNGUNG
GROUP BY Hang
HAVING COUNT(Ten) = 1

- Liệt kê Ten, DiaChi các hãng có ít nhất k mặt hàng trong HOPDONG :
SELECT DISTINCT c.Ten, c.DiaChi
FROM CUNGUNG c, HOPDONG h
WHERE c.Hang = h.Hang
GROUP BY c.Ten
HAVING COUNT(DISTINCT c.Hang) >= k

- Liệt kê tên, địa chỉ các hãng cung ứng cả Đờng và Sữa :
SELECT DISTINCT Ten, DiaChi

FROM CUNGUNG
GROUP BY Ten
HAVING SET(Hang) CONTAINS (Đờng, Sữa)

- Liệt kê tên, địa chỉ các hãng cung ứng đồng thời cả Đờng, Sữa và Cafe :
SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
GROUP BY Ten
HAVING SET(Hang) CONTAINS (Đờng, Sữa, Cafe)

9. Truy vấn con lồng nhau

Cú pháp:
SELECT [DISTINCT] <biểu thức 1> [AS <tên 1>] [, ] / *
FROM <bảng 1> [<bí danh 1>] [, ]
[WHERE <điều kiện nối, lọc có chứa câu truy vấn con >]
[GROUP BY < thuộc tính nhóm 1> [, ]
[HAVING <điều kiện nhóm có chứa câu truy vấn con>]]
[ORDER BY <biểu thức sắp xếp 1> [ASC / DESC] [, ]]

Công dụng:
Cho phép tạo ra các điều kiện chứa quan hệ tập hợp và số liệu tổng hợp.
Trong quan hệ tập hợp, câu truy vấn con đặt trong ngoặc đơn .

a. Sử dụng các toán tử so sánh : <, <=, = , > , >=, <>
Ví dụ
- Liệt kê tên các khách hàng có số d lớn nhất:
SELECT Ten
FROM KHACH
WHERE Sodu =

(SELECT MAX(Sodu)
FROM KHACH)
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 23
2323
23


- Liệt kê tên các hãng cung ứng gạo có DonGia <= DonGia trung bình :
SELECT Ten
FROM CUNGUNG a
WHERE (a.Hang = Gạo) AND a.DonGia <=
(SELECT AVG(b.DonGia)
FROM CUNGUNG b
WHERE b.Hang = Gạo)

b. Sử dụng các toán tử so sánh : <, <=, = , > , >=, <> với ANY
|
||
|
ALL
Ví dụ
- Liệt kê nhân viên từ bảng NHANVIEN(Manv, HoLot, Ten, GioiTinh,
NgaySinh, ) có NgaySinh trùng với ngời khác

SELECT a.Manv, a.HoLot, a.Ten
FROM NHANVIEN a

WHERE a.NgaySinh = ANY
(SELECT b.NgaySinh
FROM NHANVIEN b
WHERE b.Manv <> a.Manv)

- Liệt kê nhân viên từ bảng NHANVIEN có NgaySinh không trùng với ngời
khác

SELECT a.Manv, a.HoLot, a.Ten
FROM NHANVIEN a
WHERE a.NgaySinh <> ALL
(SELECT b.NgaySinh
FROM NHANVIEN b
WHERE b.Manv <> a.Manv)

c. Sử dụng toán tử IN (NOT IN) biểu diễn quan hệ

(

)
Ví dụ
- Liệt kê Ten, Hang và DonGia của các hãng cung ứng có ít nhất 1 mặt hàng
trong HOPDONG :

SELECT DISTINCT Ten, Hang, DonGia
FROM CUNGUNG
WHERE Hang IN
(SELECT Hang
FROM HOPDONG )


- Liệt kê Ten, Hang và DonGia của các hãng cung ứng có ít nhất 1 mặt hàng
mà khách hàng Khách sạn Bạch Đằng đặt hàng :

SELECT DISTINCT Ten, Hang, DonGia
FROM CUNGUNG
WHERE Hang IN
(SELECT Hang
FROM HOPDONG
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 24
2424
24

WHERE TenKh = Khách sạn Bạch Đằng )

- Liệt kê Ten, DiaChi các hãng cung ứng không bán Gạo :

SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
WHERE Ten NOT IN
(SELECT Ten
FROM CUNGUNG
WHERE Hang = Gạo)

- Liệt kê tên và địa chỉ của các hãng khác Công ty lơng thực có ít nhất 1 mặt
hàng giống Công ty Lơng thực :


SELECT DISTINCT a.Ten, a.DiaChi
FROM CUNGUNG a
WHERE (a.Ten <> Công ty lơng thực) and (a.Hang IN
(SELECT b.Hang
FROM CUNGUNG b
WHERE b.Ten = Công ty lơng thực))

- Liệt kê hợp đồng có TenKh và Hang giống hợp đồng số 3 :

SELECT *
FROM HOPDONG a
WHERE (a.TenKh, a.Hang) IN
(SELECT b.TenKh, b.Hang
FROM HOPDONG b
WHERE b.SoHD = 3)

- Liệt kê Hãng không có mặt hàng trong HOPDONG :

SELECT DISTINCT Ten
FROM CUNGUNG
MINUS
SELECT DISTINCT Ten
FROM CUNGUNG
WHERE Hang IN
(SELECT Hang
FROM HOPDONG )

- Liệt kê Hãng có mặt hàng không có trong HOPDONG :

SELECT DISTINCT Ten

FROM CUNGUNG
WHERE Hang NOT IN
(SELECT Hang
FROM HOPDONG )

d. Sử dụng [NOT] EXISTS <bảng> biểu diễn sự tồn tại
Trần Quốc Chiến Cơ sở dữ liệu

Chơng 5. Ngôn ngữ truy vấn SQL 5
5 5
5 25
2525
25

Ví dụ
- Liệt kê Ten, DiaChi khách hàng đã đặt hàng :

SELECT Ten, DiaChi
FROM KHACH
WHERE EXISTS
(SELECT Hang
FROM HOPDONG
WHERE TenKh = Ten)

- Liệt kê Ten, DiaChi khách hàng cha có hợp đồng:

SELECT Ten, DiaChi
FROM KHACH
WHERE NOT EXISTS
(SELECT Hang

FROM HOPDONG
WHERE TenKh = Ten)

e. Sử dụng GROUP BY HAVING SET( ) và các hàm tính toán
Ví dụ
- Liệt kê Ten, DiaChi của các hãng, mà tất cả mặt hàng của nó đều có trong
HOPDONG :
SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
GROUP BY Ten
HAVING SET(Hang) IN
(SELECT DISTINCT Hang
FROM HOPDONG )

- Liệt kê Ten, DiaChi hãng cung ứng tất cả mặt hàng trong HOPDONG :

SELECT DISTINCT Ten, DiaChi
FROM CUNGUNG
GROUP BY Ten
HAVING SET(Hang) CONTAINS
(SELECT DISTINCT Hang
FROM HOPDONG)

- Liệt kê Ten, DiaChi hãng có tất cả mặt hàng mà Công ty Lơng thực có:

SELECT DISTINCT a.Ten, a.DiaChi
FROM CUNGUNG a
GROUP BY a.Ten
HAVING SET(a.Hang) CONTAINS
(SELECT b.Hang

FROM CUNGUNG b
WHERE b.Ten = Công ty lơng thực)

×