SQL Select: “Super-Select”

MapInfo Pro có lệnh menu 2 cho Select:

  • Query > Select
  • Query > SQL Select
    “SQL Select” dùng để thực hiện mọi thứ, “Select” để thực hiện yêu cầu đơn giản hơn.

“SQL” là gì ?

SQL = Structured Query Language – Ngôn ngữ truy vấn có cấu trúc.
SQL là cú pháp tiêu chuẩn để truy vấn cơ sở dữ liệu. Nó có nguồn gốc từ IBM. Hiện được sử dụng rộng rãi bởi hầu hết các nhà cung cấp, mặc dù với các thay đổi nhỏ trong cú pháp. Một truy vấn SQL đơn giản:

SELECT name, address, zip FROM AddressList WHERE zip = “98101” ORDER BY name INTO qNameAddrList

SQL với MapInfo

Có 2 cách sử dụng SQL:

  1. Trực tiếp các Bảng MapInfo.
    Trong trường hợp này, các hộp thoại che dấu sự phức tạp của SQL, nhưng MapInfo vẫn đang sử dụng SQL, đằng sau các cảnh. Việc triển khai SQL nội bộ của MapInfo không đầy đủ như triển khai Oracle hay IBM. Vẫn còn nhiều sức mạnh SQL trong MapInfo Pro hơn 99% mọi người sẽ sử dụng. Hỗ trợ SQL của MapInfo vẫn còn đầy đủ hơn bất kỳ hệ thống GIS nào khác.
    Mẹo: Nên luôn mở cửa sổ MapBasic và xem cách các lệnh SQL được xây dựng bởi MapInfo.
  2. Để soạn thảo & gửi các lệnh SQL đến các cơ sở dữ liệu từ xa như DB2, Oracle và SQL Server.
    Trong trường hợp này, MapInfo có thể gửi các truy vấn phức tạp nhất được DBMS từ xa hỗ trợ. Cú pháp được giải thích bởi DBMS từ xa, không phải bởi MapInfo.
    MapInfo nhận kết quả của truy vấn SQL và coi nó như một bảng MapInfo.
    Tóm tắt: Vẫn còn nhiều sức mạnh SQL trong MapInfo Pro hơn 99% mọi người sẽ sử dụng.

Cú pháp MapInfo’s SQL Spatial:

Với SQL tiêu chuẩn (không phải là GIS), bạn có thể kết hợp (Join) các bảng với nhau bằng cách khớp các cột và giá trị: ví dụ, Table1.zip = Table2.zip.
MapInfo cung cấp các tiện ích mở rộng không gian cho cú pháp SQL: Như “…where Table1Pnt.obj WITHIN Table2Region.obj”

SQL Select so với Select đơn giản: Các ví dụ

Khi nào nên sử dụng SQL Select thay vì Select đơn giản?
Không phải chọn tất cả các cột:

SELECT col1, col5, col3 FROM MyTable

Để sắp xếp kết quả theo nhiều cột:

SELECT col1, col5, col3 FROM MyTable ORDER BY col5, col1

Để tổng hợp hoặc tóm tắt các giá trị bảng:

SELECT CountyFIPS, Sum(Pop_Tract) FROM PopByTract GROUP BY CountyFIPS

Để tạm thời đổi tên cột:

SELECT Pop1990_2002 “Pop Change” FROM MyPopTable

Mẹo: Vì SQL Select thực hiện mọi thứ, tại sao không bỏ qua menu Select đơn giản hoàn toàn?

Ví dụ SQL
Tìm điểm (Point) bên ngoài một khu vực (Region)

Bảng kết quả sẽ là một danh sách các điểm nằm ngoài một đối tượng khu vực.

  1. Mở tệp điểm và ranh giới.
  2. Chọn các đối tượng trong tệp ranh giới.
  3. Thực hiện SQL sau:
SQL Select: “Super-Select”

Tính số lượng điểm (Point) nằm trong ranh giới (Region)

Bảng kết quả sẽ liệt kê tên ranh giới và số lượng điểm được chứa trong region đó.

  1. Mở bảng Ranh giới và Điểm.
  2. Thực hiện SQL Select sau đây:
SQL Select: “Super-Select”

Sử dụng cú pháp “ANY”, “ALL” & “IN”:
= ANY So sánh riêng với từng giá trị trong danh sách các mục. Ví dụ:

SELECT * FROM tablename WHERE STATE_ABBR = ANY (“NY”, “CA”)

Ví dụ này chọn các bản ghi nếu cột STATE_ABBR khớp với một trong các giá trị trong danh sách.

SELECT * FROM tablename WHERE STATE_ABBR <> ANY (“NY”, “CA”)

Ví dụ này chọn các bản ghi có STATE.TAB không khớp với ít nhất một trong các giá trị trong danh sách.

Hàm IN như = ANY cho phép bạn chọn bất kỳ mục nào từ một bộ.

SELECT * FROM tablename WHERE STATE_ABBR IN (“NY, CA”)

Ví dụ này chọn tất cả các bản ghi có giá trị STATE_ABBR bằng với “NY”, hoặc với “CA”

ALL so sánh với danh sách nói chung. Ví dụ:

SELECT * FROM tablename WHERE STATE_ABBR <> ALL (“NY”, “CA”)

Ví dụ này sẽ chọn tất cả các tiểu bang (STATE_ABBR) trừ NY và CA

NOT IN tương đương với <> ALL.

SELECT * FROM tablename WHERE STATE_ABBR NOT IN (“NY”, “CA”)

Ví dụ này sẽ chọn tất cả các bản ghi ngoại trừ những bản ghi có giá trị của “NY” và “CA” trong cột STATE_ABBR.

Thủ thuật:

Sử dụng mệnh đề “Group By” để tóm tắt bảng của mình, bây giờ bảng hoàn toàn không hiển thị trên bản đồ. Tại sao?

Mô tả:
Tùy chọn “Group By” tóm tắt văn bản hoặc các giá trị khác trong bảng, nhưng không thể được sử dụng để tổng hợp các vùng bản đồ, điểm hoặc hình học khác. Kết quả của “Group By” không bao gồm bất kỳ đối tượng bản đồ nào. Thông thường, bạn có thể tạo “Group By” kết quả lập bản đồ bằng cách lưu nó, sau đó mã hóa nó.

Đã chỉ định một danh sách dài các tên cột và các mục dài khác trong hộp thoại Chọn SQL. Nhưng chỉ một phần của các mục của tôi đã được xử lý. Tại sao?

Mô tả:
Hộp thoại SQL Select chấp nhận số lượng tối đa khoảng 254 ký tự. Nếu danh sách các tên cột của bạn trong các khu vực “Columns” hoặc danh sách các điều kiện và/hoặc chức năng của bạn trong khu vực “Where” vượt quá giới hạn, phần còn lại sẽ không được xử lý.
Giải pháp thay thế: Giữ cho cửa sổ MapBasic của bạn mở. Vấn đề và/hoặc chỉnh sửa lệnh SQL Select trong cửa sổ MapBasic này. Nó có thể chấp nhận và sẽ xử lý chuỗi lệnh dài hơn.

Bình luận bằng Facebook Comments