开发过程中常见的一些SQL整理




Oracle数据库的集合操作:
UNION:并集,所有的内容都查询,重复的显示一次;
UNION  ALL:并集,所有的内容都显示,包括重复的;
INTERSECT:交集,只显示重复的;
MINUS:差集,只显示对方没有的(跟顺序没有关系)

随机返回五条记录:
oracle数据库中随机查询数据:
 select * from (select * from tablename order by sys_guid()) where rownum < N; 
 select * from (select * from tablename order by dbms_random.value) where rownum< N; 
 select *  from (select * from table_name sample(10)   order by trunc(dbms_random.value(0, 1000)))  where rownum < N;
DB2数据库中随机查询五条数据:
select * from A order by rand() fetch first 5 rows only

处理空值排序:
select * from 表名 order by comm desc nulls last(first);

查询跳过表中的偶数行:
select 字段  from (select row_number() over (order by 字段) rn ,字段 form 表名 )xx where  mod(rn,2)=1;

连续求和:
select 字段1,字段2 sum(字段2) over(),sum(字段2) over(order by 字段1) from  表名;
sum(字段2) over(order by 字段1) 指的是连续求和,按照字段1来排序,若有两个这样的窗口函数以后面的排序为主。

得到当前行上一行或者下一行的数据:
select 字段1,字段2,lead(ziduan2) over (order  by ziduan2) aaa,lag(ziduan2) over (order by ziduan2)bbb form 表名;
 

查询表中所有的字段列
select * from all_tab_columns where table_name='t_cap_login_flag_info';

列出表的索引列:
select * from sys.all_ind_columns where table_name='t_cap_login_flag_info';
select * from sys.all_ind_columns where upper(table_name)='t_cap_login_flag_info';

列出表中约束:
select * from all_constraints where table_name='t_cap_login_flag_info';

在Oracle中描述数据字典视图:
select table_name ,comments from dictionary where table_name like '%TABLE%'

使用子查询创建表:
create table 表名2 as select * from 表名1;
create table 表明2 as select * from 表明1 where 字段;

级联删除:

根据条件修改某张表的交易时间为指定的交易日期:
update T_CIF_GROWTH_CAL_LIST t set t.txn_time=to_date('2017-06-07','yyyy-mm-dd') where t.biz_type='01';

AAA:ALTER  添加   修改  删除表的列 约束等表的定义:
查看列:DESC 表名;
修改表名:alter table t_book rename to bbb;
添加列:alter table 表名 add column 列名 varchar(30);

oracle添加列:不要column
alter table t_bpf_sys_unit add  HS_LPRENCD_ VARCHAR2(64) ;
oracle修改列:
alter table 表名 modify 字段 varchar2();
oracle删除列:
alter table 表名 drop column 字段;
清空表中数据:
truncate table 表名;
重命名表:
rename 表名 to 表名1;

删除列:alter table 表名 drop column 列名;
修改列名Mysql:alter table bbb change nnnnn hh int;
修改列名Oracle:alter table bbb rename column nnnnn to hh  int;

BBB:数据库截取其中某一个字符串的的下标位作为查询条件
select parm_level_bit,substr(t1.parm_level_bit,1,1),substr(t1.parm_level_bit,2,1),substr(t1.parm_level_bit,3,1) from t_bpf_param_conf t1 where parm_id = 'PAY_AA_MAX_AMT'

CCC:-上级获得下级的递归机构信息
 select * from lk_sysorg org start with org.orgcode='610610000' connect by PRIOR org.orgcode=org.suporg order by org.suporg;

DDD:-下级获得上级的递归机构信息
 select * from lk_sysorg org start with org.orgcode='610647536' connect by PRIOR org.suporg=org.orgcode order by org.suporg;

EEE:递归查询
select UNIT_CODE_ from SYS_UNIT   start with unit_code_='27090509' connect by PRIOR unit_code_ = parent_ order by unit_code_;


FFF:采用foreach循环遍历list字段的值
<select id="liqDetailAmtClrHigSubject" parameterType="java.util.Map"
    resultMap="BaseResultMap">
        select a.ACT_BRCH_NO,a.acct_date,a.clr_bat_no,a.bank_no,a.ccy,sum( case when a.DC_FLAG='C' then -a.TXN_AMT
                                 else a.TXN_AMT end ) as "txnAmt" from t_act_liq_detail a,t_act_pub_org b
        where a.clr_bat_no = #{batchNo}
         and a.acct_date = #{preAcctDate}
         and a.ACT_BRCH_NO = b.ORG_NO 
        and b.BANK_LVL = #{bankLvl}
        and SUBSTR(a.act_no,9,6 ) in
      <foreach collection="listActNo" index="index" item="item" open="(" separator="," close=")">
         #{item}
         </foreach>
     group by a.ACT_BRCH_NO,a.acct_date,a.clr_bat_no,a.bank_no,a.ccy
 </select>

