一个菜鸟的oracle之路----------三
一个菜鸟的oracle之路----------三
今天学习的知识点有
1,非关联子查询 学习非关联子查询的数据环境和语法
2,关联子查询 对比非关联子查询,掌握语法
3,集合操作 多个结果集之间的操作
4,表间操作 多表之间的关联关系
5,内连接和外连接 多表之间的关联查询
6,左/右/全外连接 多表之间的关联查询
1,知识点小结。
1.1 查询语句的基本格式。
[sql]
select 字段1,字段2,字段3,表达式,函数,...
from 表名
where 条件
group by 列名
having 带组函数的条件
order by 列名
1.2 函数
1.21 组函数,count avg sum max min
//注意:组函数忽略空值
1.22 单行函数
字符函数,upper/lower/initcap/length/lpad/rpad/replace/trim
upper 转化为大写
lower 转化为小写
initcap 转化为首字母大写
length 取长度
lpad 左补丁
rpad 右补丁
replace 字符转化
trim 去除前面的空格
案例1 将ename字段设置为10个长度,如果不够左边用'*'补齐
[sql]
select lpad(ename,10,'*')from emp_xxx;
案例2
[sql]
select rpad(ename,10,'#')from emp_xxx;
案例3 数字函数,round /trunc/mod
求salary对5000取模
[sql]
select salary,mod(salary,5000)from emp_xxx;
案例4 日期函数 months_between、add_months、last_day
months_between 两个日期之间的月份数
add_months 给定一个时间,为该日期增加指定月份
last_day 找出参数时间点所在月份的最后一天
将amy 的入职时间提前2个月
[sql]
select ename,hiredate from emp_xxx where ename='郭靖';
select ename,add_months(hiredate,-2) from emp_xxx where ename='郭靖';
//使用update语句进行更改
[sql]
update emp_xxx set hiredate=add_months(hiredate,-2) where ename='郭靖';
//再次进行查询
[sql]
select ename,hiredate from emp_xxx where ename='郭靖';
案例5,这个月最后一天是多少
[sql]
select last_day(sysdate) from dual;
转换函数 to_char/to_date和to_number
to_char to_number
日期 ---------->字符 ------------>数字
<---------- <------------
to_date to_char
案例6 将“$7912345.67”乘以10,输出结果
[sql]
select to_number('$7912345.67','$9999999.99')*10 from dual;
案例7 将79123456.79按照指定格式$9999999.99输出
[sql]
select to_char('7912345.67','$9999999.99')from dual;
通用函数 nvl/coalesce/decode
单行函数出去四大类字符函数,数字函数,日期函数,转换函数,还有一些其他函数
nvl/coalesce/decode
使用频率比较高的函数
单行函数 upper round to_char/to_date/nvl
组函数 count/avg/sum/max/min
2 子查询
2.1 单行函数比较运算 > < >= <= = <>
案例8 ,谁的薪水比黄蓉的高
[sql]
select ename,salary
from emp_xxx
where salary>(
select salary from emp_xxx where ename='黄蓉');
//保留此问题,如果存在2个黄蓉该怎么办
案例9 研发部有哪些职位
[sql]
select distinct job
from emp_xxx
where deptno=(select empno from emp_xxx
where ename='Analyst');
//感觉该问题还没有解决
案例10 谁的薪水比张无忌的高
[sql]
insert into emp_xxx(empno,ename,salary)
values(1012,'张无忌',8000);
select ename,salary from emp_xxx;
//如果有多个叫张无忌的则会出错
//报错