數據過濾 SQL的數據過濾, 可以減少不必要的數據行, 從而可以達到提升查詢效率的效果. 比較運算符 在SQL中, 使用WHERE子句對條件進行篩選, 篩選的時候比較運算符是很重要. 上面的比較運算符, 並不是說每個DBMS都支持, 這裡主要說MySQL, 不支持(! )和(! 6000; // 查 ...
數據過濾
SQL的數據過濾, 可以減少不必要的數據行, 從而可以達到提升查詢效率的效果.
比較運算符
在SQL中, 使用WHERE子句對條件進行篩選, 篩選的時候比較運算符是很重要.
上面的比較運算符, 並不是說每個DBMS都支持, 這裡主要說MySQL, 不支持(!>)和(!<)等.
WHERE子句的基本格式是:
SELECT .....(列名) FROM ......(表名) WHERE ......(子句條件)
舉幾個例子:
SELECT name, hp_max FROM heros WHERE hp_max > 6000; // 查詢所有最大生命值大於6000的英雄
SELECT name, hp_max FROM heros WHERE hp_max BETWEEN 5399 AND 6811; // 查詢所有最大生命值在5399到6811之間的英雄
SELECT name, hp_max FROM heros WHERE hp_max IS NULL; // 對hp_max欄位進行空值檢查
邏輯運算符
如果存在多個WHERE條件子句, 可以使用邏輯運算符:
註意的是WHERE子句中同事存在OR和AND的時候, AND執行的優先順序會很高, 也就是說SQL會先處理AND, 再處理OR操作符. 當然, 一種情況除外, 那就是()優先順序最高.
SELECT name, hp_max, mp_max FROM heros WHERE hp_max > 6000 AND mp_max > 1700 ORDER BY (hp_max+mp_max) DESC; // 查詢最大生命值大於6000, 最大法力值大於1700, 並按照最大生命值 + 最大法力值降序排序
SELECT name, role_main, role_assist, hp_max, mp_max, birthdate
FROM heros
WHERE (role_main IN ('法師', '射手') OR role_assist IN ('法師', '射手'))
AND DATE(birthdate) NOT BETWEEN '2016-01-01' AND '2017-01-01'
ORDER BY (hp_max + mp_max) DESC; // 查詢主要定位或者次要定位是法師或是射手的英雄, 同時英雄的上線時間不在2016-01-01到2017-01-01之間.
使用通配符進行過濾
上面的條件過濾都是對已知值進行過濾, 如果我們要檢索文本中包含某個詞的所有數據, 這裡就需要使用通配符了, 通配符是我們用來匹配值得一部分的特殊字元, 這裡需要使用到LIKE操作符.
想要匹配任意字元串出現的任意次數, 需要使用(%)通配符, 匹配單個字元, 就需要使用下劃線(_)
通配符. (%)和(_)
的區別在於前者代表一個或多個字元, 後者只能代表一個字元.
SELECT name FROM heros WHERE name LIKE '% 太 %'; // 匹配包含"太"字的英雄
SELECT name FROM heros WHERE name LIKE '_% 太 %'; // 匹配除了第一個字元外, 包含"太"字的英雄
同樣的, 並不是所有的DBMS都是使用(%) 和(_)來表示多個字元和一個字元的, 具體的DBMS應該查詢具體的手冊.