zoukankan      html  css  js  c++  java
  • Oracle_2 随便写写

    select * from emp natural join dept order by DEPTNO DESC ; --自然查询 natural join 可以自己识别出两表中 相同的字段进行关联。
    select * from emp e,dept d where e.deptno=d.deptno;

    select * from dept d left join emp e on e.deptno=d.deptno; --left join 左连接
    select * from dept d left join emp e where e.deptno=d.deptno; --left join 不可以和where进行使用 否则提示缺少关键字 on, 需要 left join on 这是一个完整的语法。

    select * from emp e right join dept d on e.deptno=d.deptno; --right join 右链接


    select count(d.dname) from emp e right join dept d on e.deptno=d.deptno;
    select * from emp e right join dept d on e.deptno=d.deptno;

    select count(*) from emp; --count(求记录数)
    select min(sal) Minsal ,max(sal) Maxsal ,avg(sal) Avgsal ,sum(sal) Samsal from emp where deptno=20; -- min 求最小值 max 求最大值 avg 求平均值 sum 求总和


    select deptno,count(deptno) from emp group by Deptno;

    select count(deptno) from emp where deptno=10;

    select * from dept;

    select count(d.deptno),d.deptno from dept d left join emp e on d.deptno=e.deptno where d.deptno=20 group by d.deptno;


    select count(job),d.deptno,d.dname from emp e right join dept d on d.deptno=e.deptno group by d.deptno,d.dname ,e.job order by d.deptno desc;

    select count(job),d.deptno,e.job from emp e right join dept d on d.deptno=e.deptno group by d.deptno ,e.job order by d.deptno desc;

    select count(*), job, deptno from emp group by deptno, job order by deptno; --count* 会以job来统计记录还是以deptno来统计记录。


    select * from emp;
    select * from dept;
    select * from emp e right join dept d on e.deptno=d.deptno;

    --查询平均工资大于2000的部门
    select avg(sal) from emp group by deptno having avg(sal)>2000;
    select count(empno) from emp e right join dept d on d.deptno=e.deptno group by d.deptno;
    select count(d.deptno) from emp e right join dept d on d.deptno=e.deptno group by d.deptno;

    select sum(sal),job from emp where job!='SALESMAN' and sal>2000 group by job, sal order by sal ;
    select sum(sal) abc ,job from emp group by job, sal having job!='SALESMAN' and sal>2000 order by sum(sal) ;


    select count(*), job, deptno from emp group by deptno, job order by deptno; --count* 会以job来统计记录还是以deptno来统计记录。

    select e.sal
    from emp e
    where e.sal > (select sal from emp e1 where empno = 7654);


    --查询比7654工资高 且跟7788工作职位相同。

    select *
    from emp t
    where t.sal > (select sal from emp e where e.empno = 7654)
    and t.job = (select job from emp r where r.empno = 7788);


    select e.empno ,e.ename,e.job
    from emp e
    where e.sal>(select sal from emp q where q.empno=7654)
    and e.job=(select job from emp w where w.empno=7788);




    select a.sal,a.ename,a.deptno from emp a where sal in (select min(sal) from emp e group by e.deptno) ;

    select * from emp w,
    (select min(e.sal) eoo,e.deptno from emp e group by e.deptno) e
    where w.sal=e.eoo and w.deptno=e.deptno;



    select w.ename,w.sal 工资 from emp w where w.sal in(select min(e.sal) from emp e group by e.deptno);


    select w.* from emp w ,( select min(e.sal) ttt from emp e group by e.deptno ) e where w.sal=e.ttt;



    select d.deptno from dept d where d.deptno in(select e.deptno from emp e group by deptno); --group by 比distinct 性能要高, group by只需要读取分组的记录, distinct需要读取所有记录
    select d.deptno from dept d where d.deptno not in(select distinct e.deptno from emp e );


    select * from dept d where exists(select * from emp e where e.deptno=d.deptno);

    --union 查询集合去并集时可以去除重复的数据
    select * from emp where emp.sal>1000
    union
    select * from emp where emp.sal>2000;

    select * from emp where emp.sal>1000 or emp.sal>2000;

    --union all 查询集合去并集时 不会去除重复的数据
    select * from emp where emp.sal>1000
    union all
    select * from emp where emp.sal>2000;


    select empno,ename,job from emp where empno=7788
    union
    select empno,ename,job from emp where empno=7654;

    --并集时 要合并的列名可以不一致,但列名的类型必须一致 并且union时 两条语句的列数必须要保持一致
    select empno,job , ename from emp where empno=7788
    union
    select empno,ename,job from emp where empno=7654



    create table myemp as select * from emp;

    select * from myemp for update;

    select sysdate from dual;

    insert into myemp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(1234,'LiMing','Sport',7788,to_date('1999-01-01','YYYY-MM-DD'),2000,200,30) --增 insert into 表名(列1,列2) values(值1,值2)

    update myemp set empno =1235,ename='MingLi123' ,Job='Book' where Empno=1235 --改 update 表名 set 列名= 值 where 条件

    delete from myemp where empno=1235 --删除 delete from 表名 where条件 Oracle可以省略from,但mysql中必须写from,并且Oracle可以定义别名, mysql删除时表不能定义别名。

    --事务对 增删改 都生效
    commit;--事务提交 commit
    rollback;--事务未提交时可进行回滚,已提交则不能回滚 rollback


    create table person(
    pid number,
    pname varchar2(10),
    birthday date
    )

    insert into person values(001,'张三',to_date('2020/01/01 12:59','yyyy/mm/dd hh:mi'),18)
    insert into person values(001,'张三',to_date('2020/01/01 12:59','yyyy/mm/dd hh:mi'),1888)

    select * from person;

    drop table person;


    alter table person add(age number); --现有表中添加 列 add

    alter table person modify(age number(6,2))--现有表中的列进行修改 列的类型 modify


    --截断表 会直接删除表中的数据, 不会保留执行提交或回滚的操作,直接删除。 delete删除时会进行提示和保留提交和回滚的操作。
    truncate table person;


    drop table person;
    -- 定义主键 primary key 主键约束

    create table person(
    pid number primary key,
    pname varchar2(10),
    birthday date
    )

    insert into person values( '','张三',to_date('2020/01/01 12:59','yyyy/mm/dd hh:mi'))
    --自定义主键名称 constraint 约束
    create table person(
    pid number ,
    pname varchar2(10),
    birthday date,
    constraint person_person_id_pk primary key(pid)
    )
    --自定义多个约束的名称 constraints

    -- 唯一约束 unique
    drop table person;
    create table person(
    pid number ,
    pname varchar2(10) ,
    birthday date null,
    constraint person_person_id_pk primary key(pid) ,
    constraint person_pname_uk unique(pname)
    )

    insert into person values( 002,'2',to_date('2020/01/01 12:59','yyyy/mm/dd hh:mi'))

    select * from person;

    --非空约束 not null

    drop table person;
    create table person(
    pid number ,
    pname varchar2(10) not null,
    birthday date null,
    constraint person_person_id_pk primary key(pid)
    )

    insert into person values( 001,'1',to_date('2020/01/01 12:59','yyyy/mm/dd hh:mi'))

    select * from person;

    -- 唯一约束 unique
    drop table person;
    create table person(
    pid number ,
    pname varchar2(10) unique,
    birthday date null,
    constraint person_person_id_pk primary key(pid)
    )

    insert into person values( 002,'2',to_date('2020/01/01 12:59','yyyy/mm/dd hh:mi'))

    select * from person;


    --外键约束 foreign key references

    drop table orders;
    --订单表
    create table orders(
    order_id number(4),
    order_price number(6,2),
    order_time date,
    constraint orders_order_id primary key(order_id)
    );

    drop table order_detail;
    --订单明细表
    create table order_detail(
    detail_id number(4),
    item_name varchar2(10),
    price number(6,2),
    quantity number(4),
    order_id number(4),
    constraint order_detail_detail_id_pk primary key(detail_id),
    constraint order_detail_order_id_FK foreign key(order_id) references orders (order_id) on delete cascade
    )


    insert into orders values (001,6000,sysdate);
    insert into order_detail values(1000,'iphone',2000,3,001);


    delete from orders;
    drop table orders cascade constraint; --cascade constraint


    select * from order_detail;

    select rownum-1 ,e.* from emp e;


    select rownum rw, a.* from (select * from emp ) a where rownum<6;


    --查询数据
    -- 拿查询结果集当做一个表 然后限定条件
    -- 拿上一个结果集再当一个表 之后使用 rownum的别名进行限定条件使用

    select *from
    (select rownum rw, a.* from (
    select * from emp
    ) a where rownum < 11) b
    where b.rw > 5


    --视图
    grant connect,resource,dba to scott;


    create view view_emp_deptno20 as select * from emp where deptno=20;


    select ename from view_emp_deptno20;
    -- 创建视图 语法:create view 视图名称 as 语句
    --or replace 创建视图或视图存在时直接覆盖现有视图。 创建或覆盖
    --with read only 是不允许视图被修改, 如果表数据有变更,视图查询的数据也会同步。
    create or replace view view_myemp20 as select * from myemp where deptno=20 with read only;

    update view_myemp20 set ENAME='liming' where EMPNO=7369;

    update myemp set ename='史密斯' where empno=7369;
    select * from view_myemp20;

  • 相关阅读:
    mysql报错:java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.
    MD5登陆密码的生成
    15. 3Sum、16. 3Sum Closest和18. 4Sum
    11. Container With Most Water
    8. String to Integer (atoi)
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    几种非线性激活函数介绍
    AI初探1
    AI初探
  • 原文地址:https://www.cnblogs.com/java-263/p/14548655.html
Copyright © 2011-2022 走看看