Java 杂谈

2018-08-30

2018-08-30  本文已影响4人  CLJnong

今天学习了Oracle的多表连接,组函数,分组查询,子查询, 常用函数。

现在的一切,都是为了找份好工作

多表连接有三种类型:内连接,外连接,自连接。

--内连接也称为等值连接,也就是两张表之间有相同字段.

比如这里有二张表,stu clazz

select s.*,c.*

from stu s,clazz c

where s.id=c.sid;

select * from scott.dept,scott.emp

where scott.dept.deptno=scott.emp.deptno

and scott.emp.ename='SMITH';

--使用别名

-- 查询指定列

select d.deptno 部门编号, d.dname 部门名称, e.sal 薪资 

from scott.dept d, scott.emp e

where d.deptno = e.deptno

and e.ename = 'SMITH';

--外连接

--分左外连接(在右边那个表中加入+,左边表格内容全部显示,右边没有的就是空值)

select * from scott.dept d, scott.emp e

where d.deptno = e.deptno(+);

select * from scott.dept d left outer join scott.emp e

on d.deptno = e.deptno;

--右外连接(在左边那个表中加入+,左右边表格内容全部显示,左边没有的就是空值)

select * from scott.dept d, scott.emp e

where d.deptno(+) = e.deptno;

select * from scott.dept d right outer join scott.emp e

on d.deptno = e.deptno;

--全外连接用标准方式写full outer join。

select * from scott.dept d full outer join scott.emp e

on d.deptno = e.deptno;

--注意用标准写法的时候,where 改为on

--自连接,自己和自己连接,把自己的表当成一个临时表。首先的先创建这么一个临时表,值跟原表一样:create table temp as(select * from stu);

--组函数:

count()统计数量

avg()计算平均值

sum()计算总和

min()最小值

max()最大值

--分组查询:当出现查询结果数量不一样多的时候,就会出现错误,这个时候使用分组查询。

group by

-- 如果想在分组后,还需要进行条件过滤

-- 可以使用 having 关键字,追加条件

select deptno, sum(sal)

from scott.emp

group by deptno

having sum(sal) > 10000;

-- 常见的关键字使用顺序:

-- select > from > where > group by > having > order by

--select >from>where>group by>having>order by。

--常用函数

--dual是oracle才有的临时表
select sysdate from dual;--系统时间

create table tb_test(

      currdate date

);

insert into tb_test(currdate) values(to_date('2012-09-30','yyyy/mm/dd'));是2012/09/30

insert into tb_test(currdate) values(to_date('2012-09-30','yyyy-mm-dd'));也是2012/09/30

select * from tb_test;

insert into tb_test(currdate) values(to_date('2012-09-30 09:12:12','yyyy/mm/dd hh:mi:ss'));

select * from tb_test;

select sysdate from dual;

--在日期上加上或减去一个数字结果仍为日期。

select sysdate+10 from dual;

三个函数to_char\to_date\to_number

select to_date('2018-08-30','yyyy-mm-dd') from dual;--设置日期格式·

select to_char(sysdate,'yyyy-mm-dd') from dual;--设置日期字符串

select to_char(sysdate,'yyyy/mm/dd') from dual;

select to_char(sysdate,'mm/dd') from dual;

to_char函数,可以将日期转成字符串,我们可以从中拿取年、月(一般)

比如:查询某公司4月份销售总量的问题。

select to_char(1233.5566) from dual;--数字转成字符串

select to_number('1233.687') from dual;--非数字转为数字

--两个日期之间还可以进行减法

--得到相差的天数

--还可以是负数

select sysdate-to_date('2018/07/15','yyyy-mm-dd') from dual;

select sysdate - to_date('2016-08-20','yyyy-mm-dd') from dual;

select TRUNC(sysdate - to_date('2016-08-20','yyyy-mm-dd')) from dual;

select to_date('2016-08-22 14:27:00','yyyy-mm-dd hh24:mi:ss') - sysdate from dual;

--可以用数字除24来向日期中加上或减去小时。

select sysdate+2/24 from dual;

--select sysdate/24+2 from dual;(错误)

--可以用数字除24再除60来向日期中加入分钟

select sysdate+2/24/60 from dual;

--通用函数完成一些功能

--nvl函数 如果第一个参数为null,则取第二个参数

select comm from scott.emp;

select nvl(comm,0) from scott.emp;

--使用0替换null的comm,计算年收入

  select ename,sal,comm,(sal + comm)*12 年收入 from scott.emp;

select ename,sal,comm,(sal + nvl(comm,0))*12 年收入 from scott.emp;

--nvl2函数 如果第一个参数为null,则取第三个参数,否则取第二个参数

  select nvl2(comm,comm,0) from scott.emp;

学习完之余,看看大自然,缓解下疲劳
上一篇下一篇

猜你喜欢

热点阅读