关于oracle中select,update,delete,insert的用法

数据库中的insert,select,update,delete都是根据一行一行的查找,符合where条件的数据,

符合的就进行相关操作,不符合的就忽略掉,

 

注意:当在where中用等号做条件的时候返回的是单值,做嵌套子查询的时候可以直接=.

例如:

   select * from student where id = (select id  from g where student.id = g.id);

   如果返回的是多个值在id=中把=换成in

   学生表

 

        ID NAME                      SCORE      GRADE

---------- -------------------- ---------- ----------

         1 张三                         90 

         2 李四                         80 

         3 王五                         91 

         4 赵六                         86 

         5 孙七                         88 

         6 王八                         60

 班级表 

 

        ID      GRADE

---------- ----------

         1       2001

         2       2002

         3       2001

         4       2001

         5       2002

         6       2002

1.select查询

     要熟练掌握嵌套子查询:

   例如:

    更新当class中的id等于student中的id时,更新student表中的数据

    select * from student;

   select *from class;

   update student set(name,score) = (select name,score from 

    (select rownum r ,name,score from class) where r = student.id);

2.update的用法

   update student set grade = (select grade from g where g.id = student.id);

   根据班级中的数据更新到学生表中,实现一次性更新.

   update student set(列名,列名) =(查询语句);

 

 

实现两张表的结合,

查找出成绩前两名的学生,分别是由什么老师带领的

学生表

 

        ID NAME                      SCORE      GRADE

---------- -------------------- ---------- ----------

         1 王八                         56       2002

         2 刘亮                         65       2002

         3 孟超伟                       88       2001

         4 周龙潮                       88       2001

         5 张明                         91       2002

         6 张林燕                       73       2001

 

 班级表

 

 

     GRADE TEACHER

---------- --------------------

      2001 张教授

      2002 孙教授

 

select id,name,score,grade,teacher from (select al.*,
rank() over(partition by grade order by score desc) as rw from
(select s.id,s.name,s.score,s.grade,c.teacher from 
student s left outer join class c
on s.grade = c.grade order by id) al) where rw <= 2;

 

   关于用dense_rank ()/rank () over(partition by 列名 order by 列名)

   的区别:

   dense_rank()不会跳过重复的,比如11之后会是2,

   而rank()直接跳过重复的,11之后就变成3;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值