SQL语句的学习

一、个学习的是插入100万个用户的不同姓名的方法
declare @usercode bigint
declare @userid int
declare @meterid int
declare @len int
declare @i int
DECLARE @LN VARCHAR(300),@MN VARCHAR(200),@FN VARCHAR(200)
DECLARE @LN_N INT,@MN_N INT,@FN_N INT
SET @LN='李王张刘陈杨黄赵周吴徐孙朱马胡郭林何高梁郑罗宋谢唐韩曹许邓萧冯曾程蔡彭潘袁于董余苏叶吕魏蒋田杜丁沈姜范江傅钟卢汪戴崔任陆廖姚方金邱夏谭韦贾邹石熊孟秦阎薛侯雷白龙段郝孔邵史毛常万顾赖武康贺严尹钱施牛洪龚'
SET @MN='德绍宗邦裕傅家積善昌世贻维孝友继绪定呈祥大正启仕执必定仲元魁家生先泽远永盛在人为任伐风树秀文光谨潭棰'
SET @FN='丽云峰磊亮宏红洪量良梁良粮靓七旗奇琪谋牟弭米密祢磊类蕾肋庆情清青兴幸星刑'
SET @LN_N=LEN(@LN)
SET @MN_N=LEN(@MN)
SET @FN_N=LEN(@FN)
DECLARE @TMP VARCHAR(1000)

set @i=0
set @len=1000000

select @usercode=MAX(userno) from TB_USER
select @userid=MAX(USERID) from TB_USER
select @meterid=MAX(meterid) from TB_METER

while(@i<@len)
begin
 set @usercode=@usercode+1
 set @userid=@userid+1
 set @meterid=@meterid+1
 SET @TMP=CAST(SUBSTRING(@LN,CAST(RAND()*@LN_N AS INT),1) AS VARCHAR)
 SET @TMP=@TMP+CAST(SUBSTRING(@MN,CAST(RAND()*@MN_N AS INT),1) AS VARCHAR)
 SET @TMP=@TMP+CAST(SUBSTRING(@FN,CAST(RAND()*@FN_N AS INT),1) AS VARCHAR)
  
 Insert Into tb_user(userid,operatorid,accountid,khmoney,areacodeid,userno,username,usertel,usertel1,mobile,useraddr,userdate,userstate,count,differ,yearfeestate,checkstate,userbeizhu,namepinyin,addrpinyin,fireplaceid,firest,waterheaterid,waterst,f1id,f1st,f2id,f2st,f3id,f3st,appid) Values(@userid,'1','1','0.00','1',@usercode,@TMP,'','','','','2015-12-18 13:26:20','0','1','0','0','0','','_namepinyin','_addrpinyin','0','2015-12-18','0','2015-12-18','0','2015-12-18','0','2015-12-18','0','2015-12-18','1')

 Insert Into TB_METER(METERID,usertypeid,METERNO,caliber,dllcs,position,meterbase,meterbase1,State,saleid,writenumber,writedate,lastvalue, thisvalue, price, salewater, watermoney, receivable, paiclup, oldleftmoney,leftmoney,addprice,metertimes,metersumbuy,metersummoney,lastvalue1,thisvalue1) Values(@meterid,'1','','','0','1','0','0','0','0','0','2015-12-18 13:26:43','0','0','0','0','0','0','0','0','0','0','1','0','0','0','0')

 Insert Into tb_UserMeter(UserID,MeterId,IsUse) Values(@userid,@meterid,'0')
 set @i=@i+1
end
select COUNT(1) from TB_USER
/*
  *在SQL Server中,CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。
  *语法:
  *CAST (expression AS data_type)
  *
  *参数说明:
  *expression:任何有效的SQServer表达式。
  *AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
  *data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。
  */


/*
  *SELECT SUBSTRING(First Name,1,1) AS Initial, Last Name
  *FROM Employees
  *下面是结果集:
  *
  *Initial..........Last Name
  *-------------------------
  *A................Funk
  *M................Pearson
  *L................Calafato
  *N................Danner
  *J................Lee
  *S................Byham
  *M................Sutter
  *R................King
  */




