函数和多表查询

2019-04-02  本文已影响0人  她与星河皆遗憾

-- 利用查询建表(只继承结构和数据,不继承约束)

create table sj_new as select * from sj;

-- 建一张空表

create table sj_new as select * from sj 
where 1=0;

常用函数

-- 虚表 dual
--abs()绝对值

select abs(-19) 绝对值 from dual;

-- round(x,y)

将x精确到小数点后y位,y如果是0表示四舍五入
select round(99.12,2) 精确值 from dual;

-- truncate(x,y)

截断到小数点y位,之后清0
select truncate(99.12,2) 精确值 from dual;

-- substring(str,pos,length)

str操作的字符,pos是位置开始,length世截取的长度
-- 也不能截取时间
select substr('helloworld',1,3) from dual;

-- 查询姓名以S开头的员工信息
select * from emp where substr(ename,1,1) = 's';

-- length

查寻长度 
select * from emp where length(ename) = 5;

涉及表是一张两上,两张表就会自动发生连接
连接规则:笛卡尔积,一张表所有记录与另一张记录全部匹配的情况
-- ①同名列必须加表名作为前缀。
-- ②涉及一张以上表,别丢下连接条件,否则笛卡尔积
-- ③表名也可以起别名,方便写前缀
-- join..in 连接用

select ename,dept.deptno,comm from emp
join dept 
on emp.deptno = dept.deptno
where local = 'CHICAGO';

-- 自连接

select e.ename,m.ename,e.mgr,m.empno from emp e
join emp m 
on e.mgr = m.empno;

日期函数
-- curdate()和current_date():获取当前日期函数
-- now():返回服务器的当前日期时间

select curdate(),current_date(),now() from dual;

-- date_format(date,format):日期格式化

-- %Y -- 年份
-- %m -- 月份
-- %d -- 日
-- %h -- 时
-- %i -- 分
-- %s -- 秒
select date_format(now(),'%Y-%m-%d %h:%i:%s') from dual; 

-- datediff(大的日期,小的日期)

返回两个日期相减相差的天数
select hiredate,datediff(curdate(),hiredate) as 相差天数 from emp;

-- extract(year,from,年份)

提取时间 年月日
select hiredate,extract(year from hiredate) from emp;

-- timestampdiff(month,年份1,年份2)
按照(年或月或日)求差

流程控制函数

-- case..when .. then

-- 查询员工姓名,工资,部门编号,部门名称
select ename,sal,deptno,
(case deptno when 10 then '开发部'
when 20 then '实施部'
when 30 then '测试部'
else '小卖部' end) dname from emp;
上一篇 下一篇

猜你喜欢

热点阅读