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;