- sql中求并集,交集,全集和差集。
A集合:
select * from emp where deptno = 30;
B集合:
select * from emp where sal > 1000;
并集:将两个集合数据全显示,去重。A Union B
全集:两个集合数据全显示,不做去重。A Union all B
交集:两个集合中交叉的数据。 A intersect B
差集:包含在A集合,不包含在B中。A minus B ,跟AB集合顺序有关,谁在前面包含在谁里面
- sql函数
sql函数一般是在数据上执行的,它给数据的转换和处理提供了方便,只是将取出的数据进行处理,不改变库中的值。输入(arg1,arg2,...)-->函数任务-->输出结果。
sql函数可分为组函数和单行函数:
1. 组函数又被称为聚合函数,用于多行数据进行操作,并返回一个单一的结果,组函数仅可用于选择列表或查询的having自居。(输入多个值,输出一个值)。
2.单行函数对单个数值进行操作,并返回一个值。(输入一个值,输出一个值。)
- 函数测试:
--查询所有员工的薪水总和。
select sum(sal) from emp;
--查看表中又多少条记录,having条件大于3。
select count(*) from emp group by deptno having count(*)>3;
- 字符函数:concat字符串拼接,等同于||
select concat('my name is',ename) from emp;
--将字符串首字母大写 initcap(ename)
--字符串全部大写 upper(ename)
--字符串全部小写lower(ename)
--填充字符串:
左补齐lpad(ename,10,'*');//*****soctt,不够的话左面补齐。总长度为10。
右不起rpad(ename,10,'*');//scott*****,右面补齐。总长度为10。
--去除空格:trim(ename);左右两边都去除。ltrim()左,rtrim() 又。
--查找指定字符串的位置:
select instr('ABABCD','A') from emp;//返回1,第一个出现的位置
--查看字符串长度:length(ename);
--截取字符串:substr(ename,0,2);//从0截取,截取两位长度。
--替换字符串:replace('abcde','ab','hehe');//返回hehecde
- 数值函数:
--对小数进行四舍五入round,可指定小数部分的位数
select round (123.123,2)from dual;//123.12
select round (123.456,2) from dual;//123.46
--截断数据trunc,对小数位按照位数截取,不会四舍五入。
select trunc (123.128,2) from dual;//123.12
--取模操作:mod(10,4);// 2 mod(-10,4)// -2;
--向上取整:ceil(12.12);//13
--向下取整:floor(12.13);//12
--获取正负值:sign(-100);//1,正数返回1,负数返回-1,0返回0
--x的y次幂:power(x,y);power(10,2);//100
--常量e的y次幂 :exp(y);
--以x为底的对数:log(x,y);
--以e为底的对数:ln(y);
- 时间函数:
select current_time() from dual;--mysql时间
select current_date() from dual;--mysql日期
select current_timestamp() from dual;--mysql日期时间
Oracle以内部数字格式存储日期:世纪,年,月,日,小时,分钟,秒
--当前时间:
select sysdate 无括号from dual;2022/5/22 17:48:00
select current_date from dual;2022/5/22 17:48:00
--返回指定月数后的日期,添加指定月份
select add_months(hiredate,2),hiredate from emp;
//add_months(hiredate,2)1981/2/17;hiredate为1981/4/17,加2月
--返回输入日期所在月份的最后一天
select last_dat(sysdate) from dual;2022/5/31 17:48:00
--返回两个日期间隔的月份
select months_between(sysdate,hiredate) from dual;计算是按照时间的毫秒值计算,返回月数时会带小数。466.3438474
--返回时区的对应时间。NEW_TIME()
--返回四舍五入的第一天
select sysdate 当前日期2022/5/22 17:57:00, round(sysdate)最近0点的日期2022/5/23,
round(sysdate,'day')最近星期日2022/5/22,round(sysdate,'month')最近月初2022/6/1,
round(sysdate,'q')最近季初日期2022/4/1,round(sysdate,'year')最近年初2022/1/1
from dual;
--返回下星期的星期几
select next_day(sysdate,'星期一') from dual; //传中文参数,2022/5/23
--提取日期中的时间
select extract (hour) from timestamp '2001-2-16 2:38:40';//提取小时,结果返回2
(minute)提取分钟38,(second)提取秒40,(day)日16,(month)月2,(year)年2001;
--返回日期的时间戳
select localtimestamp from dual;1-1月-21 11.05.50 47800 上午
select current_timestamp from dual;1-1yue -21 11.07.20 56600 上午