20210809 Oracle 日常

select * from student;

--学生平均年龄
select avg(s.age) 平均年龄 from student s
--学生最大年龄
select max(s.age) 最大年龄 from student s
--学生最小年龄
select min(s.age) 最小年龄 from student s
--学生年龄总和
select sum(s.age) 年龄总和 from student s
--学生总数
select count(*) 学生总数 from student s
--男女学生总人数分别人数
select s.sex 性别,count(*) 总人数 from student s group by s.sex 

select decode(s.sex,1,'男',0, '女') 性别,count(*) 总人数 from student s group by s.sex 

select decode(s.sex,1,'男',0, '女') 性别,count(*) 总人数 ,max(s.age) 最大年龄,
min(s.age) 最小年龄,avg(s.age) 平均年龄,sum(s.age)年龄总和 from student s group by s.sex 


--having 对分完组后从新筛选
--查询不唯一的年龄,having在group by 之后进行条件筛选
select s.age, count(*) from student s group by s.age having count(*)>1 ;

--oder by 根据年龄降序排序  asc升序(默认),desc降序
select s.* from student s order by s.age desc ;

--根据年龄降序排序,年龄相同,在根据编号降序排序

select s.* from student s order by s.age desc,s.id desc ;
--查询唯一的年龄,并按照年龄降序排序
select s.age, count(*)
  from student s
 where 1 = 1 --查询条件
 group by s.age
having count(*) = 1 --分组条件
 order by s.age desc;--排序条件
 
 
 
select * from hr.departments;
select * from hr.employees;
select * from hr.jobs;
select * from hr.locations;
select * from hr.countries;
select * from hr.regions;
 

create table departments as select * from hr.departments;


select * from departments

create table employees as select * from hr.employees;

create table jobs as select * from hr.jobs;

create table locations as select * from hr.locations;

create table countries as select * from hr.countries;

create table regions as select * from hr.regions;


select * from employees;
select * from departments;

--查询所有员工编号,姓名,入职时间,薪资以及部门名称
select e.*,
       d.department_name 部门名称,
       e.employee_id 编号,
       concat(e.last_name, first_name) 姓名,
       e.hire_date 入职时间,
       e.salary 工资
  from employees e, departments d
 where e.department_id = d.department_id;--两张表关联条件

--查询员工编号为110的姓名,入职时间,薪资,部门名称


select e.*,
       d.department_name 部门名称,
       e.employee_id 编号,
       concat(e.last_name, first_name) 姓名,
       e.hire_date 入职时间,
       e.salary 工资
  from employees e, departments d
 where e.department_id = d.department_id and e.employee_id=110;
 
--查询工龄大于20年的员工
select e.* from employees e where ADD_MONTHS(e.hire_date,15*12)< sysdate;


select e.*
  from employees e
 where MONTHS_BETWEEN(sysdate,e.hire_date) > 12*20;

select e.salary 基本工资,
       e.commission_pct 奖金,
       e.salary + e.salary * nvl(e.commission_pct,0) 实际工资 
       from employees e


--统计各个部门的总人数,平均工资,最大工资,最小工资
select e.department_id 部门,
       count(*) 总人数,
       avg(e.salary + e.salary * nvl(e.commission_pct,0)) 平均工资,
       max(e.salary + e.salary * nvl(e.commission_pct,0)) 最大工资,
       min(e.salary + e.salary * nvl(e.commission_pct,0)) 最小工资
  from employees e, departments d
 where e.department_id = d.department_id
 group by e.department_id
 order by e.department_id;

--查询员工姓名字符个数大于10的员工信息
select concat(e.last_name, first_name) 姓名 from employees e 
where length(concat(e.last_name, first_name))>10;

--查询员工编号,员工姓名,直接上级编号,上级姓名
select e.employee_id , concat(e.last_name, first_name) 姓名, e.manager_id
  from employees e, departments d
 where e.department_id = d.department_id;


select e.employee_id 员工编号,
       concat(e.last_name, e.first_name) 员工姓名,
       b.manager_id 上级编号,
       concat(b.last_name, b.first_name) 上级姓名
  from employees e, employees b
 where e.manager_id = b.employee_id
 order by e.employee_id;
 
 --使用inner join内连接查询员工编号,员工姓名,直接上级编号,上级姓名
 select e.employee_id 员工编号,
       concat(e.last_name, e.first_name) 员工姓名,
       b.manager_id 上级编号,
       concat(b.last_name, b.first_name) 上级姓名
  from employees e join employees b on e.manager_id = b.employee_id
 order by e.employee_id;
 
 --使用left outer、join 左外连接员查询工编号,员工姓名,直接上级编号,上级姓名
  select e.employee_id 员工编号,
       concat(e.last_name, e.first_name) 员工姓名,
       b.manager_id 上级编号,
       concat(b.last_name, b.first_name) 上级姓名
  from employees e left join employees b on e.manager_id = b.employee_id
 order by e.employee_id;
 
 
