工作中常用sql常用语句整理

1,oralce表添加索引sql       my_taxrate_index 索引名字     xxx 表名       taxrate 建立索引的表字段
create index my_taxrate_index on xxx(taxrate)

2,mysql如果想查看执行计划,,,在sql语句前加上explain即可
EXPLAIN PLAN FOR    oracle加此来看执行计划

3,oracle中(+)的意思
select * from operator_info o, group_info g  where o.group_id = g.group_id(+);
  理解:    + 表示补充,即哪个表有加号,这个表就是匹配表,另一表为基表。
所以加号写在右表,则左表就全部显示,右表满足条件的才能显示,故是左连接。反之亦然!

4,Oracle to_char函数的功能是将数值型或者日期型转化为字符型
如日期转换
TO_CHAR (
    t2.updateTime,
    'yyyy-mm-dd hh24:mi:ss'
),

5,Oracle的substr函数简单用法
substr(字符串,截取开始位置,截取长度) //返回截取的字
substr('Hello World',0,1) //返回结果为 'H'  *从字符串第一个字符开始截取长度为1的字符串
substr('Hello World',1,1) //返回结果为 'H'  *0和1都是表示截取的开始位置为第一个字符
substr('Hello World',2,4) //返回结果为 'ello'
substr('Hello World',-3,3)//返回结果为 'rld' *负数(-i)表示截取的开始位置为字符串右端向左数第i个字符

6,sql 判断语句语法,

数据库查询判断
select
CASE 
  WHEN o.type=1 THEN 'aaa'
  WHEN o.type=2 THEN 'bbb'
  WHEN o.type=3 THEN 'ccc'
END
from ...

7,oracle分页查询的通用格式   其中(select * from xxx) a   这个是我们要查询的条件组合,外层套用固定格式即可
select * from (select a.*,rownum r from (select * from xxx) a where rownum < 10) where r>5

8,oracle查询时间条件
and CREATEDATE > TO_DATE('2019-05-06 10:13:28','yyyy-mm-dd hh24:mi:ss') and CREATEDATE < TO_DATE('2019-05-25 10:13:28','yyyy-mm-dd hh24:mi:ss')

9,查询当天sql
select * from f_order_info where TO_DAYS(time(数据库字段名))=TO_DAYS(NOW())

10, where针对表中的列发挥作用,查询数据
having对查询结果中的列发挥作用,筛选数据
  #查询本店商品价格比市场价低多少钱,输出低200元以上的商品
 select goods_id,good_name,market_price - shop_price as s from goods having s>200 ;
 //这里不能用where因为s是查询结果,而where只能对表中的字段名筛选
  如果用where的话则是:
 select goods_id,goods_name from goods where market_price - shop_price > 200;

11,mysql创建视图
CREATE VIEW 视图名 AS SELECT 查询语句

12,sql语句查询最近七天 三十天 数据
几个小时内的数据
DATE_SUB(NOW(), INTERVAL 5 HOUR)
今天
select * from 表名 where to_days(时间字段名) = to_days(now());
昨天
SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ) - TO_DAYS( 时间字段名) <= 1
7天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(时间字段名)
近30天
SELECT * FROM 表名 where DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= date(时间字段名)
本月
SELECT * FROM 表名 WHERE DATE_FORMAT( 时间字段名, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )
上一月
SELECT * FROM 表名 WHERE PERIOD_DIFF( date_format( now( ) , '%Y%m' ) , date_format( 时间字段名, '%Y%m' ) ) =1

13,sql比较时间可直接字符串比较,不需要转化格式
WHERE tif.time >= '2018-06-01' AND  tif.time <'2018-07-01'

14,on的条件是在连接生成临时表时使用的条件,以左表为基准 ,不管on中的条件真否,都会返回左表中的记录
where条件是在临时表生成好后,再对临时表过滤。此时 和left join有区别(返回左表全部记录),条件不为真就全部过滤掉,on后的条件来生成左右表关联的临时表,
where后的条件是生成临时表后对临时表过滤
左连接left join 条件过滤on,和where的区别

15,%Y-%c-%d %h:%i:%s
DATE_FORMAT(teu.use_time,'%Y-%c-%d %h:%i') = DATE_FORMAT(tif.time,'%Y-%c-%d %h:%i')  mysql格式化时间

16,mysql常用命令
net start mysql
net stop mysql
mysql -u root -p   登录命令
quit 退出操作数据库
修改密码
格式:mysqladmin -u用户名 -p旧密码 password 新密码     
例子:mysqladmin -uroot -p123456 password 123 

17,select * from user_indexes where table_name=upper('表名')   oracle查看表建立的索引

18,   SELECT * FROM 表名 WHERE INSTR(’张三是个好学生’,name)>0

查询name字段包含于‘张三是个好学生‘的数据

19,sql分段统计

SELECT
    COUNT(1),
    count(case when UPLOADSTATUS=0 then '1' end)
FROM
   表名
WHERE
stnCode = '12345678'

20,

oracle数据库一个表多个字段值更新到另一个表语法

UPDATE 表1 pi
SET (
    pi.字段1,
    pi.字段2,
    pi.字段3,
    pi.字段4,
    pi.字段5
) = (
    SELECT
        表2.字段1,
        表2.字段1,
        表2.字段1,
        表2.字段1,
        表2.字段1
    FROM
        表2
    WHERE
        表1.条件 = 表2.条件
)
WHERE

//表1为主表,如果不加下面exists语句,表1存在的行表2没有的话那么set语句会把表1需要更新的字段置为null,所以加上如下语句后表1有的数据表2没有的话exists返回false不更新表1字段
    EXISTS (
        SELECT
            1
        FROM
            表2 as bbb
        WHERE
            bbb.条件 = 表1.条件
    )

21,oracle 判断表中某个字段是否是数字类型

select * from table where not trim(translate(nvl(字段名,'x'),'0123456789',' ')) is NULL;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值