1. 程式人生 > >(原創)SQL總結(二)

(原創)SQL總結(二)

AC 過濾 有時 比較 兩個 order by 特殊 如果 通配符

過濾數據

有時候在搜索時需要指定搜索範圍,過濾掉一些不需要輸出的數據

使用where子句

SELECT prod_name,prod_id,prod_price FROM Products WHERE prod_price=3.49;表示輸出價格為3.49的所有行的name,id,price項。
註意,如果要使用排序,那麽ORDER BY一定要位於WHERE子句之後。

where子句的操作符

這一部分看書即可,包括等於=,不等於<>,小於<,等操作符
另外還有BETWEEN表示在指定的兩個值之間,IS NULL表示為NULL值
SELECT prod_name,prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10 ORDER BY prod_name;
如果操作符後面是字符串,那麽需要將字符串用單引號,如果是數值,則不需要。
SELECT prod_name,prod_price FROM Products WHERE prod_price IS NULL;

高級數據過濾

組合where子句

AND OR
SELECT prod_name,prod_id,prod_price FROM Products WHERE prod_price<=4 AND vend_id =‘DLL01‘;

求值順序

如果,在where子句中and和or太多,容易造成輸出錯誤問題,因為在處理OR之前,會先處理AND,這可能與我們的初衷不同。因此,我們需要時刻添加括號來保證求值順序。
SELECT prod_name,prod_id,prod_price FROM Products WHERE (vend_id =‘DLL01‘ OR vend_id =‘BRS01‘) AND prod_price>=10;

IN

SELECT prod_name,prod_id,prod_price FROM Products WHERE vend_id IN (‘DLL01‘,‘BRS01‘) AND prod_price>=10;
IN與OR完成了相同的功能。

NOT

用來否定其後所跟的任何條件。
SELECT prod_name,prod_id,prod_price FROM Products WHERE NOT vend_id ‘DLL01‘ ORDER BY prod_price;

通配符進行數據過濾

LIKE操作符

問題引出,怎麽搜索產品名稱中包含文本 bean bag 的所有產品?
通配符:用來匹配值的一部分的特殊字符。
搜索模式:有字面值、通配符或兩者組合構成的搜索條件。
註意 通配符搜索只能作用於文本字段(字符串),非文本數據類型字段不能使用通配符搜索。
最常使用的通配符是%
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE ‘Fish%‘;找出所有以詞Fish起頭的產品。
註意,有的數據庫區分大小寫,但是MYSQL不區分。
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE ‘%bean bag%‘;
比較有用的地方是根據郵件地址的一部分來查找電子郵件。如 WHERE email LIKE ‘%@sina.com‘;
註 %不能匹配NULL。
下劃線(_)通配符。
與%的區別,一個_只匹配單個字符,兩個_就匹配兩個字符,而一個%就能匹配多個字符。
SELECT prod_id,prod_name FROM Products WHERE prod_name LIKE ‘__ inch teddy bear‘;可以匹配inch前的兩個字符。
方括號[]通配符。
用來指定一個字符集,它必須匹配指定位置(通配符的位置)的一個字符。
只有ACCESS和SQL Server支持集合。

(原創)SQL總結(二)