首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SQL 查詢數值是否落在區間範圍內的寫法

     編輯:程式設計疑難解答

問題描述

資料表結構:name、startnum、endnum(endnum > startnum,BIGINT)。需查詢給定數值(如 250)落在哪筆資料的區間內。

標準 SQL 寫法

SELECT name 
FROM range_table 
WHERE startnum <= 250 AND endnum >= 250;

執行邏輯

資料範例:

namestartnumendnum
張三101200
李四201300
王五301400

查詢 250 → 符合 201 <= 250 <= 300 → 回傳「李四」。

進階考量

1. 邊界值包含性

  • <= / >=:區間包含端點(閉區間)
  • < / >:區間不包含端點(開區間)
  • 依業務需求決定,常見為左閉右開 startnum <= val AND endnum > val

2. 索引優化

CREATE INDEX idx_range ON range_table(startnum, endnum);

查詢條件 startnum <= ? AND endnum >= ? 可使用複合索引(視資料庫優化器而定)。

3. 參數化查詢(防注入)

-- Java JDBC 範例
String sql = "SELECT name FROM range_table WHERE startnum <= ? AND endnum >= ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setLong(1, value);
ps.setLong(2, value);

4. 重疊區間處理

若區間可能重疊,需決定回傳策略:

  • 回傳第一筆:LIMIT 1 / TOP 1
  • 回傳所有匹配:移除 LIMIT
  • 優先級排序:ORDER BY priority DESC

各資料庫語法差異

資料庫限制筆數語法
MySQL / PostgreSQL / SQLiteLIMIT 1
SQL ServerTOP 1
OracleFETCH FIRST 1 ROW ONLY (12c+) 或 ROWNUM = 1
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved