概述
查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
SELECT *
FROM employees
where upper(employees.first_name || employees.last_name) like '__A%';
将员工的参加工作日期按如下格式显示:月份/年份
SELECT to_char(employees.hire_date,'mm/YYYY') FROM employees;
计算2000年1月1日到现在有多少月,多少周(四舍五入)
SELECT round(months_between(sysdate,'1-Jan-2000'),2) as "月",
round((sysdate-to_date('2000-01-01','yyyy-mm-dd'))/7,2) as "周"
FROM dual;
选择所有有奖金的员工的last_name , department_name , location_id , city
SELECT employees.last_name,departments.department_name,locations.location_id,locations.city
FROM employees,departments,locations
where employees.department_id = departments.department_id and
departments.location_id = locations.location_id
选择指定员工的姓名,员工号,以及他的管理者的姓名和员工号
SELECT e.last_name,e.employee_id,m.last_name,m.employee_id
FROM employees e,employees m
where e.manager_id = m.manager_id
显示姓名、hiredate?和雇员开始工作日是星期几(提示:使用to_char函数)
SELECT employees.first_name||employees.last_name as "name",
employees.hire_date,to_char(hire_date,'day')
FROM employees
写一个查询,用首字母大写,其它字母小写显示雇员的 全名,显示名字的长度,并给每列一个适当的标签,条件是满足所有雇员名字的开始字母是J、A 或 M 的雇员,并对查询结果按雇员的全名升序排序。
(提示:使用initcap、length、substr)
SELECT first_name
FROM employees
WHERE first_name LIKE 'J%'or first_name LIKE 'A%'or first_name LIKE 'M%'
查询员工姓名中中包含大写或小写字母A的员工姓名。
select first_name
from employees
where first_name like '%A%' or first_name like '%a%'
查询部门编号为10或20,入职日期在81年5月1日之后,并且姓名中包含大写字母A的员工姓名,
员工姓名长度(提示,要求使用INSTR函数,不能使用like进行判断)
select employees.first_name,departments.department_id,employees.hire_date,
length(employees.first_name)
from employees,departments
WHERE (departments.department_id = 10 or departments.department_id = 20)
and to_char(employees.hire_date,'yyyy-mm-dd') > '1-5月-81'
--and employees.hire_date >'1-5月-81'
AND instr(employees.first_name,'A') > 0
查询每个职工的编号,姓名,工资要求将查询到的数据按照要求将查询到的数据按照定的格式合并成一个字符串.
–?前10位:编号,不足部分用*填充,左对齐
SELECT LPAD(employees.employee_id,10,'*'),employees.first_name,employees.commission_pct
FROM employees
–?中间10位:姓名,不足部分用*填充,左对齐
SELECT employees.employee_id, LPAD(employees.first_name,10,'*'),employees.commission_pct
FROM employees
–后10位:工资,不足部分用*填充,右对齐
SELECT employees.employee_id,employees.first_name,RPAD(employees.commission_pct,10,'*')
FROM employees
四舍五入
select ROUND(100.456,2),round(100.456,1),round(100.456,0)
from dual
没有四舍五入 截断
select trunc(100.456,2),trunc(100.456,1),trunc(100.456,0)
from dual
查询员工一共入职多少天,当前时间-入职
select round(sysdate-employees.hire_date,2)
from employees
查询服务器当前时间
SELECT sysdate
FROM dual
查询部门10 20 的员工截止到2000年1月1日,工作了多少个月,入职的月份。
(提示:使用months_between,extract)
SELECT employees.first_name,departments.department_id, employees.hire_date,
extract(month from employees.hire_date)as 月,
--months_between(to_date(employees.hire_date,'yyyy-mm-dd'),'1-1月-2000')
months_between(employees.hire_date,'1-Jan-2000')
FROM employees,departments
WHERE departments.department_id in ('10','20');
select employees.hire_date
from employees
WHERE employees.hire_date = '17-JUN-87';
如果员工试用期6个月,查询职位不是MANAGER的员工姓名,入职日期,入职日期后的第一个星期一,
入职当月的最后一天日期。(提示:使用add_months,next_day,last_day)
SELECT employees.first_name,employees.hire_date
FROM employees
WHERE employees.first_name !='MANAGER';
显示服务器系统当前时间,格式为2007-10-12 17:11:11(提示:使用 to_char函数)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')
from dual;
--SELECT to_char(sysdate,'yyyy-mm-dd hh:mm:ss') FROM dual;
显示姓名、hiredate?和雇员开始工作日是星期几(提示:使用to_char函数) ***
SELECT employees.first_name,to_char(employees.hire_date,'day')
FROM employees
查询员工姓名,工资,格式化的工资(¥999,999.99)(提示:使用to_char函数)
SELECT employees.first_name,to_char(employees.salary,'$999,999.99')
FROM employees
把字符串2015-3月-18 13:13:13?转换成日期格式?转换成日期格式,并计算
和系统当前时间间隔多少天。?(提示:使用to_date函数)
select round(sysdate-(to_date('2015-03-18 15:33:21','yyyy-MM-dd HH24:mi:ss')))
from dual;
--select to_date('2015-MAR-18 13:13:13','yyyy-mm-dd')
--from dual;
1.计算2000年1月1日到现在有多少月,多少周(四舍五入)。
SELECT round((MONTHS_BETWEEN(sysdate,'1-JAN-00')),2) as 月, round((sysdate - to_date('2000-01-01','yyyy-mm-dd'))/7,2) as week
FROM dual;
2.查询员工ENAME的第三个字母是A的员工的信息(使用2个函数)。
SELECT *
FROM employees
where employees.first_name like '%A%';
select *
from employees
where substr(employees.first_name,3,1)='A';
3.使用trim函数将字符串‘hello’、‘?Hello?’、分别处理得到下列字符串ello、Hello、ll、hello
SELECT trim('H' from 'Hello') as A,
trim('Hello') as B,
/*trim(both'l' from 'hello') as C,*/
substr(substr('hello',3,5),1,2),
trim('hello') as D
FROM dual
4.将员工工资按如下格式显示:123,234.00 RMB?。
select to_char('123234.00','000999.00') || 'RMB'
from dual
SELECT to_char(employees.salary,'999,999.00') || 'RMB'
FROM employees;
5.查询员工的姓名及其经理编号,要求对于没有经理的显示“No Manager”字符串。
select employees.first_name,nvl(to_char(employees.manager_id),'No Manager')
from employees
6.将员工的参加工作日期按如下格式显示:月份/年份。
SELECT employees.first_name,employees.hire_date,to_char(employees.hire_date,'hh/rr')
FROM employees
7.在员工表中查询出员工的工资,并计算应交税款:
如果工资小于1000,税率为0,
如果工资大于等于1000并小于2000,税率为10%,
如果工资大于等于2000并小于3000,税率为15%,
如果工资大于等于3000,税率为20%。
SELECT employees.first_name,
employees.salary,
lpad(employees.salary, 15, '$'),
case
when employees.salary > 0 and employees.salary < 1000 then
employees.salary * 0
when employees.salary >= 1000 and employees.salary < 2000 then
employees.salary * 0.1
when employees.salary >= 2000 and employees.salary < 3000 then
employees.salary * 0.15
when employees.salary >= 3000 then
employees.salary * 0.2
else
0
end tax
FROM employees;
8.创建一个查询显示所有雇员的?姓名和?sal。格式化sal为?15?个字符长度,用?$左填充,列标签?SALARY。
SELECT employees.first_name,lpad(employees.salary,15,'$') FROM employees
1. 组函数处理多行返回一行吗? 行
2. 组函数不计算空值吗?是 (组函数忽略空值计算)
3. where子句可否使用组函数进行过滤? 不能再where子句中使用组函数。
4. 查询公司员工工资的最大值,最小值,平均值,总和
select max(employees.salary),min(employees.salary),avg(employees.salary),sum(employees.salary)
from employees
5. 查询各job_id的员工工资的最大值,最小值,平均值,总和
SELECT employees.job_id,max(employees.salary),min(employees.salary),avg(employees.salary),
sum(employees.salary) FROM employees group by employees.job_id
6. 选择具有各个job_id的员工人数
SELECT employees.job_id,count(*) FROM employees group by employees.job_id
7. 查询员工最高工资和最低工资的差距(DIFFERENCE)
SELECT MAX(employees.salary)-MIN(employees.salary)
FROM employees
8. 查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内
SELECT manager_id, min(salary)
FROM employees
group by manager_id
having min(salary) >= 6000 and manager_id is not null;
9. 查询所有部门的名字,location_id,员工数量和工资平均值
SELECT departments.department_name,
departments.location_id,
count(*),
avg(employees.salary)
FROM departments, employees
where departments.department_id = employees.department_id
group by departments.department_name,departments.location_id
SELECT department_name,location_id,count(job_id) as "部门总人数",avg(salary)as"平均工资"
FROM departments,employees
where departments.department_id = employees.department_id
group by departments.department_name,departments.location_id
10 查询公司在1995-1998年之间,每年雇用的人数 to_char count
SELECT to_char(employees.hire_date,'yyyy'),count(*)
FROM employees
group by to_char(employees.hire_date,'yyyy')
having to_char(employees.hire_date,'yyyy') in ('1995','1996','1997','1998');
11. 查询公司在1995-1998年之间,每年雇用的人数 使用case when
total 1995 1996 1997 1998
20 3 4 6 7
SELECT count(employees.employee_id) "total",
count(decode(to_char(employees.hire_date,'yyyy'),'1995','0',null))"1995",
count(decode(to_char(employees.hire_date,'yyyy'),'1996','0',null))"1996",
count(decode(to_char(employees.hire_date,'yyyy'),'1997',0,null))"1997",
count(decode(to_char(employees.hire_date,'yyyy'),'1998',0,null))"1998"
FROM employees
where to_char(hire_date,'yyyy')
in ('1995','1996','1997','1998');
SELECT count(*)"total",
count (case when to_char(employees.hire_date,'yyyy')=1995 then '1995' else null end )"1995",
count (case when to_char(employees.hire_date,'yyyy')=1996 then '1996' else null end )"1996",
count (case when to_char(employees.hire_date,'yyyy')=1997 then '1997' else null end )"1997",
count (case when to_char(employees.hire_date,'yyyy')=1998 then '1998' else null end )"1998"
FROM employees;
最后
以上就是神勇百褶裙为你收集整理的Oracle 常用函数练习题含答案的全部内容,希望文章能够帮你解决Oracle 常用函数练习题含答案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复