1、去除重复的行
在SELECT 之后加上 DISTINCT 关键字
SELECT DISTINCT cust_id FROM account;
注意:产生无重复的结果集需要首先对数据进行排序,这对于大的结果集来说是相当耗时的。因此不必要为了确保取出重复行而随意使用DISTINCT。
2、排序
排序当然使用ORDER BY 字句,使用ASC 或 DESC 决定升序还是降序。
除此之外还可以根据表达式进行排序,如过根据号码后3为进行排序
SELECT cust_id FROM customer ORDER BY RIGHT(fed_id, 3);
还能根据数字占位符排序,如需要对查询结果返回第2和第5列排序:
SELECT emp_id, title, start_date, fname, lname FROM employee ORDER BY 2, 5;
这种做法并不常见,因为如果在select语句中增加新的列,可能会返回预料之外的结果。
3、成员条件
在一些情况下,不是需要显示表达式为特定的值或者某个范围,而是一个有限的集合。举个例子,在account表中找出所有产品代码为'CHK','SAV','CD','MM'的帐户:
SELECT account_id, product_id, cust_id, avail_balance FROM account WHERE product_cd = 'CHK' OR product_cd = 'SAV' OR product_cd = 'CD' OR product_cd = 'MM';
本例中where字句或许没有复杂到难以编写的程度,但想象一下如果表达式有10个甚至20个条件就令人畏惧了。对于这些情况可以使用操作符:
SELECT account_id, product_id, cust_id, avail_balance FROM account WHERE product_cd IN ('CHK', 'SAV', 'CD', 'MM');
4、匹配条件
查询名字以T开头的雇员:
SELECT emeep_id, fname FROM employee WHERE LEFT(lname, 1) = 'T';
尽管内建函数left()发挥了作用,但它并不具备灵活性,所以使用通配符是更好的做法:
SELECT emeep_id, fname FROM employee WHERE lname LIKE 'T%';
通配符%表示匹配任意字符,而 _ 表示匹配一个字符。
如果带通配符的字符串还不够灵活,那么可以使用正则表达式来构造搜索表达式:
SELECT emeep_id, fname FROM employee WHERE lname REGEXP '^[FG]';
Oracle数据库和SQL Server同样支持正则表达式。Oracle中使用regexp_like ,而SQL Server中允许在like中直接使用正则表达式。
5、NULL
- 表达式可以为null,但不等于null
- 两个null值彼此不相等
为了测试某个字段是否为null:
SELECT emeep_id, fname FROM employee WHERE lname IS NULL;
注意,这里使用了IS NULL 而不是 = NULL , 特别注意的是不能使用 = NULL 或者 !=NULL,应该使用 IS NULL 或者IS NOT NULL。