--使用left outer查询员工编号为110的姓名,入职时间,薪资,部门名称


select e.*,
       d.department_name 部门名称,
       e.employee_id 编号,
       concat(e.last_name, first_name) 姓名,
       e.hire_date 入职时间,
       e.salary 工资
  from employees e left join departments d on
  e.department_id = d.department_id and e.employee_id=110;
  
  
  ----------------------------------------------------------------------------------------
--去除重复的行
select distinct employee_id 部门id from employees;
--插入日期类型的值
insert into student(create_time) values('o001', '12-5月-05', 'V002', 'c', '25-5月-05');

--时间点d再加上n个月
select ADD_MONTHS(sysdate,5) from student;
--用于计算x和y之间有几个月
select months_between(sysdate,sysdate) from student;

--返回某个时间值的当月最后一天
select last_day(sysdate) from student;

--返回某个时间值年月日(四舍五入)
select round(2011/8/31) from student;

--用于计算x时间后第一个星期y的时间

select NEXT_DAY(sysdate,5) from student;

--返回某个时间值年月日(直接截取)
select TRUNC(sysdate) from student;
--用于从一个d或者interval类型中截取到特定的部分 

select TRUNC(sysdate) from student;


select extract(year from sysdate) year,
       extract(month from sysdate) month,
       extract(day from sysdate) day
  from dual;

select to_char(sysdate,'yyyy-MM-dd') from dual;


select to_char(sysdate,'Q') from dual;

select to_char(sysdate,'MM') from dual;  


 select to_char(sysdate,'RM') from dual;
 
 --ww 当年第几周
select to_char(sysdate,'ww') from dual;


  --w 本月第几周
select to_char(sysdate,'w') from dual; 

--DDD 当年第几天,一月一日为001 ,二月一日032 

select to_char(sysdate,'DDD') from dual;

select to_char(sysdate,'DD') from dual; --DD 当月第几天 


--首字母大写
select initcap('hello') from dual;

--字母变小写

select lower('FUN') from dual;

--字母变大写
select upper('sum') from dual;

--左删除
select ltrim('xvzadams','xyz') from dual;

--右删除
select rtrim('xvzadams','xyz')from dual;

--删除两头空格
select trim('  xyza  ') from dual;

--翻译字符集别

select translate('jack','ic','12') from dual;

--替换
select replace ('jack and jue','j','bl')from dual

--查找字符位置
select instr('worldwide','d')from dual;
-- 获取子字符串
select substr('abcdefg',3,2) from dual;
--子字符串连接
select concat('Hello','world') from dual;

SELECT LENGTH('frances') FROM dual;

select length('asdfaskfuh asf ') from dual;

select chr(59) from dual;
--去除要移除的字符串
select trim(6 from 9999876789999)from dual;
--lpad函数从左边对字符串使用指定的字符进行填充
select lpad('function',15,'1') from dual;


-- 绝对值
select abs(-15) from dual;
--取大于他最大的整数
select ceil(44.778)from dual;

--取小于他的最大整数
select floor(100.22)from dual;

--计算m的n次方
select power(4,2)from dual;
--求余
select mod(10,3)from dual;
--四舍五入,保留n为小数
select round(1100.446666,2)from dual;
--直接截取,保留n为小数
select trunc(1100.446666,2)from dual;
--开放跟
select sqrt(4) from dual;
--将值从一种数据类型转换为另一种数据类型
SELECT TO_DATE('2005-12-06','yyyy-mm-dd')  FROM dual;
--char
SELECT TO_CHAR(sysdate,'YYYY"年"fmMM"月"fmDD"日" HH24"时"MI"分"SS"秒"') FROM dual;

SELECT TO_CHAR(sysdate) FROM dual; --char
--将字符串转化为数字
SELECT TO_NUMBER('100') FROM dual; --number
--char
SELECT TO_CHAR('988889999.89','C999999999.00000') FROM dual;  

---NULLIF (expr1, expr2) ->相等返NULL(空),不等返回expr1; expr1和 expr2类型必须一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值