Thursday, August 23, 2018

Sử dụng lệnh Select để kết nối giữa bảng PLOT (Lô rừng) và bảng COMMUNE (Xã)

Sau khi chúng ta đọc bài  Kết nối dữ liệu giữa các bảng trong cơ sở dữ liệu - Lý thuyết mọi người đã có những khái niệm cơ bản về  mô hình kết nối dữ liệu trong phần mềm FRMS. Để thực tế hóa việc kết nối và lấy dữ liệu tôi sẽ hướng dẫn mọi người sử dụng lệnh Select để kết nối giữa hai bảng dữ liệu là PLOT (lô rừng) và COMMUNE (xã) trong cơ sở dữ liệu phần mềm FRMS.

Đầu tiên chúng ta khởi động cơ sở dữ liệu của phần mềm FRMS.

Bật bảng điều khiển FRMS lên, bấm vào nút [Khởi động] trong phần cơ sở dữ liệu. Sau khi nút lệnh bị mờ thì quá trình khởi động thành công.

Sau đó chúng ta vào pgAdmin3 để gõ lệnh SQL.
Giao diện trình quản lý dữ liệu Postgres - pgAdmin3

Tại phần số 1 trên giao diện, bạn gõ vào lệnh Select để lọc ra cơ sở dữ liệu mong muốn.
Tham khảo bảng tham chiếu các trường trong bảng PLOT để dùng lệnh cho chính xác nhé.

Đầu tiên ta gõ 

Select commnue_code, compt_code, sub_compt_code, plot_code, area, forest_type_code, actor_id
From PLOT
order by area desc
limit 3000

Giải thích: 
Dòng 1: lọc ra các trường mã xã, tiểu khu, khoảnh, lô, diện tích, mã lđlr, mã chủ rừng
Dòng 2: từng bảng lô rừng
Dòng 3: sắp xếp theo giá trị của trường diện tích, giảm dần. Chổ này lưu ý nên không có từ khóa DESC thì nó mặc định là tăng dần theo trường sắp xếp.
Dòng 4: là kết quả chỉ trả về 3000 bản ghi đầu tiên tránh việc thời gian load dữ liệu quá lâu, sau này thực tế thì mọi người bỏ từ khóa này đi.


Kết quả sau khi thực thi lệnh Select trên.

Nhìn vào kết quả thì ta thấy rằng kết quả đã được sắp xếp tăng dần theo giá trị của trường diện tích, tuy nhiên giá trị của xã nhảy rất lộn xộn, tiêu đề các trường bằng tiếng anh nên rất khó nhìn và kiểm tra dữ liệu.

Ý định lúc này của chúng ta là đặt lại tiêu đề các cột về tiếng việt và phải có thêm 1 cột tên xã để biết được lô nào của xã nào thuận tiện cho việc kiểm tra.

Làm từ việc nhé:
- Thêm Cột tên xã vào: Nhìn vào bảng tham chiếu trong bảng PLOT ở trên, chúng ta thấy rằng trường tên xã không có trong bảng PLOT vậy muốn lấy tên xã thì ta phải kết nối đến bảng COMMUNE (xã) thông qua trường commune_code (mã xã). Việc kết nối tiến hành như sau:

Select a.commune_code, b.name, a.compt_code, a.sub_compt_code, a.plot_code, a.area, a.forest_type_code, a.actor_id
From PLOT a inner join COMMUNE b on a.commune_code=b.commune_code
order by a.area desc
limit 3000

Giải thích lệnh nhé:
Dòng 1: lọc ra các trường mã xã, tên xã, tiểu khu, khoảnh, lô, diện tích, mã lđlr, mã chủ rừng.
chúng ta chú ý trước các trường có ký tự a và dấu chấm hoặc b và dấu chấm. a hay b đại diện cho các bảng mà ta quy định bên dưới (dòng 2), đại ý nói răng trường mà chúng ta lọc ra nó thuộc bảng nào trong các bảng mà ta kết nối với nhau.
Dòng 2: Là lệnh kết nối giữa bảng PLOT (được quy định là a) và bảng COMMUNE (quy định là b) thông qua trường dữ liệu commune_code.
Dòng 3 và 4 giống ở trên như có thêm ký tự a. và trước trường area để hiểu rằng trường area này thuộc bảng PLOT.

OK, giờ chạy lệnh thử nhé.

Kết quả trả về của lệnh select trên.

Vậy là chúng ta đã đưa được tên xã vào bảng kết quả, cũng không quá khó phải không? giờ nhiệm vụ còn lại là ta đổi tên các cột thành Tiếng Việt cho dể nhìn nhé.

Select 
a.commune_code, 
b.name
a.compt_code, 
a.sub_compt_code, 
a.plot_code, 
a.area, 
a.forest_type_code, 
a.actor_id
From PLOT a inner join COMMUNE b on a.commune_code=b.commune_code
order by a.area desc
limit 3000

cũng lệnh Select trên nhưng tôi Enter xuống cho nó thành nhiều dòng, mỗi trường mỗi dòng, giờ chuyển tiêu đề các trường sang Tiếng Việt thì áp dụng từ khóa As đã được nói ở bài trước.

Select 
a.commune_code as maxa, 
b.name as tenxa
a.compt_code as tieukhu
a.sub_compt_code as khoanh
a.plot_code as lo
a.area as dientich
a.forest_type_code as maldlr
a.actor_id as machurung
From PLOT a inner join COMMUNE b on a.commune_code=b.commune_code
order by a.area desc
limit 3000

Chạy thử lệnh mới nhé:
Kết quả trả về giống như lệnh trước nhưng tiêu đề cột thì được chuyển về Tiếng Việt.

Mọi người thực hành bài này nhiều lần, cố gắng nắm được phần kết nối giữa hai bảng. Ngoài ra nếu đã thành thạo có thể thử kết nối với bảng Loại đất loại rừng để lấy tên LĐLR hoặc kết nối với bảng chủ rừng để lấy tên chủ rừng nhé.

Cấu trúc của bảng  Chủ rừng như sau:
commune_code: mã chủ rừng
actor_id: mã chủ rừng
actor_type_code: mã loại chủ rừng
actor_name: tên chủ rừng.

Ở bảng này lưu ý, khóa chính của bảng là coomune_code + actor_id. có nghĩa là muốn định danh 1 chủ rừng thì cần 1 lần 2 trường khóa. do đó khi liên kết nó với một bảng khác thì cũng phải liên kết trên 2 trường này thì kết quả mới đúng.

Cấu trúc của bảng Loại đất loại rừng như sau:

forest_type_code: mã LĐLR
forest_type_def: tên LĐLR
Abbreviation: ký hiệu
lang: ngôn ngữ.

Đối với bảng này thì một mã LĐLR nó sẽ tồn tại 2 tên (Tiếng Việt và English) nên khi lọc hoặc kết nối ta phải kèm điều kiện lang='vi' vào không thì cứ 1 kết quả nó sẽ ra 2 kết quả ngay.

OK mọi người cứ thử kết nối, mình sẽ có bài hướng dẫn kết nối cho 2 bảng này sau.

Xem thêm:
- Kết nối dữ liệu giữa 2 bảng PLOT (lô rừng) và TREE_SPECIE (Loài cây) bằng lệnh Select

Nếu thấy hữu ích hảy chia sẻ bài viết này trên:  

0 nhận xét:

Post a Comment