Sắp xếp-Tìm kiếm-Thống kê

Màu nền
Font chữ
Font size
Chiều cao dòng

CHƯƠNG 3: SẮP XẾP-TÌM KIẾM-THỐNG KÊ

3.1. SẮP XẾP

3.1.1. Khái niệm

Trong một bảng dữ liệu, chúng ta có thể sắp xếp các mẫu tin theo một tiêu chuẩn nào đó tuỳ theo yêu cầu của việc khai thác thông tin.

3.1.2. Sắp xếp theo chỉ mục

a. Khái niệm về chỉ mục

Ta đã biết mỗi bảng dữ liệu chứa các bản ghi và mỗi bản ghi đều được đánh số hiệu theo số thứ tự từ 1 đến n.

Ví dụ: bảng NHANVIEN.DBF có dang sau:

Record# HOTEN NGAYSINH GIOITINH NAMLV

1

2

3

4 Nguyễn văn A

Lê thị nhàn

Nguyễn An

Trần Hạnh 02/10/75

05/23/75

10/26/80

09/25/70 .T.

.F.

.T.

.T. 1985

1980

1982

1981

Khi xử lý thông tin trong bảng dữ liệu, ta truy xuất chúng theo trật tự của số hiệu bản ghi.

Ví dụ: use NHANVIEN 

list 

Kết quả in ra sẽ như sau:

Record# HOTEN NGAYSINH GIOITINH NAMLV

1

2

3

4 Nguyễn văn A

Lê thị nhàn

Nguyễn An

Trần Hạnh 02/10/75

05/23/75

10/26/80

09/25/70 .T.

.F.

.T.

.T. 1985

1980

1982

1981

Sắp xếp bảng dữ liệu theo chỉ mục là tạo ra một file mới (có phần mở rộng mặc định là .IDX) chỉ có hai trường: trường khoá sắp xếp và trường số hiệu bản ghi. Thứ tự của bản ghi ở đây là thứ tự sắp xếp.

Ví dụ: file chỉ mục của bảng nhanvien theo thứ tự tăng dần của năm làm việc như sau:

Namlv Record#

1980

1981

1982

1985 2

4

3

1

Lúc này, khi truy xuất dữ liệu của bảng, thứ tự của các bản ghi là thứ tự được quy định trong file chỉ mục này.

Ví dụ: Trong bảng nhanvien, sử dụng chỉ mục theo trường namlv.idx ta có thứ tự truy xuất:

Record# Hoten ngaysinh gioitinh namlv

2 Lê thị nhàn 05/23/75 .F. 1980

4 Trần Hạnh 09/25/70 .T. 1981

3 Nguyễn An 10/26/80 .T. 1982

1 Nguyễn văn A 02/10/75 .T. 1985

b. Lập chỉ mục IDX cho bảng dữ liệu

Cú pháp: INDEX ON <bthức khoá> TO <tên file idx>

[FOR<bthức logic>] [UNIQUE]

Tác dụng: Lệnh sắp xếp file dữ liệu theo chiều tăng dần của <Bthức khoá> của các bản ghi thoả mãn <Bthức logic> sau FOR, mặc định là tất cả các bản ghi. Nếu có từ khoá [UNIQUE] thì các bản ghi nào có <Bthức khoá> trùng nhau sẽ bị bỏ qua trên file chỉ mục.

Ví dụ 1: Hiển thị theo thứ tự tăng dần của namlv của các nhân viên.

use NHANVIEN

index on NAMLV to CMNAMLV

list

Ví dụ 2: Hiển thị theo thứ tự tăng dần của hoten

index on HOTEN to CMHOTEN

list

Chú ý: Lệnh luôn sắp xếp theo thứ tự tăng dần của <bthức khoá>, do vậy khi lựa chọn <bthức khoá> thì phải chọn cho phù hợp.

Ví dụ 1: Hiển thị theo thứ tự giảm dần của namlv của các nhân viên.

use NHANVIEN

index on -NAMLV to CMNAMLVG

list

Ví dụ 2: Hiển thị theo thứ tự giảm dần của ngaysinh.

use NHANVIEN

index on date()-NGAYSINH to CMNSINHG

list

c. Một số lệnh liên quan

+ SET INDEX TO <file chỉ mục>: Dùng để mở file chỉ mục sau khi đã mở một bảng dữ liệu.

+ SET INDEX TO: Dùng để đóng file chỉ mục.

+ REINDEX: Dùng để cập nhật lại file chỉ mục sau khi có sự sửa đổi trên bảng dữ liệu.

3.2. TÌM KIẾM

3.2.1. Tìm kiếm tuần tự

a. Lệnh Locate:

Cú pháp:

LOCATE [<phạm vi>] FOR<bthức logic> [WHILE<bthức logic>]

Tác dụng: Lệnh sẽ duyệt tuần tự các bàn ghi trong bảng dữ liệu và tìm đến bản ghi đầu tiên trong <phạm vi> thoả mãn điều kiện của <bthức logic>. Nếu tìm được, hàm FOUND() sẽ cho giá trị .T., hàm EOF() có giá trị .F.

Ví dụ: Tìm nhân viên đầu tiên trong bảng dữ liệu sinh năm 1970 trong bảng nhanvien

use NHANVIEN

Locate for year(NGAYSINH) = 1970

Display

b. Lệnh continue

Cú pháp : CONTINUE

Chức năng : Theo sau lệnh LOCATE, dùng để tìm bảng ghi kế tiếp sau thỏa mãn điều kiện đã nêu.

Ví dụ : Tìm 2 nhân viên đầu tiên sinh năm 1970

