无论MySQL/SQL server/还是Oracle 关系型数据库嘛、赶脚语法都差不多但是也各有千秋,所以不说废话了,总得来说学习成本不是很高
SQL执行顺序
from where group by having select rownum order by
笛卡尔积:两张表的乘积
DECODE函数:特有函数计算方式 ***
语法:【百度一下科】
DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1;如果value等于if2,Decode函数结果是then2;等等。事实上,可以给出多个if/then 配对。如果value结果不等于给出的任何配对时,Decode 结果就返回else 。
DECODE(VALUE,'0','1','2')"row_name"
若value为0,则为1,否则为2,此值被展示在row_name列
连接:特此说明外连接
左外连接:left join 左表中所有记录,如果右表无对应记录则显示空(笛卡尔积基础上 自己的理解);右同左
子查询:
注意null值,where语句限制,创建时not null
exists:
rownum:系统自动生成的一列,标识行号
oracle特有,起始值1(查询出结果后+1);最好不要做大于号判断
rowId:每行记录所存放的真实物理地址
case when语句:
计算条件列表并返回多个可能结果表达式之一【源】
CASE
WHEN Boolean_expression THEN
result_expression [...n ] [
ELSE
else_result_expression
END
简单来说和代码用到的CASE是一样的
SELECT
CASE
WHEN parent_id < 3 THEN
'<3'
WHEN parent_id >= 3
AND parent_id < 5 THEN
'>=3 && <5'
ELSE
'>=5'
END AS parent_id_new ,
count(*) AS num_count ,
parent_id ,
type_id ,
type_name
FROM
tdb_goods_types
GROUP BY
parent_id_new
ORDER BY
num_count
转换函数:【源】
to_date():将字符串类型按格式转化为日期类型
YYYY:四位表示的年份
YYY,YY,Y:年份的最后三位、两位 一位,缺省为当前世纪
MM:01~12的月份编号
MONTH:九个字符表示的月份,右边用空格填补
MON:三位字符的月份缩写
WW:一年中的星期
D:星期中的第几天
DD:月份中的第几天
DDD:年中的第几天
DAY:九个字符表示的天的全称,右边用空格补齐
HH,HH12:一天中的第几个小时,12进制表示法
HH24:一天中的第几个小时,取值为00~23
MI:一小时中的分钟
SS:一分钟中的秒
SSSS:从午夜开始过去的秒数
to_date('2018-07-29 13:34:43', 'yyyy-mm-dd hh24:mi:ss')
24小时格式下时间范围为: 0:00:00 - 23:59:59....
12小时格式下时间范围为: 1:00:00 - 12:59:59 ....
to_char():将日期转按一定格式换成字符类型
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') time from dual;
1、next_day函数
next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。
2、add_months()用于从一个日期值增加或减少一些月份
select add_months(sysdate,12) "Next Year" from dual;
3、months_between()判断两个日期之间的月份数量
TO_NUMBER函数将字符转换为数字
count(1):1查询的表里的第一个字段
集合运算
差集: minus结果相减(不包含)
(运算中多个sql语句)列的类型一致,按顺序写、(查询)列的数量一致 如果没有*列 空值会对应类型的*
交集:union 去除重复并排序 union all不会去除重复的
优化:
1、关于count(1)/count(*)count(列名)的区别【源】
count(*) count(列名) 消耗资源是一样的,但是他们不是等价的:count(*)针对全表,count(列)针对一列、如果列值为空则不会统计这一行;
列的偏移量决定性能,列靠后、开销大;count(*)算法与列偏移量无关,所以最快
越常用的列,越靠前
oracle子查询实现分页