zoukankan      html  css  js  c++  java
  • SQl语句学习笔记(二)

    merge into        when matched then...  when not mached then...

    merge into t_road_pre_parameter a using (select 1 from dual ) b 
    on (a.TIME_SEGMENT=? and a.ROAD_ID=? and a.RS_INDEX=? and a.FLAG=1) 
    when matched 
    then update set a.week_num=?, a.temperature = ?, a.if_rain = ?, a.if_fog = ?, a.if_snow = ?, a.if_holiday = ? 
    when not matched 
    then insert (TIME_SEGMENT, ROAD_ID, RS_INDEX, week_num, temperature, if_rain, if_fog, if_snow, if_holiday, FLAG) values (?,?,?,?,?,?,?,?,?,?)

    MySQl for Tmall

    create table train_item (  
        item_id varchar(64), 
        item_geohash varchar(64),
        item_category varchar(64),
        primary key (item_id)  
    );  
    
    
    #载入外部的CSV文件
    load data infile 'D:\Tmall\tianchi_mobile_recommend_train_item.csv'
    into table `site`
    fields terminated by ',' optionally enclosed by '"' escaped by '"'
    lines terminated by '
    '; 

    *取得重复的最大值,控制内循环的数量,推荐*/ 

    select KPI_TIME dateTime, KPI_NOPERMANENT passengerFlow
       from (select KPI_TIME, max(to_number(KPI_NOPERMANENT)) KPI_NOPERMANENT
               from (select KPI_TIME, KPI_NOPERMANENT
                       from t_kpi_ykrs
                      where rownum < 100
                        and to_char(kpi_time, 'yyyy-mm-dd hh24:mi:ss') <=
                            '2015-09-20 12:25:00'
                        and kpi_area = 14100
                        and kpi_code = 'YKRS_01'
                      order by kpi_time desc)
              group by KPI_TIME
              order by KPI_TIME desc)
      where rownum < 21
      order by kpi_time asc

    SQL去除重复

    Distinct,用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同)
    (1)取一个字段,去除重复项。假设要id这个字段的值:
           select distinct name from t1;   --能消除重复记录,缺点:但只能取一个字段;distinct关键字会排序,效率很低     
    (2)取多个字段,去除重复项。假设要同时取id,name这2个字段的值:   
            select distinct id,name from t1; --可以取2个字段,但只能消除这2个字段值全部相同的记录
    
      所以用distinct无法达到同时取多个字段并去重其中一个字段。用group by可以解决这个问题。
    (3)取多个字段并去重其中一个字段。例如要显示的字段为A、B、C三个,而A字段的内容不能重复可以用下面的语句:
        select A, min(B),min(C),count(*) from [table] where [条件] group by   A  having [条件] order by A desc;
    为了字段名显示明了,可以把
        select A, min(B),min(C),count(*)
    换成
        select A as A, min(B) as B,min(C) as C,count(*) as 重复次数
    显示出来的字段和排序字段都要包括在group by 中
    但显示出来的字段包有min,max,count,avg,sum等聚合函数时可以不在group by 中
    如上句的min(B),min(C),count(*)
    一般条件写在where 后面
    有聚合函数的条件写在having 后面
        如果在上句中having加 count(*)>1   就可以查出记录A的重复次数大于1的记录
        如果在上句中having加 count(*)>2   就可以查出记录A的重复次数大于2的记录
    ☆如果在上句中having加 count(*)>=1   就可以查出所有的记录,但重复的只显示一条,并且后面有显示重复的次数
    ----这就是所需要的结果,而且语句可以通过hibernate
    下面语句可以查询出那些数据是重复的:
         select [字段1],[字段2],count(*) from [表名] group by [字段1],[字段2] having count(*) > 1;
    将上面的>号改为=号就可以查询出没有重复的数据了。例如找出没有重复的gkrq字段值的记录:
        select count(*) from (select gcmc,gkrq,count(*) from gczbxx_zhao t group by gcmc,gkrq having  count(*)>=1 order by GKRQ);
    推荐使用:
        select * from gczbxx_zhao where viewid in ( select max(viewid) from gczbxx_zhao group by gcmc ) order by gkrq desc;
     
     例子2:
    SELECT ROWID,EMPNO,JOB FROM EMP
      WHERE ROWID!=(SELECT MAX(ROWID) FROM EMP D
      WHERE  EMP.JOB=D.JOB)
    ORDER BY JOB;
    
    举例解释: 
    假设现在EMP表有三条记录,分别为a(rowid=1),b(rowid=2),b(rowid=3)。(b存在重复) 
    那么where语句中, 
    对于记录a来说,只有一条记录,其rowid为1,而关联的D的max(rowid)也为1,由于1=1,所以条件不成立,记录a不会被检出; 
    对于记录b来说,由于存在2条记录,rowid分别为2和3,而关联的D的max(rowid)也为3(2小于3),所以rowid为2的记录满足条件(2<>3),rowid为2的b记录会被检出,rowid为3的记录不会被检出。 
    故对于以上,查询结果就是b(rowid=2)。 
    
    总结:此语句对于任何存在件数为n(n>=1)的记录来说,必将有n-1条记录被检出。

    Oracle中替代变量(动态参数)的使用

    1. &变量名/&&变量名
    &变量名, 执行sql时如果&变量名没有赋值,会提示输入变量值;
    &&变量名, 对输入变量的再次引用,有隐式的define动作,会保存变量的值,因此当脚本中再次出现&变量名时,会以之前输入的值替代。
    备注:
    1)可使用set verify off来关闭替代变量使用时的提示,即执行SQL语句前不显示使用的变量值
    2)对于字符型数据,替代变量要用单引号' '括起来,也可使用如下方式,
      set define character    --修改缺省的替代变量符号为字符(不能使用数字和空格)
    3)启用和禁用替代变量
      set define on    --启用替代变量
      set define off--关闭替代变量
    
    2. accept定义替代变量
    格式:accept 变量名[prompt 正文][HIDE]
    accept id prompt 'Please input id:'
    accept id prompt 'Please input id:' hide --不回显输入值
    
    3. DEFINE定义变量
    define id=12345
    select * from item where id=&id;
    备注:
    可使用DEFINE命令查看变量,如,
    define --查看所有定义变量
    define varname --查看varname
    Oracle中替代变量(动态参数)的使用
  • 相关阅读:
    sparql学习sparql示例、dbpedia在线验证
    中国绿卡
    逾期率的水有多深,你知道吗?
    ICO和区块链区别
    What are the benefits to using anonymous functions instead of named functions for callbacks and parameters in JavaScript event code?
    Link static data in sql source control
    sql data compare
    viewbag
    多态的实际使用
    win10 sedlauncher.exe占用cpu处理
  • 原文地址:https://www.cnblogs.com/hdu-2010/p/4391093.html
Copyright © 2011-2022 走看看