Oracle零碎要点---多表联合查询,收集数据库基本资料(二)
tle from s_emp;
dept_id与title的联合不唯一
注意:distinct,关键字之后会对from之前的字段进行排重操作。
6、column命令 --- sqlplus命令
column命令 列格式的定义
column 目标列名 查看这个类是否定义了格式
column 目标列名 format a.. 设置列宽。
column last_name heading 'Employee|Name' FORMAT A15
设置题头
这其中的'|'是换行符
column salary justify left format $99,990.00
定义数字显示格式
注意:如果不满足显示的格式,就会把数据显示为"#"
column salary justify left format $00,000.00
会出现$00,928.00 ,用0补齐
column 列名 clear (清除列格式定义)
注意:只有sqlplus命令才有简写,并且在使用sqlplus命令时结尾也不能加分号。
六、选择操作
1、order by
排序子句 ASC(默认,升序) DESC(降序)
order by 目标列名(别名) 排序顺序(不写排序顺序,会默认为升序排序)
例:select first_name from s_emp order by first_name;
select first_name from s_emp order by first_name desc;
注意:升序空值在结果的末尾,降序空值在结果的最前面。
2、where子句
where子句使用在 select ... from ... 后面,用来选择所需(符合条件的)的记录
where后面跟的是表达式 也就是 XXX=XXX, XXX between X and X ,XXX in(X,X,X)
like '...' 通配查询
between ... and ... ,表示结果在这之间,between and是一个闭区间,
也就相当于... <= ... and ... >= ... 。
!=,<>,^=,这三个都标识不等于,<=,>=,=,这些运算符都可以使用。
... in (va1,val2,...) 判断结果是否在这个枚举中存在
like '...' 字符串通配查询,'%'表示多个字符,'_',表示一个字符。
注意:转义的用法:like ‘S\_%’ escape ‘\’
... and ... 表示只有两个条件同时满足
... or ... 表示条件只要满足其中只一就可以
all ... 是要求都满足条件。
not .....,则是可以与以上的条件产生反效果。
空值会对not in造成影响,也就是不等于任何值,但是空值例外。
... is null 使用来判断值是否为空。
注意:Oracle中的字符串是严格区分大小写的。
(1)注意数据类型,数字类型直接写,字符用'......' ,缺省格式的Date可以用'......',只有别名
才用" "包含。
(2)选择合适的运算符
七、单行函数
1.字符函数
字符是大小写敏感的
转小写 lower(字段名) --- 其中的参数可以是一个字符串常量或是一个字段名
转大写 upper(字段名)
字符串拼接 concat(字段1, 字段2)
截取子串 substr(字段名, 起始位置,取字符个数)
dual表,是专门用于函数测试和运算的,他只有一条记录
字符串拼接 concat(...,....)
求指定子串 substr(...,起始位置,取字符个数)
可以使用"-"表示从右向左取,取的时候可以从左往友取。
例:select substr(first_name,-2,2) sub from s_emp;(第二位开始取取两个)
select substr(first_name,2,2) sub from s_emp;(倒数第二位开始取取两个)
select substr(ename,2,2),substr(ename,-3,2),ename from scott.emp
select concat(initcap(ename),deptno) from scott.emp;
2,数值函数
四舍五入 round(数据,保留小数点后几位)
可以用负数表示小数点前,0,表示小数点后第一位,也就是保留个位,-1表示个位(保留到十 位)。
例:select round(15.36,1) from dual;---15.4
select round(15.36,0) from dual;---15
select round(15.36,-1) from dual;---20
截取数字函数 trunc(数据,保留的位数(小数点后位数)) 截取个位之后补0
例:select trunc(123.456,1) from dual; ---123.4
3,日期函数
日期格式,
全日期格式 世纪信息,年月日,时分秒。
缺省日期格式,日-月-年 dd-mon-rr
修改当前会话的日期格式,会按照指定的格式输出日期
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
返回当前日期 sysdate
例:select sysdate from dual;
select sysdate+1 from dual; 获得明天的日期,加1,单位是天
日期是格式敏感的
求两个日期间相隔了多少个月 months_between(date1,date2)
select months_between(sysdate,sysdate+61) from dual;
加减指定数量的月份 add_months(date,月数),月数可以为负,负值就是减去相应的月数。
从date日期开始的第一个星期五 next_day(date,FriDay)
返回月末的日期 last_day(date)
截取日期 trunc(date,'年或月或日或时分秒')
例:select next_day(sysdate,1) from dual;---1 星期日 2 星期一。。。。。。7 星期六
例:select trunc(add_months(sysdate,1),'month') from dual;
ROUND('25-MAY-95','MONTH') 01-JUN-95
ROUND('25-MAY-95 ','YEAR') 01-JAN-95
TRUNC('25-MAY-95 ','MONTH') 01-MAY-95
TRUNC('25-MAY-95 ','YEAR') 01-JAN-95
select trunc(sysdate,'day') from dual
select TRUNC('25-MAY-95','YEAR') from dual
练习:
返回下个月的第一天的日期
select round(last_day(sysdate),'MONTH') from dual;
select add_m