Oracle中基本增删改查

  • 介绍工作中常遇到的,认为值得分享的比较简单的一些点

给一个表插入数据和增加栏位风险

  • 给一个表制定栏位插入值

  • SD_GSS 以此表为例子

  • 存在另外一个表, SD_GSS1SD_GSS结构完全相同,那么可以用如下插入语句,这只是简单的写法

   INSERT INTO  SD_GSS(YEAR,NO) VALUES ('2015','1')
  • 存在一定的风险,下面分享几个,如果两个表,任意一个表有栏位增加,则Oracle会报错,还有数据栏位唯一性,插入语句基于数据库机制都会有报错
   INSERT INTO  SD_GSS
   SELECT *FROM  SD_GSS1 
  • 如果你会向一个表中插入资料,但是要用SQL定期检查,某个栏位有无重复,可能会有如下SQL语句,
   SELECT NO FROM  SD_GSS1 WHERE NO=''  GROUP BY  NO HAVING COUNT(*)>1
  • 这样可以排查出重复数据,但是你可以对一个栏位下一个唯一性定义,就可以提前避免有重复数据出现
  • 当然实际开发中遇到的SQL语句可能会很长,约束条件也是复杂多样化
   ALTER TABLE SD_GSS
   ADD  UNIQUE (NO)

IN、OR、EXSIT

  • 这些检索条件关键字自然有用,但是对于大的表格来说,相当难用,如下一条SQL就是效率低下的写法,把查询的条件作为结果。用了IN,不会套用至索引上
  • 其余两个等类似,这里先开个头,等时机成熟,好好谈谈SQL写法,和数据库机制,索引等等。
   SELECT NO FROM SD_GSS WHERE NO IN(SELECT NO FROM SD_GSS1 WHERE YEAR='')
  • 如果简单优化可以如下
   SELECT A.NO FROM SD_GSS A,SD_GSS1 B WHERE A.NO=B.NO AND B.YEAR='
  • LEFT JOIN 深入优化如下,当然,对于大批量数据,没有打上索引的检索条件优化,又会显得毫无意义
   SELECT A.NO FROM SD_GSS A  LEFT JOIN  SD_GSS1 B ON A.NO=B.NO WHERE  B.YEAR=''

感激

写的比较简单,一切事物发展都有其底层,打好基础。感谢您能在百忙中阅读我的文稿,如有思想交际,不胜荣幸。

关于作者

  var runoob = {
    nickName  : "墨客码",
    site : "http://www.cnblogs.com/gss0525/"
    descTarget : "本菜鸟做.net后台开发,热衷分享技术,希望您能给个赞,鼓励一下,亲"
  }
posted @ 2017-04-28 04:33  工业互联开发百科  阅读(516)  评论(0编辑  收藏  举报