2018-08-30

作者: CLJnong | 来源:发表于2018-08-30 13:22 被阅读4次

    今天学习了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;

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

    相关文章

      网友评论

        本文标题:2018-08-30

        本文链接:https://www.haomeiwen.com/subject/uowqwftx.html