- 对于汉字的排序,是按首字母的顺序来排序的。使用DISTINCT是要要付出代价的;因为要去掉重复值,必须对结果关系进行排序,相同的元组排列在一起,只有按这种方法对元组进行分组才能去掉重复值,而这一工作甚至比查询本身还费时间。
- 使用‘*’通配符时要慎重,在不需要查询所有列时,尽量采用前面介绍的单列查询或多列查询,以免占用过多的资源。
- ORDERBY子句一定要放在所有子句的最后,默认是ASC(递增排序);ORDER BY后面可
以采用1、2、3……进行排序,1、2、3……代表了SELECT后面列的次序。
例如:
SELECT column1,column2,column3 FROM dual ORDER BY 1,2;则相当于
SELECT column1,column2,column3 FROM dual ORDER BY column1,column2;
3.1、当ORDERBY所需要的列不在SELECT语句所选的范围内时,采用列的序号显然是行不通的。这时可以将列别与序号混合起来解决这个问题。
3.2、对大小写字符的排序,一般的数据库管理系统认为二者是等同的。
- WHERE子句获取FROM子句返回的结果集,并应用WHERE子句中定义的搜索条件对结果集进行筛选。对FROM子句返回结果的每一行都要根据搜索条件进行校验,符合条件的返回,不符合的从结果中去除。
- NULL值参与任何比较运算,结果都将视为FALSE,即,无论是“NULL <> 1200”还是
“NULL= 1200”,其结果都为FALSE;对NULL值得操作只能是:“IS NULL”或
“IS NOT NULL”;NULL值参与的任何算数运算后,算数表达式的值都为NULL;如果NULL参与聚集运算,则除COUNT(*)之外其他聚集函数都忽略NULL;NULL参与AND逻辑运算时,如下图:
- 逻辑运算符“AND”的优先级高于“OR”,为了实现同时运算,应用括号。
例如:下面SQL执行结果是计算机和生物类的薪资大于1000的所有老师的信息。
SELECT TNAME, DNAME, SAL
FROM TEACHER
WHERE (DNAME = ‘计算机’OR DNAME = ‘生物’)
AND SAL > 1000
ORDER BY SAL;
如果没有括号,则查询出来的是计算机类的薪资大于1000的所有老师的信息
- IN与OR相比,IN的优点如下:
- 当选择的条件很多时,采用IN运算符就显的很简便,只需在括号内用逗号间隔依次罗列即可。
- 使用IN运算符,其后面所列的条件可以是另一条SELECT语句,即子查询。
- LIKE运算符
在SQL语言中是通过通配符来实现的。SQL语言提供的通配符有“%”,“_”,“*”和“[]”;只有CHAR、VARCHAR和TEXT类型的数据才能使用LIKE运算符和通配符。
当查询条件中没有通配符时可以用”<>”代替LIKE。例如:
SELECT * FROM teacher t WHERE t.dname NOT LIKE ‘计算机’;等价于
SELECT * FROM teacher t WHERE t.dname <> ‘计算机’;
“%”表示任意多个字符;“_”代表一个字符;“[]”多个字符匹配;
使用ESCAPE定义转义符,告诉DBMS后面的字符是实际值;例如:
LIKE ‘%M%’ ESCAPE ‘M’;’M’前面的%是通配符,后面的是实际的字符。