SQL必知必会笔记(4-6章)
第四章 过滤数据
过滤数据:在SELECT语句中,FROM子句指定要搜索的表,WHERE子句指定搜索条件,例:
SELECT prod_name, prod_price
FROM Products
WHERE prod_price = 3.49;
该例从Products表中检索出prod_price = 3.49的两列prod_name和prod_price。
注:ORDER BY与WHERE同时使用时,应让ORDER BY位于后面。
WHERE子句操作符:
SELECT vend_id, prod_name
FROM Products
WHERE vend_id < > ‘DLL01’;
从Products找出vend_id不是DLL01的所有产品。其中单引号用来限定字符串,将值与串类型的列进行比较需要限定引号,与数值列比较的值不用引号;< >与!=通常可以互换。
范围值检查:BETWEEN。例:
SELECT prod_name, prod_price
FROM Products
WHERE prod_price BETWEEN 5 AND 10;
检索价格在5到10美元的所有产品。
空值检查:IS NULL。
SELECT prod_name
FROM Products
WHERE prod_price IS NULL;
该例搜索没有价格(即为空值,而非0)的所有产品。
第五章 高级数据过滤
AND操作符,通过不止一个列进行过滤:
SELECT prod_id, prod_price, prod_name
FROM Products
WHERE vend_id = ‘DLL01’ AND prod_price <= 4;
该例检索vend_id = ‘DLL01’并且prod_price <= 4的所有产品。AND指示检索满足所有给定条件的行。
OR操作符,检索匹配满足任一条件的行:
SELECT prod_name, prod_price
FROM Products
WHERE vend_id = ‘DLL01’ OR vend_id = ‘BRS01’;
该例检索vend_id = ‘DLL01’或者vend_id = ‘BRS01’的所有产品,满足任一条件均返回相应数据。
优先级:AND的优先级高于OR,混合使用时最好使用圆括号明确地分组相应操作符。例:
SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = ‘DLL01’ OR vend_id = ‘BRS01’)
AND prod_price >= 10;
该例则先过滤圆括号内的OR条件再进行AND操作。
IN操作符:用来指定条件范围(WHERE子句中用来指定要匹配值的清单的关键字,功能与OR相当)。例:
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN (‘DLL01’, ‘BRS01’);
该例检索由供应商DLL01和BRS01制造的所有产品,IN操作符后跟由逗号分隔的合法值清单,整个清单必须在圆括号内。IN操作符完成与OR相同的功能。IN一般比OR执行更快,且可以包含其他SELECT语句。
NOT操作符:WHERE子句中否定其之后所跟的任何条件,例:
SELECT prod_name
FROM Products
WHERE NOT vend_id = ‘DLL01’
ORDER BY prod_name;
该例等同于下例:
SELECT prod_name
FROM Products
WHERE vend_id < > ‘DLL01’
ORDER BY prod_name;
即检索所有vend_id不为DLL01的产品名。
注:MySQL不支持该描述的NOT格式,在MySQL中,NOT只用来否定EXISTS(如NOT EXISTS)。
第六章 用通配符进行过滤
通配符:用来匹配值的一部分的特殊字符。
搜索模式:由字面值、通配符或者两者组合构成的搜索条件。
LIKE操作符:后跟的搜索模式利用通配符匹配而非直接相等匹配进行比较。
%通配符:表示任何字符出现任意次数。例:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE ‘Fish%’;
该例搜索以Fish起头的词,可接受Fish之后任意多个任意字符(包括0个)。
注:若使用Microsoft Access,则需要使用*而非%。
通配符可在搜索模式的任意位置使用,并可以使用多个通配符。
下划线通配符:只匹配单个字符而非多个。例:
SELECT prod_id, prod_name
FROM Products
WHERE prod_name LIKE ‘__ inch teddy bear’;
此处为两个下划线且其后跟着一个空格,需寻找完全与其匹配的字符串,如:12 inch teddy bear,而8 inch teddy bear则不在搜索范围内。
注:若使用Microsoft Access,则需要使用?而非_。
方括号通配符:用来指定一个字符集,必须匹配指定位置的一个字符。(只有Microsoft Access,Microsoft SQL Server和Sybase Adaptive Server支持集合)例:
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE ‘[JM]%’
ORDER BY cust_contact;
该例的目的为找出所有名字以J或M开头的联系人,此处使用了[]和%两个通配符。[]通配符可以用前缀字符^(脱字号)来否定,例:
SELECT cust_contact
FROM Customers
WHERE cust_contact LIKE ‘[^JM]%’
ORDER BY cust_contact;
该例查询匹配不以J或M开头的任意联系人名。
注:若使用Microsoft Access,需要用!而不是来否定集合,即使用[!JM]而不是[JM]。
使用NOT操作符可以达到与上例相同的效果,即:
SELECT cust_contact
FROM Customers
WHERE NOT cust_contact LIKE ‘[JM]%’
ORDER BY cust_contact;
使用通配符的技巧:
1.不要过分使用通配符,因为其搜索时间一般比使用其他方法时间要长;
2.尽量不要把通配符用在搜索模式的开始处;
3.注意通配符的位置不要放错。