- 介绍工作中常遇到的,认为值得分享的比较简单的一些点
给一个表插入数据和增加栏位风险
- 给一个表制定栏位插入值
SD_GSS
以此表为例子存在另外一个表,
SD_GSS1
和SD_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后台开发,热衷分享技术,希望您能给个赞,鼓励一下,亲"
}