Oracle sql语句学习
转载请声明来自http://www.cnblogs.com/ulli/archive/2012/02/27/2369882.html
1: Oracle中双引号与单引号的区别
Oracle中的单引号用来表示字符串常量,常用在这些位置
1: where 条件判断里面,作为字符串常量。
1 SELECT last_name,hire_date
2 FROM employees
3 WHERE last_name = 'yinyunan'
2: 作为查询的结果或者 作为一列 放在SELECT 列表后面
1 SELECT last_name || ' is a ' || job_id AS "Details",
2 'Literal String '
3 FROM employees;
单引号的字符串不能使用的地方:
1: 作为列名或列的别名
Oracle中双引号则常常用在列明或列的别名。
2: Oracle函数介绍
a: 单行函数(数据中每一行只返回一个结果,会操作结果中的每一行数据)
a1: 字符串函数,接收字符型参数,返回类型为字符型或数值型。
a2: 数字型函数,接收数字型参数,返回数字型。
a3: 日期型函数,处理日期型数据,
所有函数军返回Date类型(MONTHS_BETWEEN()函数除外)
a4: 转换函数,负责数据类型键的转换。
a5: 通用函数,常用的函数。
b: 多行函数
3: Oracle中组函数相关
1: 执行顺序为 where、group by、having、order by;
2:如果在select中为列去了别名,那么只能在order by中使用,where、group by、having中都不能使用
3:如果select中包含了组函数,那么select中不能出现其他的列,除非,该列出现在group by中。
4: Oracle表别名引用的范围
1: 别名存在的可用范围只在该select语句块中。
2: 由上可以推知,在子查询块中能够使用外查询的别名,而在外查询中,不能使用子查询中的别名和标明,贴代码
1 SELECT employee_id,last_name
2 FROM employees e1
3 WHERE employee_id IN (
4 SELECT employee_id
5 FROM employees e2)
在此处,子查询可以访问外查询的表,即employees(e1),而外查询不能访问子查询的表(e2)
5: Oracle中的子查询相关
1:若子查询当中存在空值,则应该注意使用 NOT IN等 与集合所有元素相关的操作(ALL ANY),见代码
1 SELECT last_name
2 FROM employees
3 WHERE employee_id NOT IN(
4 SELECT manager_id
5 FROM employees)
此处,如果子查询返回的结果中包含null值得话,该查询将得不到任何结果,
因为not in会导致外查询与集合里面的值都进行比较,而
任何值和null比较都为null,这样的话,外where判断总是为null
此处的解决办法是,在子查询中加入where判断,manager_id是否为空