Tuesday, August 21, 2018

Hướng dẫn sử dụng lệnh select để lọc thông tin trong bảng thông tin lô rừng

Sau khi đã tìm hiểu qua cấu trúc câu lệnh SQL select với một số ví dụ đơn giản, giờ chúng ta sẽ thử một vài câu lệnh để thao tác với bảng dữ liệu lô rừng PLOT nhé.

Ở bài hướng dẫn này mình sẽ sử dụng dữ liệu của huyện Hoài Nhơn, tỉnh Bình Định. Mọi người có thể sử dụng dữ liệu thực tế của huyện, tỉnh mình để thực hành. Mã xã sẽ thay đổi theo thực tế của đơn vị mình và có thể tìm nhanh nhất ở bảng thông tin lô rừng:

OK, giờ chúng ta sẽ thực hành một vài câu lệnh nhé.
Chú ý là chúng ta bám sát vào bảng tham chiếu các trường dữ liệu của bảng thông tin lô rừng cho đến khi nhớ ý nghĩa các trường trong đó nhé.

1. Lọc ra những lô rừng của xã Hoài Châu Bắc - có mã xã 21646, huyện Hoài Nhơn, tỉnh Bình Định (Câu lệnh này rất dể dàng để thực hiện với chức năng Lọc và Tìm kiếm trong Qgis)

Select * from PLOT where commune_code=21646

Ở đây mình dùng select * để lấy ra toàn bộ các trường trong bảng PLOT, nếu các bạn không cần lấy hết các trường thì có thể dùng lệnh Select <tên trường 1>, [<tên trường 2>, .....] với tên trường 1,2 được lấy từ bảng tham chiếu các trường thuộc tính của bảng PLOT.


2. Lọc ra tất cả các lô rừng có trong 2 xã Hoài Châu Bắc - 21646 và xã Hoài Châu - 21649
(Lệnh này thì chức năng lọc và tìm kiếm của Qgis không làm được, vì nó lấy dữ liệu từ 2 xã, chúng ta bắt đầu thấy sự cần thiết khi dùng lệnh rồi đấy)
Select * from PLOT where (commune_code=21646) or (commune_code=21649)

Về cơ bản thì lệnh này giống lệnh ở trên, chỉ khác nhau phần biểu thức điều kiện (sau từ khóa where). Ở biểu thức  (commune_code=21646) or (commune_code=21649) có thể hiểu là các bản ghi thuộc một trong 2 điều kiện: Hoặc là ở xã có mã 21646, hoặc là ở xã có mã là 21649.

3. Lọc ra các lô rừng ngoài quy hoạch của 2 xã trên:
Chúng ta biết rằng, các lô rừng ngoài quy hoạch thì giá trị của thông tin quy hoạch trong bảng thuộc tính là 1.
Nhìn vào bảng tham chiếu thông tin thuộc tính ở trên, ta thấy trường quy định mã quy hoạch là trường số 8 - forest_use_sit_code. Vậy lệnh Select của ta sẽ được viết như sau:

Select * from PLOT where ((commune_code=21646) or (commune_code=21649)) and forest_use_sit_code=1

(Chúng ta có thể thay giá trị 1 bằng giá trị 0 để tìm các lô trong quy hoạch)

Ở câu lệnh này điểm chú ý nhất là các đặt dấu ngoặc ở 2 biểu thức để thể hiện được đúng giá trị của toán tử OR và AND.

Cùng câu lệnh này, nhưng chúng ta chỉ cần bỏ dấu ngoặc ở biểu thức chứa toán tử OR thì kết quả xuất ra sẽ không đúng.
Select * from PLOT where (commune_code=21646) or (commune_code=21649) and forest_use_sit_code=1

4. Lọc các lô rừng trong xã 21646 là rừng trồng trên núi đất hoặc rừng trồng chưa thành rừng nhưng không có loài cây. 

Ở trường hợp này, điều kiện lọc liên quan đến trường mã xã (commune_code), loại đất loại rừng (forest_type_code), mã loài cây (tree_spec_code) trong bảng dữ liệu lô rừng PLOT

ta có lệnh sau:
Select * from PLOT
     where commune_code=21646 and (forest_type_code=60 or forest_type_code=72) and tree_spec_code is null

thường thì lệnh này sẽ không có kết quả nào, tuy nhiên nếu dùng lệnh này mà vẫn thấy lô rừng xuất hiện thì các lô đó bị lổi dữ liệu bạn phải vào Qgis thêm loài cây vào nhé.
Từ khóa is null đi theo phía sau 1 trường nào đó có nghĩa là giá trị của trường đó rỗng.



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