GGG:db2数据库以某个字段不等于什么作为查询条件的事例:
不等于:<>
select * from USR.T_CIF_REG_INFO t where t.USER_STAT <>'06';
 

HHH:数据库清表语句:
truncate table 表名
III:查询数据表中重复的数据:
select distinct 字段名  from   表名;
JJJ:用order  by  关键字对查询结果进行排序
select * from 表名 order by 字段 【ASC】/[DESC]
KKK:单独使用group by关键字,查询结果每组只显示一条记录。
select 字段1,字段2,字段3  from 表名 group by 字段1;
LLL:用limit限制查询结果的数量
select * from 表名 order by 字段  asc limit 3;
MMM:可以查询出来所有的空表
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
NNN:查询单个字段中值含0且字段值长度不一致时查询最大值   
SELECT MAX(CAST(t.SCENCE_ID AS SIGNED)) SCENCE_ID from T_FEE_POIFEE_SCENCE t
OOO:数据库用户解锁命令
[oracle@IBP28 ~]$ sqlplus system/fxdemon#2017
SQL> alter user usr account unlock;
PPP:日期字符串互转
-日期转字符串
select date_format(REMOV_DATE,'%Y-%m-%d') from  T_AMS_RELATE_ACCTLIST_NXY
--字符串转日期
select str_to_date('20170619','%Y-%m-%d') from  T_AMS_RELATE_ACCTLIST_NXY

QQQ:修改表所对应的表空间 
alter table fsds.arear move tablespace tbs_data_fsds

RRR: 导入导出库  
导入全库:
imp username/password@SID file=XXXX.dmp full=y
导入某个表:
imp username/password@SID file=xxx.dmp fromuser=xx touser=xx tables=(tablename)
注:fromuser:源用户。Touser:目标用户。 Tables:要导入的表名,多个可以用,号隔开。
导出全库:
exp   username / password  file=xxx.dmp
导出某个表:
exp   username / password   tables=( tablename)   file=xxx.dmp
exp cbrc/cbrc@ORCL tables=(lgt_test) file=F:\sxnx2\orcldata\lgttest.dmp
注:Tables:要导出的表名,多个可以用,号隔开。

SSS:快速把一张同结构的表的数据插入到另一张表中

insert into t_bpf_sys_unit_1018 select * from t_bpf_sys_unit;

SELECT DISTINCT DEPTNO FROM EMP;  --去重

3、NVL函数
(1)NVL(x,value)  --如果x为空,返回value,否则返回x。
   (2)NVL2(x,value1,value2) --如果x非空,返回value1,否则返回value2。

--将列字符串转换成行并用,号隔开
select listagg(dictname, ',') dictname from (select * from pa order by rank )


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
列举了SQL语句大部分常用的函数 Abs(number) 取得数值的绝对值。 Asc(String) 取得字符串表达式的第一个字符ASCII 码。 Atn(number) 取得一个角度的反正切值。 CallByName (object, procname, usecalltype,[args()]) 执行一个对象的方法、设定或传回对象的属性。 CBool(expression) 转换表达式为Boolean 型态。 CByte(expression) 转换表达式为Byte 型态。 CChar(expression) 转换表达式为字符型态。 CDate(expression) 转换表达式为Date 型态。 CDbl(expression) 转换表达式为Double 型态。 CDec(expression) 转换表达式为Decimal 型态。 CInt(expression) 转换表达式为Integer 型态。 CLng(expression) 转换表达式为Long 型态。 CObj(expression) 转换表达式为Object 型态。 CShort(expression) 转换表达式为Short 型态。 CSng(expression) 转换表达式为Single 型态。 CStr(expression) 转换表达式为String 型态。 Choose (index, choice-1[, choice-2, ... [, choice-n]]) 以索引值来选择并传回所设定的参数。 Chr(charcode) 以ASCII 码来取得字符内容。 Close(filenumberlist) 结束使用Open 开启的档案。 Cos(number) 取得一个角度的余弦值。 Ctype(expression, typename) 转换表达式的型态。 DateAdd(dateinterval, number, datetime) 对日期或时间作加减。 DateDiff(dateinterval, date1, date2) 计算两个日期或时间间的差值。 DatePart (dateinterval, date) 依接收的日期或时间参数传回年、月、日或时间。 DateSerial(year, month, day) 将接收的参数合并为一个只有日期的Date 型态的数据。 DateValue(datetime) 取得符合国别设定样式的日期值,并包含时间。 Day(datetime) 依接收的日期参数传回日 ....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值