/*
  *SUBSTRING ( expression, start, length )
  * 
  *  参数
  *
  *  expression
  *
  *  字符串、二进制字符串、文本、图像、列或包含列的表达式。请勿使用包含聚合函数的表达式。
  *
  *  start
  *
  *  整数或可以隐式转换为int 的表达式,指定子字符串的开始位置。
  *
  * length
  *
  * 整数或可以隐式转换为 int 的表达式,指定子字符串的长度(但是结果并补一个返回length字符长度,要看expression的长度和start的设置!!!!!!!!!!!)。
  *
  * 返回值
  *
  * 如果expression是一种支持的字符数据类型,则返回字符数据。如果 expression 是一种支持的二进制数据类型,则返回二进制数据。如果 start = 1,则子字符串从表达式的第一个字符开始
  *
  * 需要补充一句的是,开始start位置的设置,确实如果设置为1,会从第一个字符开始计数,2,3,4....以此类推。select substring(ziduan,1,6)将会选择字段的前6个字符,比如说是200908。
  *
  * 如果设置为0,同样的执行select substring(ziduan,0,6)结果会是20090,如果换成-1,同样执行select substring(ziduan,-1,6),结果会是2009。同样-2,-3,依次类推 substring('98765'  *   *-1,3)结果:9 。
  *
  *  substring('98765',0,3)结果:98
  * substring('98765',1,3)结果:987
  */




/*
  *调用rand函数可以产生随机数介于0和1之间的一个数

  */

第二个就是在表里如何将最近的记录号自动加一的方法就是

select @meterid=MAX(meterid) from TB_METER
二、对上述的每个数据添加记录

吃亏在记录没有初始化,对NULL值进行不断的加1还是NULL,下面一节描述错误

三、修改充值记录

碰到这样的问题,在添加充值记录里有一项是记录某个ID下充值记录的个数,

我在插入初始的100万条用户后,其记录个数都为空,然后我直接在空的基础上直接+1,这样因为没有初始化而直接加1 的结果是所有用户记录的个数都为空,

而我在不以为然的情况下对每个用户都插入了数个记录,但是记录数都为空。后来发现该错误。如何弥补成了困难。而且是对100万用户的弥补,在百度上提问也没有人回答

其模型是这样的

一个表,通过查询别的表的ID对应的ID的记录值,然后找到记录里最大值,最后修改最大值同一行的值的参数,语句怎么写

上图是通过在另外一个表A找到名为小明,对应ID为1234,找到对应表B里ID为1234的记录值共8条命令为

select * from B where USERID=(select USERID from A where name='小明')

,现在想找到B表的最大值修改meterID里的值,meterID的是这个记录的个数=8。

对于多个用户修改,怎么操作啊


跪求大神也是没有用,后来问里一个哥们,还是他比我聪明啊

declare @writenumber int,@i int
set @i=7
while @i<1000007
begin
select @writenumber=COUNT(*)from TB_SALE where USERID=(select USERID from TB_USER where USERNO=(220000000000+@i))
update TB_SALE set WRITENUMBER=@writenumber where saleid=( 
     select max(saleid) from TB_SALE where USERID=(
           select USERID from TB_USER where USERNO=(220000000000+@i)))
          set @i=@i+1
end

就这样解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle SQL语句学习可以分为几个分类:DML、DDL、DCL和TCL。DML包括select、delete、update和insert语句,用于对数据进行操作。DDL包括create table、truncate、drop和alter table语句,用于定义和管理数据库对象。DCL包括grant和revoke语句,用于数据库控制。TCL包括commit和rollback语句,用于事务控制。\[2\] 在编写SQL SELECT语句时,可以使用以下格式:SELECT *|{\[DISTINCT\] column|expression \[alias\],...} FROM table; 可以使用DISTINCT关键字去除重复行,使用alias给列或表达式起别名。可以使用比较条件关系符(如=、<>、>、<、>=、<=、!=、^=)来限制数据。还可以使用其他比较条件关系符,如between and、in(set)、like和is null。\[2\] 在编写SQL语句时,要注意字母大小写、是否添加注释等细微差别会导致语句具有不同的散列值,从而导致Oracle对语句进行硬解析。为了提高性能,应该使用绑定变量而不是常量。使用绑定变量时,即使改变了绑定变量的值,Oracle仍然可以共享这个语句,提高了查询的效率。\[3\] #### 引用[.reference_title] - *1* *3* [Oracle SQL学习](https://blog.csdn.net/xhw979850818/article/details/88142059)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Oracle-SQL学习](https://blog.csdn.net/gundongdexueqiu/article/details/7055885)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值