SQL查询过滤Where子句用法
大多數(shù)情況下,查詢關(guān)注的是表中所有行的一個(gè)子集,需要用到Where過濾,本文主要介紹過濾的條件連接符(AND, OR, (),NOT),條件類型(相等條件、范圍條件、成員條件、通配條件)以及當(dāng)列名包含NULL值的注意事項(xiàng)。
1. 條件連接符
1)????? AND:a AND b,選取要a和b都為真的數(shù)據(jù)子集
2)????? OR:a OR b,選取要a或b都為真的數(shù)據(jù)子集
3)????? ():當(dāng)條件為3個(gè)或以上時(shí),常常需要用到,比如 a AND (b OR c)
4)????? NOT:NOT a,選區(qū)非a的數(shù)據(jù)子集,NOT 對開發(fā)者來說,增加了對條件評估的難度,一般盡量避免使用:
??????? 如:WHERE end_date IS NULL
??????????????????????? AND NOT (title = 'Teller' OR start_date < '2007-01-01')
???????? 可轉(zhuǎn)換為:WHERE end_date IS NULL
???????????????????????????????????? AND title != 'Teller' AND start_date > '2007-01-01'
2. 條件類型
1)????? 相等條件,操作符 =,!=,<>
2)????? 范圍條件,操作符 >,<, between,例如:
SELECT emp_id, fname, lname, start_date
FROM employee
WHERE start_date < '2007-01-01';
?
WHERE start_date BETWEEN '2005-01-01' AND '2007-01-01';
使用BETWEEN是,跟這BETWEEN后的一定要是范圍的下限,AND后接范圍上限,否則會(huì)是空集,這是因?yàn)锽ETWEEN a AND b等價(jià)于a<=x<=b
3)????? 成員條件,操作符 IN, NOT IN, 例如:
SELECT account_id, product_cd, cust_id, avail_balance
FROM account
WHERE product_cd IN ('CHK','SAV','CD','MM');
?
IN 后面也可以接子查詢,如:
SELECT account_id, product_cd, cust_id, avail_balance
FROM account
WHERE product_cd IN (SELECT product_cd FROM product
???????? WHERE product_type_cd = 'ACCOUNT');
4)????? 匹配條件,通配符:"_"表示一個(gè)字符通配符,“%”表示任意個(gè)字符通配符,關(guān)鍵詞LIKE
?
SELECT lname
FROM employee
WHERE lname LIKE '_a%e%'; #第二個(gè)字符為a,且后面有e字符
?
SELECT emp_id, fname, lname
FROM employee
WHERE lname LIKE 'F%' OR lname LIKE 'G%';? # 查找姓氏以F和G開頭的員工姓名
3. NULL條件
注意:表達(dá)式為"IS NULL",不能寫出"=NULL",兩個(gè)NULL只也不能判斷相等,如:
?
如果改成 =?NULL, 則查詢結(jié)果是空集但不會(huì)報(bào)錯(cuò)(不熟悉SQL常犯錯(cuò)誤):
?
如果值中包括NULL, 則在使用"!="時(shí)要考慮到NULL值的數(shù)據(jù),因?yàn)?#34;!="只對有值的情況進(jìn)行判斷:
例如:查找上級ID不是6(Helen Fleming)的所有員工
SELECT emp_id, fname, lname, superior_emp_id
?FROM employee
WHERE superior_emp_id != 6;
結(jié)果不包含superior_emp_id列為NULL的Michael Smith
?
SELECT emp_id, fname, lname, superior_emp_id
FROM employee
WHERE superior_emp_id != 6 OR superior_emp_id IS NULL;
總結(jié)
以上是生活随笔為你收集整理的SQL查询过滤Where子句用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL查询语句基础构成
- 下一篇: SQL case when 2种用法