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.注意通配符的位置不要放错。