oracle中 字符区分大小写,SELECT时要注意;
oracle中,日期区分格式;
默认时间格式:DD-MON-RR;
ALTER SESSION SET NLS_LANGUAGE = AMERICAN;使当前会话进入英文环境。
ALTER SESSION SET NLS_LANGUAGE = 'SIMPLIFIED CHINESE';使当前会话进入中文环境。
当WHERE中的条件时日期时,要注意当前会话的时间格式;
SELECT *
FROM employees;
WHERE job_id LIKE 'AD/_%' ESCAPE '/'; 转义字符;
oracle中判断是否为空 不是使用 manager_id =null
而是使用 manager_id is null;
查询时,like模糊查询区分大小写;
别名时(一般情况不用双引号)如果别名中有空格,特殊符号,区分大小写时用双引号,别的情况都用单引号
还有个用双引号的情况:日期格式化的时候,''中的字符串描述
NOT BETWEEN AND
NOT IN
NOT LIKE
IS NOT NULL
SELECT last_name ,job_id,salary
FROM employees
WHERE job_id ='sa_rep'(注意大小写)
or job_id ="ad_dasdf"
ORDER BY +列名,总在语句最后
默认升序asc,列名1可接多个 列名,先按第一列排序,再按照后面的列排序
order by 后的列可以是select中的列名不存在的列名;
ORDER BY HEIR_DATE DESC; 降序排序
排序可以写列别名
SELECT salary*12 annsal
FROM employees
ORDER BY annsal;
where语句中不能写列别名
执行顺序
3.SELECT
1.FROM
2.WHERE
4.ORDER BY
先执行where,后执行SELECT 因此不能用列别名
内存中,所有的列可见 order by 可以用select中没有的列
表别名
联合查询时,可以用表别名,SELECT里必须用别名.列名;
下午
1 sql函数
字符函数
LPAD RPAD ,字符的左右端对齐,lpad(salary或者表达式,10,‘×’)
TRIM,去掉最左边,最右边的字符,不止空格
LOWER,全小写
UPPER 全大写
CONCAT 链接字符串
SUBSTR(‘helloworld’,1,5) hello 1代表其实位置,5代表步长
LENTH 求长度
INSTR 求位置,返回整型
TRIM,只能去掉最左端最右端的字符
数字函数
ROUND 四舍五入 ROUND(545.926,2) 545.93 正数代表小数点后几位 0代表个位,负数以此类推
TRUNC 直接舍去 别的同上 。
MOD 取余
处理日期
Oracle存储日期的内部数字格式:世纪,年,月,日,时分秒
默认格式 DD-MON-RR 日月年 RR和YYYY的区别。
SYSDATE返回当前的系统时间 。
小时的计算 一小时1/24天
日期函数:
MONTHS_BETWEEN 2个参数,第一个参数大日期,第二个参数小日期,求出相差几个月
ADD_MONTHS 第一个日期上加上第二个日期的,返回月
NEXT_DAY 下一个星期几是几号
LAST_DAY 指定日期所在月的最后一天
ROUND 四舍五入日期
TRUNC 舍去
转换函数
分为隐性转换,显性转换。
implicit data type conversion
隐性转换比较耗资源;
四种连接
cross join 生成笛卡尔积
Natural Joins所有同名列 连接 等价连接
当同名列的数据类型不一致时 会报错
通用函数
NVL(1,2)第一个函数为空输出第二个字符串,如果不为空输出本身;
NVL2(1,2,3)第一个参数不为空时输出第二个参数,如果为空输出第三个参数
NULLIF(1,2)如果不相等输出第一个值,否则输出空值
COALESCE(1,2,3,4,。。。。N个参数) 输出第一个不为空的参数
自连接, 一个表2个别名
多表连接时,跟别的表的联系最大的表,写在最后。效率高一点。