最近打算把9i 的OCP教程看一遍,作一些简单的笔记,作为备忘。
PL/SQL看似简单,但实际使用起来还是有很多技巧和误区的。以下记录的是复习过程中想到的、和容易出现错误的地方。
这些东西在教程大部分是没有记载的。
第二章:查询特定数据及排序
2.1 WHERE子句
1) WHERE子句的组成
WHERE子句由三部分组成:列名、比较符、列名或常量或其他值。
【注意】在WHERE子句中不能用字段别名
2) WHERE中的字符串
字符串是由单引号括起来的,它是大小写敏感的。
3) 日期
4) 操作比较符
Ø !=、^=、<>含义一样,都表示不等于。
Ø Between...and...相当于a>=
Ø In可用于任意数据类型。在oracle内部,in操作会被转换为a=
5) LIKE比较符
Ø %
匹配任意个字符。
Ø _
匹配单个字符
Ø LIKE只能用于字符类型的比较,但很多数字类型和日期类型也可能用,是因为oracle在执行时进行了数据类型的隐式转换。
6) LIKE的转义
当用LIKE进行查询时,如果查询条件包含有%或_,可以用ESCAPE转义:
Select * from t where c1 like ‘%a_%’escape ‘’;
也可以把’’换成其他字符,如’y’,只需要把ESCAPE子句的相应转义字符也换成’y’:
Select * from t where c1 like ‘%ay_%’ escape ‘y’;
【注意】ESCAPE后连接的转义符必须是长度为一的字符。
7) 运算符的优先级
数学运算符->连接运算符(||)->比较运算符(=、>、<)->is null、like、in->[not] between...and...->not 逻辑条件->and 逻辑符->or 逻辑符
2.2 ORDER BY子句
1) 升序和降序
ASC:升序,是默认的排序方式。排序方式是:数值类型的话是从小到大、日期是从早期到晚期、字符类型是从A到Z;升序排序NULL会排在最后。(可以认为null为无穷大)
DESC:降序。排序方式刚好与ASC相反;降序排序NULL值会排在最前面。
2) ORDER BY子句的位置
ORDER BY 子句只能放在SQL语句的尾部,且子查询里不能出现ORDER BY子句(作为数据源时可以出现order by,否则不能在子查询中出现order by)。
SQL> select * from (select * from dual order by 1);--作为数据源,可以用order by
SQL> select * from dual where dummy in (select dummy from dual order by 1);--作为子查询,不可以用order by,否则出错.
3) ORDER BY子句后接的可以是列名、别名、数字
4) 如果sql用到distinct时使用order by,则排序的列必须包含在select列表中 ,否则就会出现ORA-01791: 不是 SELECTed 表达式。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/231499/viewspace-63769/ ,如需转载,请注明出处,否则将追究法律责任。