You are on page 1of 10

Chương 3.

Thiết kế truy vấn


1. Tổng quan về truy vấn
a. Tác dụng của truy vấn
- Dùng để trả lời các câu hỏi có tính chất tức thời.
- Bộ hỏi được dùng để lựa chọn các bản ghi (record), cập nhật các bảng và bổ sung các bản
ghi mới vào bảng.
- Dùng làm nguồn dữ liệu cho các biểu mẫu, báo cáo.
- Tạo lập, cập nhật CSDL.
b. Trong Access, người ta chia truy vấn thành các loại chính sau:
- Truy vấn chọn (Select Query): Thực hiện việc tìm kiếm (kể cả tính toán).
- Truy vấn Crosstab: Thực hiện thống kê trên CSDL.
- Truy vấn hành động (Action Query): Cho phép cập nhật CSDL gồm bổ sung, loại bỏ hay
thay đổi.
- Truy vấn định nghĩa dữ liệu, truy vấn hợp.
- Truy vấn Pass Through: Gửi lệnh SQL tới CSDL qua ODBC (ví dụ như CSDL SQL
server) trên server để thao tác dữ liệu trên đó.
c. Kết quả của truy vấn hiển thị dưới dạng bảng
Bảng này có thể thuộc 2 loại: Dynaset, Snapshot.
d. Ngôn ngữ để xây dựng truy vấn
- QBE: Dùng thiết kế các truy vấn thao tác dữ liệu ở mức tương đối đơn giản.
- SQL: Xây dựng tất cả các loại truy vấn
2. Các toán tử trong Access
a. Toán tử số học
Toán tử Mô tả Ví dụ
+ Cộng hai toán hạng [lương]+[phụ cấp]
- Trừ hai toán hạng Date-30
-(toán tử Thay đổi dấu của một toán hạng -12345
đơn)
* Nhân hai toán hạng [hệ số]*[lương cơ
bản]
/ Chia một toán hạng voái một toán hạng 15.2/12.55
khác
\ Chia một toán hạng số nguyên với một 5\2
toán hạng số nguyên khác.
Mod Trả về số dư của phép chia với một số 5 Mod 2
nguyên.
^ Nâng lũy thừa một toán hạng (số mũ) 4^3
b. Toán logic

Toán tử Mô tả Ví dụ Kết qủa


