zoukankan      html  css  js  c++  java
  • oracle数据库基本语句

    DEPT表结构:

    EMP表结构:

    --创建表空间
    create tablespace itheima
    --指定数据文件位置
    datafile 'C:itheima.dbf'
    --指定大小
    size 100m
    autoextend on
    next 10m;
    --删除表空间
    --drop tablespace itheima

    --创建用户
    create user itheima
    identified by itheima
    default tablespace itheima;
    drop user itheime;
    --给用户授权
    --oracle数据库中的常用角色
    connect--链接角色
    resource--开发者角色(我们的)
    dba--超级管理员角色
    --给itheima授权dba角色
    grant dba to itheima;
    --切换到itheima用户

    --创建person表
    create table person(
    pid number(20),
    pname varchar2(10)

    );
    --修改列的名称
    alter table person rename column gender to sex;

    alter table person drop column sex;


    --修改表结构
    --添加一列
    alter table person add gender number(1);

    --修类列类型
    alter table person modify gender char(1);


    --添加一条记录,必须要手动提交
    insert into person(pid,pname) values (1,'小明');
    commit;
    --查询表中记录
    select * from person;

    --修改一条数据
    update person set pname = '小马' where pid = 1;

    --三个删除
    --删除表中全部数据
    delecte from person;
    --删除表结构
    drop table person;
    --先删除表,再次创建表,效果等同删除表中的全部数据
    --在数据量大的情况下,尤其带有索引的情况下,该操作效率高
    --索引可以提供查询效率,但是会影响增删改的效率
    truncate table person;


    --序列不真的属于任何一张表,但可以逻辑和表绑定
    --序列:默认从1开始,依次递增,主要给逐渐递增使用
    --dual :虚表,只是为了补全语法
    create sequence s_person;
    select s_person.currval from dual;

    --添加一条记录
    insert into person(pid,pname) values (S_person.nextval,'黄晓明');
    commit;
    select * from person;

    --scott用户,密码tiger
    --解锁scott用户
    alter user scott account unlock;
    --解锁scott用户的密码
    alter user scott identified by tiger;
    --切换到scott用户

    --学习查询
    -- 函数
    --单行函数:作用于一行,返回一个值
    --字符函数
    select Upper('yes') from dual;
    select lower('YES') from dual;
    --数值函数
    select round(26.18,1) from dual;--四舍五入函数,后面参数表示保留

    select trunc(56.16,1) from dual;--直接截取,不再四舍五入
    select mod(10,3) from dual;
    --日期函数
    --查询出emp表中,所有员工入职距离现在的时间
    select sysdate-e.hiredate from emp e;
    --算出明天此刻
    select sysdate+1 from dual;
    --多行函数:作用于多行,返回一个值
    --转换函数
    --日期转字符串
    select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
    --字符串转日期
    select to_date('2018-6-7 16:39:50','fm yyyy-mm-dd hh24:mi:ss') from dual;
    ----通用函数
    --算出emp表中所有员工的年薪
    select e.sal*12 from emp e;


    --条件表达式
    --给emp表中的员工起中文名
    select e.ename,
    case e.ename
    when 'SMITH' then '校长'

    when 'ALLEN' then '爱陆虎'

    when 'WARD' then '我的'

    when 'JONES' then '琼斯'
    else '傻逼'
    end

    from emp e;

    --判断员工工资,如果高于3000显示高收入,低于小时
    select e.sal,
    case
    when e.sal>3000 then '高收入'

    when e.sal>1500 then '中等收入'

    else '低收入'
    end

    from emp e;
    --oracle专用条件表达式
    --oracle除了起别名,都用单引号 尽量选择通用表达式
    select e.ename,
    decode( e.ename,
    'SMITH' ,'校长' ,

    'ALLEN', '爱陆虎',

    'WARD' , '我的' ,

    'JONES', '琼斯' ,
    '实例'
    )

    from emp e;


    --多行函数【聚合函数】,作用于多行,返回一个值
    select count(1) from emp;--数量
    select sum(sal) from emp;--工资集合
    select max(sal) from emp;--最大工资
    select min(sal) from emp;--最低工资
    select avg(sal) from emp;--平均工资

    --分组查询
    --查询出每个部门的平均工资
    --分组查询中出现在group by后面的原始列才能出现在select后面
    --没有出现在group by 后面的列,想在select后面,必须家伙在那个聚合函数
    --聚合函数可以把多行记录变成一个值
    select e.deptno,avg(e.sal),
    from emp e group by e.deptno;
    --查询出平均工资高于2000的部门信息
    select e.deptno,avg(e.sal) asal
    from emp e
    group by e.deptno
    having avg(e.sal)>2000;
    --所有条件不能使用别名来判断
    --先读条件,往上读取 所以不知道别名

    --查询每个部门员工工资大于800的平均
    select emp.deptno,avg(emp.sal)
    from emp where emp.sal>800
    group by emp.deptno;
    --where 和having有哪些差别
    --where过滤分组前的 必须在group by 前面
    --having在过滤之后,必须在group by之后


    --多表查询中的概念
    --笛卡尔积
    select *
    from emp e ,dept d;--大部分值没意义
    --等值连接
    select * from emp e ,dept d
    where e.deptno=d.deptno;

    --内连接
    select *
    from emp e inner join dept d
    on e.deptno = d.deptno;

    --查询出所有部门以及部门下员工信息【外链接】
    select *
    from emp e right join dept d
    on e.deptno = d.deptno;
    --左外外连接
    select *
    from emp e left join dept d
    on e.deptno = d.deptno;
    --test
    select *
    from dept;

    --oracle中专用外连接写法 尽量选择通用的 以防换数据库
    select *
    from emp e,dept d
    where e.deptno(+) = d.deptno;

    --自链接,其实就是站在不同的角度把一张表看成多张表
    --查询员工姓名,员工领导姓名
    select e1.ename ,e2.ename
    from emp e1 ,emp e2
    where e1.mgr = e2.empno

    --查询出员工姓名,员工部门命名称,员工领导姓名,员工领导部门名称
    select e1.ename ,d1.dname,e2.ename ,d2.dname
    from emp e1 ,emp e2 ,dept d1, dept d2
    where e1.mgr = e2.empno
    and e1.deptno = d1.deptno
    and e2.deptno = d2.deptno;
    --子查询
    --子查询返回一个值
    --查询工资和scott一样的员工信息
    select ename,sal from emp where sal=(
    select sal from emp where ename = 'SCOTT'
    )

    --子查询返回一个集合
    --查询出工资和10号部门任意员工一样的员工信息
    select * from emp where sal in (select sal from emp where deptno = 10);

    --子查询返回一张表
    --查询出每个部门最低工资,和最低工资员工姓名,和该员工所在门门的名称
    --先查询出每个部门最低工资


    select e.deptno,t.msal.e.ename,d.dname
    from (
    select deptno,min(sal) msal
    from emp
    group by deptno;
    ) t,emp e,dept d

    where t.deptno = e.deptno
    and t.msal = e.sal
    and e.d

  • 相关阅读:
    每日日报2021.5.14
    每日日报2021.5.13
    每日日报2021.5.12
    每日日报2021.5.11 冲刺第十天
    《梦断代码》读后感3
    每日日报2021.5.10 冲刺第九天
    《梦断代码》读后感2
    每日日报2021 5/23
    每日日报2021 5/22
    每日日报2021 5/21
  • 原文地址:https://www.cnblogs.com/purpleone/p/11695578.html
Copyright © 2011-2022 走看看