1. 连接oracle远程服务器
服务器与客户端的配置
2.日期,格式敏感
select * from emp where hiredate='17-11月-81' 正确
select * from emp where hiredate='1981-11-17' 错误,文字与格式字符串不匹配
3.查询当前的日期格式
a:select sysdate from dual;
b:select * from v$nls_parameters; 可以,不专业
alter session set NLS_DATE_FORMAT='yyyy-MM-dd'; 专业
4,修改当前session的一些参数(v$nls_parameters:语言,货币,日期等格式)
alter session set nls_date_format='yyyy-mm-dd';
也可以加到glogin.sql中,注意最后要有分号。
5,使用日期函数 to_char(str, format)
6,排序:
按照薪水降序排序
order by后面可以跟:列名,表达式,别名,序号
使用序号表示第n个列
order by作用于多列:
先按照第一列排序;如果相同,再按照第二列排序;如果降序,需要将desc放在每列后面
有null值时:
升序,null值在后面。
降序,null值在前面,这样不好。
让null值在后面:
select * from emp order by comm desc nulls last;
1,分组函数
avg、count、max、min、sum
有null时:
组函数会忽略空值。
使用NVL函数使分组函数不忽略空值。
2,分组(group by)
将表中的数据分成若干组
如按部门分组
在SELECT 列表中所有未包含在组函数中的列都应该包含在 GROUP BY 子句中
包含在 GROUP BY 子句中的列不必包含在SELECT 列表中
在GROUP BY 子句中包含多个列
3,使用Having
HAVING 子句中使用组函数
4,组函数嵌套
显示部门平均工资的最大值
1,子查询
查询工资比SCOTT高员工信息
1. 查SCOTT的工资
2. 查比3000高的员工
子查询解决的问题:不能一步求解时,考虑使用子查询
2,注意问题:
1. 子查询相对主查询往右缩进
2. 将子查询放入括号中
3. 换行
4. 可以在主查询的select, from, where, having 都可以放子查询
5. 不可以在主查询的group by 放子查询
6. 主查询和子查询可以不是用一张表,只要子查询返回的结果主查询可以使用,即可
7. 在from后面放子查询(*****)
3,select 后面放子查询: 该子查询必须是单行子查询
4,from 后面放子查询: 查询员工的编号和姓名
5,主查询和子查询可以不是用一张表,只要子查询返回的结果主查询可以使用,即可
例:查询部门名称为ACCOUNTING的员工信息
1,多行子查询
in: 在集合中
例:查询部门名称为ACCOUNTING和SALES的员工信息
any:和子查询中任意(随便)一个值比较
查询工资比10号部门任意一个员工工资低的员工信息
all: 和子查询中所有值比较
查询工资比10号部门所有员工工资低的员工信息
**
any: 小于集合中的最大值
all: 小于集合中的最小值
any: 大于集合中的最小值
all: 大于集合中的最大值
2,子查询中的空值问题
查询不是经理的员工信息(前面已经见到了)
3,相关子查询
子查询中的条件要引用主查询的值。
例:
查询员工与员工经理的工资。
1. rownum一旦生成就不变
2. rownum 只能使用< <=,不能使用> >=