And Và lôgic True And True True
True And False False
Or Or baog gồm True Or False True
False Or False False
Not Không lôgic Not True False
Not False True
Xor Or loại trừ True Xor False True
True Xor True False
c. Hàm ngày và giờ
Hàm Mô tả Ví dụ Trả về
Date() Trả về ngày hiện tại của hệ Date() 22/1/2005
thống
Day (exp) Trả về một ngày trong một Day (#7/15/2004#) 15
tháng
Month(exp) Trả về một tháng trong một Month(#7/15/2004#) 7
năm
Weekday(exp) Trả về một ngày trong tuần Weekday(#1/23/2005#) 2
Year(exp) Cho biết năm của biểu thức Year(#1/23/2005#) 2005

d. Hàm xử lý kiểu dữ liệu trường Text

Hàm Mô tả Ví dụ Trả về
Format(exp) Định dạng biểu thức theo các dạng Format(Date(), 23-Jul-
thức thích hợp. “dd-mm-yyyy” ) 2005
LCase(exp) Trả về phiên bản chữ thường của LCase(“Lan”) lan
một chuỗi.
UCase(exp) Trả về phiên bản chữ hoa của một UCase(“Lan”) LAN
chuỗi.
LTrim(exp) Xóa tất cả các dấu cách ở đầu LTrim (“ Lan”) Lan
chuỗi.
RTrim(exp) Xóa tất cả các dấu cách ở cuối RTrim(“Lan ”) Lan
chuỗi.
Trim(exp) Xóa tất cả các dấu cách ở đầu và Trim (“ Lan ”) Lan
cuối chuỗi.
Str(exp) Chuyển một số thành một chuỗi. Str(123.45) 123.45
Val(exp) Chuyển một chuỗi thành một số Val(“123.45”) 123.45

e. Hàm toán học và hàm lượng giác

Hàm Mô tả Ví dụ Trả về
Abs(exp) Trả về giá trị tuyệt đối của một Abs(-1234.5) 1234.5
số
Atn(exp) Hàm arctang, tính theo radian. Atn(1) 0.7853982
Cos(exp) Hàm cosin, tính theo radian. Cos(pi/4) 0.707106719949
Exp(exp Hàm ex Exp(2.302585) 9.9999990700
)
Int(exp) Trả về phần nguyên của giá trị Int(13.5) 13.5
số Int(-13.5) -13.5
Log(exp Hàm logarit cơ số e. Log(10) 2.302585
)
Sgn(exp) Hàm dấu Sgn(-13.5) -1
Sgn(13.5) 0
Sin(exp) Hàm sin, tính theo radian. Sin(pi/4) 0.707106842423
Sqr(exp) Hàm căn bậc hai. Sqr(144) 12
Tan(exp) Hàm tang, tính theo radian. Tan(pi/4) 1.0000001723

f. Các toán tử khác

Toán Mô tả Ví dụ
tử
Is Được dùng với Null để xác định một giá trị Is Null
nào đó có phải là Null hay Not Null Is Not Null
Like Xác định một giá trị chuỗi có bắt đầu bằng một Like “Jon*”
hay nhiều ký tự. (Để Like làm việc đúng đắn, Like “FILE????”
ta phải bổ sung một dấu đại diện *, hoặc một
hay nhiều dấu ?)
In Xác định một giá trị chuỗi có thuộc một thành In (“CA”, “OR”,
phần của danh sách các giá trị hay không. “WA”)
Between Xác định một số có nằm trong một miền giá trị Between 1 And 5
đã chỉ định hay không.
3. Thiết kế truy vấn QBE
3.1 Các bước để tạo truy vấn QBE:
Bước 1: Từ cửa sổ Database ta làm theo một trong hai cách sau:
Cách 1: Từ cửa sổ Database, trong mục Object chọn Query -> New -> Design View
-> OK
Cách 2: Từ cửa sổ Database, trong mục Object chọn Query -> Create Query in
Design View -> Sau bước một ta có cửa sổ thao tác như sau:
Bước 2: Từ cửa sổ Show Table chọn các bảng dữ liệu hoặc các truy vấn liên quan
đến câu hỏi, bằng cách Chọn tên bảng (hoặc tên truy vấn) -> Add. Kết thúc
quá trình chọn bảng, truy vấn chọn Close.
Ví dụ, câu hỏi liên quan đến 2 bảng PHONG, NHANVIEN chúng ta có cửa
sổ:
Field: Các trường liên quan đến truy vấn. Có thể xuất hiện ở kết quả hoặc
điều kiện tìm kiếm.
Trường kết xuất có dạng <Tên trường kết xuất>:<Biểu thức>
Table: Bảng chứa trường được lựa chọn.
Sort: Sắp thứ tự kết quả theo thứ tự tăng hoặc giảm.
Show: Trường xuất hiện ở kết quả.
Criteria: Điều kiện chọn có dạng: <Phép toán quan hệ><Biểu thức>
Hoặc <toán tử thao tác dữ liệu><Biểu thức
Hai biểu thức trên có thể viết trên một dòng sẽ tổ hợp thành điều kiện and.
Or: Tìm kiếm theo điều kiện Or. Có thể thêm dòng.
Buớc 3: Lựa chọn các trường cần hiển thị trong kết quả của truy vấn hoặc liên quan
đến các điều kiện tìm kiếm. Sau đó, soạn thảo các điều kiện tìm kiếm
trong phần Criteria.
Bước 4: Thực hiện truy vấn bằng một trong hai cách sau
Cách 1: Chọn biểu tượng ! trên thanh công cụ.
Cách 2: Trên thanh menu chọn Query\Run
Bước 5: Ghi lại kết quả truy vấn (nếu muốn) bằng cách
Cách 1: Chọn biểu tượng đĩa mềm trên thanh công cụ.
Cách 2: Trên thanh menu chọn File\Save
3.2 Một số truy vấn QBE
a. Truy vấn lựa chọn
Ví dụ 1: Cho biết họ tên, tên phòng làm việc của các nhân viên có đủ tiêu chuẩn về
hưu trong năm nay: nam từ 60 tuổi trở nên, nữ từ 55 tuổi trở nên.
Ví dụ 2: Đưa ra danh sách nhân viên nữ trong cơ quan
b. Truy vấn tính toán
Các bước thiết kế một truy vấn tính toán:
- Tạo một truy vấn mới như trong phần 3.1
- Chuyển từ truy vấn chọn thông thường trong phần a (truy vấn chọn) sang truy vấn
tính toán bằng cách chọn biểu tượng totals trên thanh công cụ hoặc trên thanh menu
chọn View -> Totals
Sau khi thực hiện các bước trên, cửa sổ của truy vấn tính toán có dạng như sau:
Trong mục Total của mỗi cột có những lựa chọn sau:
- Group by: Dùng để chỉ ra trường nào là trường phân nhóm.
- Sum: Tính tổng.
- Avg: Tính trung bình.
- Min: Tìm giá trị nhỏ nhất.
- Max: Tìm giá trị lớn nhất.
- Count: Đếm.
- StDev: Tìm độ lệch chuẩn.
- Var: Tìm phương sai.
- First: Tìm bản ghi đầu tiên.
- Last: Tìm bản ghi cuối cùng.
- Expression: Một biểu thức trong tính toán, đi kèm với một tính toán
bằng hàm thư viện khác.
- Where: Điều kiện lọc các bản ghi tham gia vào tính toán
Ví dụ 1: Tính tiền thưởng cho nhân viên phòng “Kỹ thuật” bằng 2,5 lương trung bình
Ví dụ 2: Thiết kế truy vấn nguồn dữ liệu cho bảng tổng hợp lương trong toàn cơ quan
bao gồm: tên phòng, tổng lương mà phòng đó được nhận
c. Truy vấn tham số
Khi thực hiện truy vấn, màn hình nhập giá trị tham số sẽ xuất hiện
Truy vấn sẽ được thực hiện với giá trị tham số được nhập từ bàn phím
cho kết quả hoặc điều kiện.

Cách tạo truy vấn tham số


- Thực hiện các bước tạo truy vấn như trong phần 3.1
- Để biến một đối tượng nào thành truy vấn, chỉ cần bao nó bởi cặp ngoặc
vuông
Ví dụ 1: Thiết kế truy vấn chuẩn bị nguồn dữ liệu cho danh sách nhân viên nữ nhận
tiền thưởng 8-3. Số tiền nhập vào từ bàn phím
Ví dụ 2: Đưa ra danh sách nhân viên một phòng, gồm mã nhân viên, họ
tên, ngày sinh, tên phòng. Mã phòng nhập từ bàn phím
d. Phân biệt quan hệ kiểu Inner Join và Outer Join
Ví dụ: Tính tổng số nhân viên trong các phòng của cơ quan. Có thể có phòng mới
thành lập chưa có nhân viên. Khi đó, tổng số nhân viên của phòng phải là không.
Nếu dùng inner Join thì không đưa ra được những phòng có số nhân viên là 0.
Muốn thể hiện đúng kết quả phép kết nối trong truy vấn phải là outer Join
(Left Join).
Trường hợp 1: Dùng inner Join
Trường hợp 2: Dùng Outer Join
Cách tạo truy vấn Outer Join
Sau khi mở cửa sổ thiết kế truy vấn. Chọn kiểu truy vấn thích hợp: truy vấn
chọn, truy vấn tính toán, truy vấn tham số, …
Muốn chuyển liên kết giữa 2 bảng nào thành Outer Join, ta kích chuột phải vào liên
kết đó -> chọn Join Properties. Màn hình có dạng
Chọn 2, hoặc 3 là kiểu kết nối Outer Join. Chọn 1 là kiểu kết nối Inner Join. Sau đó
thực hiện truy vấn bằng cách chọn biểu tượng ! hoặc trên thanh menu
chọn Query -> Run.
Trong trường hợp của ví dụ này, chúng ta đang cần đếm số nhân viên của một
phòng, có thể có những phòng chưa có nhân viên. Do đó, chúng ta chọn kiểu
quan hệ giữa bảng NHANVIEN và bảng PHONG là kiểu số 2
e. Truy vấn bổ sung
Khi cần bổ sung dữ liệu vào CSDL có thể thực hiện theo các cách sau:
- Bổ sung các bảng ghi đơn lẻ: Mở bảng hoặc form, thêm một số dòng.
- Bổ sung dữ liệu có sẵn từ các bảng hoặc query khác vào bảng cần lưu bằng cách:
lập truy vấn bổ sung.
Để tạo truy vấn bổ sung mới bằng QBE ta làm như sau:
- Tạo truy vấn mới như trong 3.1
- Trên màn hình thiết kế truy vấn chọn mới, chuyển sang truy vấn bổ sung bằng
cách chọn menu Query -> Append Query. Cửa sổ sau xuất hiện. Chọn bảng cần bổ
sung thông tin trong mục Table Name, sau đó chọn OK.
- Xác định các giá trị sau:
Field: Các trường liên quan - trường cho dữ liệu hoặc có mặt trong điều kiện
chọn.
Table: Tên bảng chứa trường được chọn.
Sort: Sắp xếp dữ liệu sẽ bổ sung theo thứ tự tăng hoặc giảm của trường
được chọn.
Append To: Trường nhận dữ liệu. Ngầm định là trường trùng tên trong bảng
nhận.
Criteria: Điều kiện chọn các bản ghi để bổ sung
- Chọn biểu tượng ! để thực hiện truy vấn.
- Mở bảng LUU để xem kết quả.
- Mở truy vấn ở chế độ Datasheet để xem dữ liệu thêm vào CSDL có
đúng như ta mong muốn không.
Ví dụ 1: Đưa vào bảng LUU thông tin về nhân viên với mã nhân viên nhập từ bàn
phím.
- Đầu tiên tạo truy vấn mới như trong 3.1
- Chọn các bảng chứa thông tin liên quan: NHANVIEN, PHONG.
- Chọn menu Query -> Append Query. Trong cửa sổ Append, chọn LUU trong
Table Name.
. Truy vấn loại bỏ
Nếu loại bỏ một số bản ghi đơn lẻ, có thể loại bỏ trực tiếp trên bảng hoặc
form. Truy vấn loại bỏ được sử dụng khi loại bỏ các bản ghi thỏa mãn
điều kiện nào đó có thể được thiết kế bằng QBE hoặc bằng SQL để
chạy tự động trong chương trình
Các bước để tạo truy vấn loại bỏ:
- Tạo truy vấn mới, trên màn hình Show Table chọn các bảng liên quan đến truy
vấn. Gồm một bảng cần loại bỏ và các bảng liên quan đến điều kiện để loại
bỏ.
- Trên thanh menu chọn Query -> Delete Query. Cửa sổ thiết kế truy vấn loại bỏ
như sau:
Field: Bảng cần xóa thông tin, các trường liên quan đến điều kiện.
Delete: Access tự điền là From hoặc Where.
Criteria và Or: Điền điều kiện chọn bản ghi để loại bỏ.
- Kích hoạt biểu tượng Datasheet View.
Chú ý: Khi thiết kế truy vấn loại bỏ phải nhớ thiết lập thuộc tính Cascade Delete
(trong cửa sổ thiết lập quan hệ giữa các bảng) để tránh phải thực
hiện những thao tác không cần thiết.
Ví dụ 1: Xóa thông tin về một nhân viên, với mã nhân viên nhập từ bàn phím
g. Truy vấn thay đổi.
Thay đổi các giá trị đơn lẻ: Trực tiếp trên bảng hoặc Form.
Khi cần thay đổi hàng loạt bản ghi thỏa mãn điều kiện nào đó: Tạo truy vấn
thay đổi.
Các bước tạo truy vấn thay đổi:
- Tạo truy vấn mới, chọn các bảng liên quan: Một bảng cần thay đổi dữ liệu
và các bảng liên quan đến điều kiện.
- Trên thanh menu chọn Query -> Update Query. Cửa sổ thiết kế truy vấn thay đổi
như sau
Field: Trường cần thay đổi hoặc có liên quan đến điều kiện.
Update To: Giá trị mới của trường.
Criteria: Điều kiện chọn bản ghi để thay đổi.
Trước khi thực hiện truy vấn thay đổi, cũng cần xem trước
những bản ghi được thay đổi xem sự thay đổi đó có phù hợp với yêu cầu
không?
Chú ý: Tương tự như thao tác loại bỏ chú ý đến việc xác lập tùy chọn
Cascade Update để tránh những thao tác thay đổi không cần thiết.
Ví dụ 1: Thực hiện những thay đổi sau đây với những nhân viên vào biên
chế trước 1/1/1995. Đổi ngày biên chế thành 1/1/95, tăng gấp đôi số lương.
Dùng trong các biểu mẫu thống kê. Đặc trưng quan trọng là có thể chuyển dữ
liệu trong bảng thành tiêu đề cột, hàng.
Ví dụ, kết quả của 1 truy vấn Crosstab cho biết số nhân viên nam của mỗi phòng, số
nhân viên nữ của mỗi phòng có dạng
Các bước tạo truy vấn Crosstab:
- Tạo truy vấn mới, chọn bảng hoặc truy vấn nguồn dữ liệu liên quan.
- Trên thanh menu chọn Query -> Crosstab Query
- Chọn các trường để nhóm theo hàng.
- Chọn các trường để nhóm theo cột.
- Chọn giá trị để lưu ở các ô (giao của một hàng và một cột), ở đó có
thể dùng các hàm thư viện SUM, COUNT, . . . để tính toán
Ví dụ 1: Một truy vấn để tính tổng số nam, nữ trong từng phòng, chuẩn
bị nguồn dữ liệu cho báo cáo về tỷ lệ nam, nữ trong từng phòng
Ví dụ 2: Đếm số nhân viên nữ trong cơ quan
4. Thiết kế truy vấn SQL
4.1 Cách mở cửa sổ thiết kế truy vấn SQL
Bước 1: Từ cửa sổ Database, trong mục Objects chọn đối tượng
Querys -> Create query in Design view. Sau bước này cửa sổ Show
tables xuất hiện (như trong phần thiết kế truy vấn QBE).
Bước 2: Đóng cửa sổ Show table này lại, trên menu chọn View -> SQL
View. Cửa sổ thiết kế SQL xuất hiện, và chúng ta soạn câu lệnh SQL trong cửa
sổ này.
Bước 3: Để thực hiện câu lệnh SQL chọn biểu tượng ! trên thanh công cụ
4.2 Cú pháp của câu lệnh SQL
SELECT [DISTINCT|ALL]{*| <danh sách các thuộc tính>|<biểu thức cột> [AS <tên
mới>]}
FROM <tên bảng>[<bí danh>] [, …]
[WHERE <điều kiện lựa chọn các bản ghi>]
[GROUP BY <danh sách tên cột dùng để gộp nhóm>] [HAVING <điều kiện
lựa chọn nhóm>]
[ORDER BY <danh sách cột dùng để sắp xếp>]
Trong đó
- biểu thức cột: là tên của một cột hoặc một biểu thức.
- tên bảng: là tên của một bảng hoặc một khung nhìn.
- bí danh: là một tên viết tắt của tên bảng.
- GROUP BY dùng để nhóm các bản ghi có cùng giá trị trong danh sách tên
cột dùng để gộp nhóm thành một nhóm.
- HAVING dùng để lọc các nhóm thỏa mãn điều kiện lựa chọn nhóm.
- ORDER BY qui định thứ tự các bản ghi trong kết quả trả ra, thứ
tự các bản ghi được sắp xếp dựa vào giá trị trong của các cột trong danh sách
cột dùng để sắp xếp.
Khi viết lệnh SQL cần chú ý:
- Phần đặt trong cặp dấu [ ]: là phần có thể sử dụng hoặc không.
- Những phần đặt trong cặp dấu {} : bắt buộc phải lựa chọn một
số giá trị trong cặp dấu ngoặc này
- Phần đặt trong cặp dấu <>: là phần bắt buộc phải có khi viết lệnh SQL
Một số loại điều kiện có thể đặt sau từ khóa WHERE
- So sánh giá trị của hai biểu thức.
- Kiểm tra xem giá trị của một biểu thức có nằm trong một khoảng
giá trị đã xác định không.
- Kiểm tra xem giá trị của một biểu thức có bằng một trong các giá
trị thuộc một tập hợp đã xác định không.
- Kiểm tra xem một cột có chứa giá trị null không.
Một số toán tử dùng trong SQL
- Toán tử so sánh: >, <, >=, <=, <>
- Toán tử logic: NOT, AND, OR, đây cũng là thứ tự ưu tiên của các phép
toán logic.
- Các toán tử khác: LIKE, IN, IS, …
- Kí hiệu % dùng để sánh hợp với mọi xâu. Kí hiệu _ (dấu nối dưới) dùng để
sánh hợp với mọi kí tự.

Ví dụ 1 Cho biết mã nhân viên, họ tên, đơn vị và lương của những nhân viên có
lương lớn hơn 2300000
SELECT manv, hoten, ma_dv, luong
FROM nhan_vien
WHERE luong>2300000
Ví dụ 2 Tìm tên các nhân viên có mã đơn vị là ‘P4’ và lương thấp hơn 2500000.
SELECT manv, ho_ten, ma_dv, luong
FROM nhan_vien
WHERE ma_dv=’P4’ AND luong < 2500000
4.3 Kết nối các bảng
Trong trường hợp câu hỏi liên quan đến nhiều bảng chúng ta cần kết
nối các bảng với nhau. Có 2 kiểu kết nối là kết nối trong (INNER
JOIN) và kết nối ngoài (LEFT JOIN, RIGHT JOIN). Ví dụ, kết nối bảng
nhanvien va bảng phong dựa trên điều kiện kết nối
nhanvien.maphong=phong.maphong
- Kết nối trong: một bộ trong bảng nhanvien sẽ được kết nối
với một bộ trong bảng phong khi và chỉ khi maphong của hai bộ này
bằng nhau
- Kết nối ngoài: Nếu nhanvien LEFT JOIN phong ON
nhanvien.maphong=phong.maphong thì với một bộ t trong bảng nhanvien
được ghép với một bộ k trong bảng phong nếu hai bộ này có maphong
bằng nhau, nếu không tìm thấy bộ nào trong bảng phong có maphong bằng
maphong của bộ t thì bộ t được ghép với một bộ có giá trị null trong
bảng phong. Kết nối nhanvien RIGHT JOIN phong ON
nhanvien.maphong = phong.maphong cho kết quả bằng kết nối phong LEFT
JOIN nhanvien ON nhanvien.maphong=phong.maphong
Ví dụ 1: Tìm những ngoại ngữ mà chưa có nhân viên nào học?

Cách 1: SELECT mann, tenn


FROM dmnn LEFT JOIN tdnn ON dmnn.mann=tdnn.mann
WHERE tdnn.mann IS null
Cách 2: SELECT mann, tenn
FROM dmn
WHERE mann NOT IN (SELECT DISTINCT mann FROM tdnn)
Ví dụ 2: Cho biết mã nhân viên, họ tên, lương của các nhân viên làm ở phòng "kỹ
thuật”?
Cách 1: SELECT manv, hoten, luong
FROM nhanvien INNER JOIN phong ON nhanvien.maphong=phong.maphong
WHERE tenphong="kỹ thuật"
Cách 2:SELECT manv, hoten, luong
FROM nhanvien, phong
WHERE nhanvien.maphong = phong.maphong AND tenphong="kỹ thuật"
Ví dụ 3:Cho biết mã nhân viên, họ tên, ngày sinh của những nhân viên có tiếng Anh
đạt trình độ từ C trở lên
SELECT nhanvien.manv, hoten, ngaysinh
FROM (nhanvien INNER JOIN tdnn ON nhanvien.manv=tdnn.manv) INNER
JOIN dmnn ON tdnn.mann=dmnn.mann
WHERE tennn=’Anh’ AND tdo>=’C’
Chú ý: Khi sử dụng nhiều bảng trong câu lệnh SQL với những thuộc tính xuất hiện ở
nhiều bảng, khi sử dụng cần chỉ rõ chúng ta dùng thuộc tính đó ở bảng nào, bằng
cách viết: <tên bảng>.<tên thuộc tính>.

4.4 Sử dụng các hàm gộp, GROUP BY, HAVING


SQL sử dụng một số hàm gộp sau:
- COUNT: đếm số các giá trị trong một cột.
- SUM: tính tổng các giá trị trong một cột. Hàm này chỉ áp dụng cho các giá trị kiểu
số.
- AVG: tính trung bình cộng của các giá trị trong một cột. Hàm này chỉ áp dụng cho
các giá trị kiểu số.
- MIN: tìm giá trị nhỏ nhất trong số các giá trị của một cột.
- MAX: tìm giá trị lớn nhất trong số các giá trị ở một cột.
Trừ hàm COUNT(*), còn các hàm khác đều bỏ qua các giá trị null trong các
giá trị đầu vào của chúng.

Ví dụ 1: Cho biết số nhân viên, và tổng lương của toàn cơ quan?


SELECT COUNT(manv) AS sonv, SUM(luong) AS tongluong
FROM nhanvien

Ví dụ 2: Cho biết lương cao nhất, lương trung b́nh của mỗi đơn vị? Thông tin
đưa ra gồm: mã phòng, tên phòng, lương cao nhất, lương trung bình của phòng
đó.
SELECT phong.maphong, tenphong, MAX(luong) AS maxluong, AVG(luong) AS
luongtb
FROM nhanvien INNER JOIN phong ON nhanvien.maphong=phong.maphong
GROUP BY phong.maphong, tenphong

You might also like