use NHANVIEN

locate for year ( NGAY SINH) = 1970

display

continue

display

3.2.2. Tìm kiếm sau khi đã lập chỉ mục

Cú pháp : SEEK <biểu thức>

Chức năng : sau khi đã lập chỉ mục theo <bthức khóa> đề tìm bản ghi nào thỏa mãn một điều kiện dựa vào <bthức khóa>

Ta sử dụng lệnh SEEK theo sau là <giá trị> của biểu điều kiện cần tìm. nếu tìm thấy thì hàm FOUND() có giá trị .T. và hàm EOF () có giá trị .F.

Ví dụ: 1. Sắp xếp theo thứ tự tăng dần của Họ Tên, tìm nhân viên có tên "Nguyen Van AN".

use NHANVIEN

index on upper(HOTEN) to CMHOTEN

seek "Nguyen Van An"

disp

2. Sắp xếp theo thứ tự giảm dần của NAMLV, tìm nhân viên có năm làm việc 1981.

use NHANVIEN

index on - NAMLV to CMNAMLVG

list

seek -1981

disp

3.3. THỐNG KÊ

3.3.1. Đếm số lượng bản ghi

Cú pháp

COUNT [<phạm vi>][FOR<btlogic>] [WHILE<btlogic>] [TO<biến nhớ>]

Chức năng :lệnh dùng để đếm số mẫu tin trong bảng dữ liệu hiện hành thỏa mãn điều kiện các <bthức logic> nằm trong phạm vi được chỉ ra. Kết quả được đưa ra màn hình hay đưa vào <biến nhớ> nếu có TO.

Ví dụ: Cho biết có bao nhiêu nhân viên có NAMLV là 1980

use NHANVIEN

count for NAMLV = 1980 to songuoi

?' có songuoi: ', songuoi, ' làm việc năm 1980'

3.3.2. Tính tổng giá trị các trường kiểu số

Cú pháp: SUM [<phạm vi>] [<dsách bt>] [TO <ds biến>]

[FOR <bt logic>] [WHILE <btlogic>]

Chức năng : Lệnh sẽ lấy tổng theo các biểu thức được xây dựng dựa trên các trường kiểu số, của các bản ghi trong bảng dữ liệu; nằm trong <phạm vi> và thỏa mãn điều kiện của các <bthức logic>. Nừu không có <ds biểu thức> thì các trường kiểu số đều được lấy tổng.

Mặc định, kết quả được đưa ra màn hình; nếu có TO <dsbiến> thì kết quả của các <biểu thức> sẽ được đưa vào các <biến> tương ứng.

Chú ý : Phải tương ứng 1-1 giữa <ds biểu thức> và <ds biến>.

Ví dụ: Dựa vào bảng NHANVIEN, cho biết tổng LUONG phải trả và tổng PHUCAP là bao nhiêu.

use NHANVIEN

sum LUONG, PHUCAP to tongluong, tongpc

?' tong luong la:' , tong luong

?' tong phu cap la:' , tongpc

3.3.3. Tính trung bình cộng các trường kiểu số

Cú pháp: AVERAGE [<phạm vi>] [<ds biểu thức>] [TO <ds biến >] [FOR <bt logic>] [WHILE <bt logic>]

Chức năng : giống như lệnh SUM ở trên nhưng sau khi lấy tổng, lệnh sẽ lấy giá trị đó đem chia cho tổng số bản ghi tham gia vào câu lệnh.

Ví dụ: dựa vào bảng NHANVIEN, cho biết trung bình mỗi nhân viên nhận được bao nhiêu LUONG, PHU CAP.

use NHANVIEN

average LUONG, PHUCAP to tbluong, tbphucap

?' trung binh luong:' , tbluong

?' trung bình phu cap:' , tbphucap

3.3.4. Tính tổng các trường số theo nhóm

Cú pháp: TOTAL ON <Bt Khóa> to <tên bảng mới.DBF>[<phạm vi>]

[FIELD <dstrường>][FOR <biêủ thức L>][WHILE < biêủ thức L>]

Chức năng: Lệnh sẽ cộng dồn các trường kiểu số theo từng nhóm bản ghi có <bt khóa> giống nhau và đưa vào bảng mới có tên được chỉ ra ở <tên bảng .DBF>. Mặc định thì tất cả các trường kiểu số đều được cộng dồn, nếu có FIELDS <danh sách trường> thì chỉ có các trường liệt kê mới được cộng. Lệnh chỉ tác động đến các bàn ghi nằm trong (phạm vi) và thoả mãn điều kiện đi sau các mệnh đề FOR, WHILE.

Chú ý: Trước khi dùng lệnh này, bảng dữ liệu phải định sắp xếp theo khoá.

Ví dụ: Dựa vào bảng VATTV, hãy thống kê xem mỗi mặt hàng đã xuất hay nhập một số lượng là bao nhiêu.

use VATTV

index on MAXN + MAVT to CMTK

total on MAXN + MAVT to THONGKE fields SOLUONG

use THONGKE

? 'chi tiet la :'

list MAXN, MAVT, SOLUONG, DONGIA

Giả sử bảng VATTU sau khi sắp xếp là:

MAXN SOCT MAVTU SOLUONG DONGIA

N 9 A01 145 5

N 4 A01 203 500

N 1 F01 123 200

N 2 F01 345 200

N 10 F01 654 180

Kết quả của bảng THONGKE.DBF là:

MAXN SOCT MAVTU SOLUONG DONGIA

N 9 A01 348 500

N 1 F01 469 200

N 10 F01 654 180

Bạn đang đọc truyện trên: Truyen2U.Pro