Oracle常用查询操作
2016-07-12 19:36
531 查看
--整表查询
例子0:desc 查看表结构;
describe s_emp;
desc s_dept;
例子1:查询当前Schema中有多少个表?
select table_name from tabs;
select table_name from user_tables;
例子2:查询s_emp前三个列的内容?
select id, first_name, last_name from s_emp;
例子3:显示所有部门的内容?
select * from s_dept;
例子4:显示每位员工的全名?
select id, first_name||’-’||last_name from s_emp;
例子5:员工全名 is in department 部门编号?
select id, first_name||’-’||last_name ||’ is in department ’||dept_id
from s_emp;
例子6:列出每个员工的年薪?
select id ,first_name, salary*12 from s_emp;
例子7:列出每个员工的一年的总收入?
select id, first_name,
salary*12*(1+NVL(COMMISSION_PCT,0)/100) "total salary"
from s_emp;
例子8:列出所有部门的种类?
select distinct name from s_dept;
例子9:列出各部门有什么不同的职位?
select distinct dept_id , title from s_emp;
--限定查询
例子10: 列出42部门的员工的id,名字,salary,和部门号?
select id, first_name, dept_id
from s_emp
where dept_id = 42;
例子11: 找出工资高于1200元的员工的年薪?
select id, first_name, salary*12
from s_emp
where salary > 1200;
例子12: 找出年薪高于12000元的员工?
select id, first_name, salary*12 from s_emp
where salary*12 > 12000;
--- where salary > 1000;
例子13: 找出42部门年薪高于12000元的员工?
select id, first_name, salary*12
from s_emp
where salary > 1000 and dept_id = 42;
例子14: 找出‘Carmen’每个月的工资?
select id, first_name
from s_emp
where first_name=’Carmen’;
例子15: 把所有职位为‘Stock Clerk’的员工列出?
select id, first_name, title
from s_emp
where title=’Stack Clerk’;
例子16: 找出工资在1500-2000之间的员工?
select id,first_name,salary
from s_emp
where salary >= 1500 and salary <= 2000;
select id,first_name,salary
from s_emp
where salary between 1500 and 2000;[闭区间]
例子17: 找出31, 42, 43 部门的员工的工资?
select dept_id, first_name,salary
from s_emp
where dept_id = 31 or dept_id = 42 or dept_id = 43;
select dept_id, first_name,salary
from s_emp
where dept_id in(31,42,43);
select dept_id, first_name,salary
from s_emp
where dept_id = any(31,42,43);
例子18:找出first_name第二个字母是 e 的员工信息?
select * from s_emp
where first_name like '_e%';
例子19:列出当前用户下所有以‘S_’开头的表?
create table student(id number(10),name varchar2(20));
select table_name
--from user_tables
from tabs
where table_name like 'S/_%'escape '/';
例子20:找出入职时间是 90年的所有员工信息?
select start_date from s_emp;
select id, first_name,start_date
from s_emp
where start_date like '%90';
例子21:列出哪些员工没有提成?
select id, first_name, commission_pct
from s_emp
where commission_pct is not null;
例子22:列出不在31, 42, 43 部门的员工的工资?
select first_name,dept_id
from s_emp
where dept_id != 31
and dept_id <> 42
and dept_id ^= 43;
select first_name,dept_id
from s_emp
where dept_id not in (31,42,43);
select first_name,dept_id
from s_emp
where dept_id <> all (31,42,43);(17条记录)
select id,first_name,salary , dept_id
from s_emp
where dept_id <> any(31,42,43);(25条记录)
例子23:列出 42, 43 部门工资大于1000元的员工信息?
select * from s_emp
where salary >= 1000 and dept_id=44or dept_id=42;
select * from s_emp
where salary >= 1000 and (dept_id=44or dept_id=42);
select first_name,dept_id from s_emp
where dept_id in(42,43)and salary >= 1000;
select first_name,dept_id from s_emp
where dept_id = any(42,43)and salary >= 1000;
例子24: 按工资降序显示员工的信息?
select id, first_name, salary
from s_emp
order by salary desc;
例子25: 按提成升序显示员工的信息?
select id, first_name, commission_pct
from s_emp
order by 3 asc;
例子26: 先工资降序,再按提成升序显示员工?
select id, first_name, salary, commission_pct
from s_emp
order by salary desc, commission_pct asc;
例子27: 按年薪降序显示员工?
select id, first_name, salary
from s_emp
order by salary*12 desc;
--Oracle函数
【单值函数】
--字符函数
例子28: 当不知道‘Carmen’在数据库是大小写的时,找出‘Carmen’的工资?
select first_name, salary
from s_emp
where lower(first_name)='carmen';
例子29:列出每个员工名字(last_name)的最后两个字符?
select first_name, length(first_name),
substr(first_name, length(first_name)-1,2)
from s_emp;
select first_name, substr(first_name, -2,2) from s_emp;
--数值函数
例子30:
ROUND (45.923, 2)45.92
ROUND (45.923, 0)46
ROUND (45.923, -1)50
TRUNC (45.923, 2) 45.92
TRUNC (45.923) 45
TRUNC (45.923, -1)40
--日期函数
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
例子31: 查出下一天、下一分钟、下一秒的时间
select sysdate as now,
sysdate+1/24 as next_hour,
sysdate+1/(24*60) as next_minute,
sysdate+1/(24*60*60) as next_second
from dual;
例子32:求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
例子33:找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year')
from dual
例子34:今天是一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
例子35:闰年的处理方法
to_char( last_day( to_date('02' || &year,'mmyyyy') ), 'dd' )
例子36:按照'yyyy mm dd hh24:mi:ss'的格式,输出42部门员工的入职时间?
select id, first_name, to_char(start_date, 'yyyy-mm-dd hh24:mi:ss')
from s_emp
where dept_id = 42;
例子37:列出5月份入职的员工?
select first_name, to_char(start_date,'dd-mon-yyyy hh24:mi:ss')
from s_emp
where to_char(start_date,'mm') = '05';
--where to_char(start_date,'fmmm') = '5';
--where to_char(start_date,'fmmm') = 5;
-- where to_char(start_date,'MONTH') = '5';
-- where to_char(start_date, 'MONTH') ='MAY;
select first_name,
to_char(start_date,'dd-mon-yyyy hh24:mi:ss') as startt,
to_char(start_date,'MONTH') as datet,
length(to_char(start_date,'fmMONTH')) as lengtht
from s_emp
where rtrim(to_char(start_date,'MONTH')) = 'MAY';
例子38:求出下个月的1号?
select last_day(sysdate)+1 from dual;
select round(last_day(sysdate),'MONTH') from dual;
select add_months(trunc(sysdate,'MONTH'),1) from dual;
select trunc(add_months(sysdate,1),'MONTH') from dual;
例子39:找出90年上半年入职的员工信息?
select first_name, start_date
from s_emp
--where round(start_date,’YEAR’) = ‘2010-01-01’; --error
--where round(start_date,'year') = '1-1月-90'
where to_char(start_date,'mm') <= 6
and to_char(trunc(start_date,'year'),'yyyy-mm-dd') = '1990-01-01'
例子40:找出15号后入职的员工信息?
select id, first_name, to_char(start_date, 'yyyy-mm-dd hh24:mi:ss')
from s_emp
where to_char(start_date, 'dd') > 15;
--转换函数
例子41:
to_char();
to_number();
to_date();
--组函数
例子42:列出提成的平均值?
select avg(commission_pct)
from s_emp;
例子43:列出提成的最大值?
select max(commission_pct)
from s_emp;
例子44:求出有提成的员工个数?
select count(commission_pct)
from s_emp;
count():组函数对非空值进行统计。
select count(*)
from s_emp
where commission_pct is not null;
例子45:求出42部门的平均工资?(只显示平均工资)
select avg(salary)
from s_emp
where dept_id = 42;
--group by
例子46:求出42部门的平均工资?(显示部门号、平均工资)
select max(dept_id), avg(salary)
from s_emp
where dept_id = 42;
select dept_id, avg(salary)
from s_emp
where dept_id = 42
group by dept_id;
例子47:求出各部门的平均工资?
select dept_id,avg(salary)
from s_emp
group by dept_id;
select dept_id , sum(salary)||'/'||count(*)||'='||sum(salary)/count(*) as avg
from s_emp
group by dept_id
order by dept_id;
例子48:求出各职位的平均工资?(要求:列出职位名称和平均工资)
select title, avg(salary)
from s_emp
group by title;
例子49:求出各部门不同职位的平均工资?
select dept_id,title, avg(salary)
from s_emp
group by dept_id, title
order by dept_id;
--having
例子50:求出平均工资高于2000的员工?
select first_name, max(salary)
from s_emp
--where avg(salary) > 2000;
group by first_name
having avg(salary) > 2000;
求出部门平均工资高于2000的员工信息?
select id, first_name,dept_id
from s_emp
where dept_id in ( select dept_id
from s_emp
group by dept_id
having avg(salary) >= 2000
);
测试:
select id, first_name,dept_id
from s_emp
where dept_id in (
select dept_id,avg(salary)
from s_emp
where salary >= 1000
group by dept_id
having avg(salary) >= 1500
order by dept_id asc
);
例子51:求出各部门的平均工资? (要求显示:区域名称、部门编号、部门名称、平均工资)???
select d.id, max(r.name)||'_'||min(d.name) as dept, avg(salary)
from s_emp e, s_dept d, s_region r
where e.dept_id = d.id
and d.region_id = r.id
group by d.id
order by d.id;
例子0:desc 查看表结构;
describe s_emp;
desc s_dept;
例子1:查询当前Schema中有多少个表?
select table_name from tabs;
select table_name from user_tables;
例子2:查询s_emp前三个列的内容?
select id, first_name, last_name from s_emp;
例子3:显示所有部门的内容?
select * from s_dept;
例子4:显示每位员工的全名?
select id, first_name||’-’||last_name from s_emp;
例子5:员工全名 is in department 部门编号?
select id, first_name||’-’||last_name ||’ is in department ’||dept_id
from s_emp;
例子6:列出每个员工的年薪?
select id ,first_name, salary*12 from s_emp;
例子7:列出每个员工的一年的总收入?
select id, first_name,
salary*12*(1+NVL(COMMISSION_PCT,0)/100) "total salary"
from s_emp;
例子8:列出所有部门的种类?
select distinct name from s_dept;
例子9:列出各部门有什么不同的职位?
select distinct dept_id , title from s_emp;
--限定查询
例子10: 列出42部门的员工的id,名字,salary,和部门号?
select id, first_name, dept_id
from s_emp
where dept_id = 42;
例子11: 找出工资高于1200元的员工的年薪?
select id, first_name, salary*12
from s_emp
where salary > 1200;
例子12: 找出年薪高于12000元的员工?
select id, first_name, salary*12 from s_emp
where salary*12 > 12000;
--- where salary > 1000;
例子13: 找出42部门年薪高于12000元的员工?
select id, first_name, salary*12
from s_emp
where salary > 1000 and dept_id = 42;
例子14: 找出‘Carmen’每个月的工资?
select id, first_name
from s_emp
where first_name=’Carmen’;
例子15: 把所有职位为‘Stock Clerk’的员工列出?
select id, first_name, title
from s_emp
where title=’Stack Clerk’;
例子16: 找出工资在1500-2000之间的员工?
select id,first_name,salary
from s_emp
where salary >= 1500 and salary <= 2000;
select id,first_name,salary
from s_emp
where salary between 1500 and 2000;[闭区间]
例子17: 找出31, 42, 43 部门的员工的工资?
select dept_id, first_name,salary
from s_emp
where dept_id = 31 or dept_id = 42 or dept_id = 43;
select dept_id, first_name,salary
from s_emp
where dept_id in(31,42,43);
select dept_id, first_name,salary
from s_emp
where dept_id = any(31,42,43);
例子18:找出first_name第二个字母是 e 的员工信息?
select * from s_emp
where first_name like '_e%';
例子19:列出当前用户下所有以‘S_’开头的表?
create table student(id number(10),name varchar2(20));
select table_name
--from user_tables
from tabs
where table_name like 'S/_%'escape '/';
例子20:找出入职时间是 90年的所有员工信息?
select start_date from s_emp;
select id, first_name,start_date
from s_emp
where start_date like '%90';
例子21:列出哪些员工没有提成?
select id, first_name, commission_pct
from s_emp
where commission_pct is not null;
例子22:列出不在31, 42, 43 部门的员工的工资?
select first_name,dept_id
from s_emp
where dept_id != 31
and dept_id <> 42
and dept_id ^= 43;
select first_name,dept_id
from s_emp
where dept_id not in (31,42,43);
select first_name,dept_id
from s_emp
where dept_id <> all (31,42,43);(17条记录)
select id,first_name,salary , dept_id
from s_emp
where dept_id <> any(31,42,43);(25条记录)
例子23:列出 42, 43 部门工资大于1000元的员工信息?
select * from s_emp
where salary >= 1000 and dept_id=44or dept_id=42;
select * from s_emp
where salary >= 1000 and (dept_id=44or dept_id=42);
select first_name,dept_id from s_emp
where dept_id in(42,43)and salary >= 1000;
select first_name,dept_id from s_emp
where dept_id = any(42,43)and salary >= 1000;
例子24: 按工资降序显示员工的信息?
select id, first_name, salary
from s_emp
order by salary desc;
例子25: 按提成升序显示员工的信息?
select id, first_name, commission_pct
from s_emp
order by 3 asc;
例子26: 先工资降序,再按提成升序显示员工?
select id, first_name, salary, commission_pct
from s_emp
order by salary desc, commission_pct asc;
例子27: 按年薪降序显示员工?
select id, first_name, salary
from s_emp
order by salary*12 desc;
--Oracle函数
【单值函数】
--字符函数
例子28: 当不知道‘Carmen’在数据库是大小写的时,找出‘Carmen’的工资?
select first_name, salary
from s_emp
where lower(first_name)='carmen';
例子29:列出每个员工名字(last_name)的最后两个字符?
select first_name, length(first_name),
substr(first_name, length(first_name)-1,2)
from s_emp;
select first_name, substr(first_name, -2,2) from s_emp;
--数值函数
例子30:
ROUND (45.923, 2)45.92
ROUND (45.923, 0)46
ROUND (45.923, -1)50
TRUNC (45.923, 2) 45.92
TRUNC (45.923) 45
TRUNC (45.923, -1)40
--日期函数
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
例子31: 查出下一天、下一分钟、下一秒的时间
select sysdate as now,
sysdate+1/24 as next_hour,
sysdate+1/(24*60) as next_minute,
sysdate+1/(24*60*60) as next_second
from dual;
例子32:求某天是星期几
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;
星期一
例子33:找出今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year')
from dual
例子34:今天是一年的第几天
select TO_CHAR(SYSDATE,'DDD'),sysdate from dual
例子35:闰年的处理方法
to_char( last_day( to_date('02' || &year,'mmyyyy') ), 'dd' )
例子36:按照'yyyy mm dd hh24:mi:ss'的格式,输出42部门员工的入职时间?
select id, first_name, to_char(start_date, 'yyyy-mm-dd hh24:mi:ss')
from s_emp
where dept_id = 42;
例子37:列出5月份入职的员工?
select first_name, to_char(start_date,'dd-mon-yyyy hh24:mi:ss')
from s_emp
where to_char(start_date,'mm') = '05';
--where to_char(start_date,'fmmm') = '5';
--where to_char(start_date,'fmmm') = 5;
-- where to_char(start_date,'MONTH') = '5';
-- where to_char(start_date, 'MONTH') ='MAY;
select first_name,
to_char(start_date,'dd-mon-yyyy hh24:mi:ss') as startt,
to_char(start_date,'MONTH') as datet,
length(to_char(start_date,'fmMONTH')) as lengtht
from s_emp
where rtrim(to_char(start_date,'MONTH')) = 'MAY';
例子38:求出下个月的1号?
select last_day(sysdate)+1 from dual;
select round(last_day(sysdate),'MONTH') from dual;
select add_months(trunc(sysdate,'MONTH'),1) from dual;
select trunc(add_months(sysdate,1),'MONTH') from dual;
例子39:找出90年上半年入职的员工信息?
select first_name, start_date
from s_emp
--where round(start_date,’YEAR’) = ‘2010-01-01’; --error
--where round(start_date,'year') = '1-1月-90'
where to_char(start_date,'mm') <= 6
and to_char(trunc(start_date,'year'),'yyyy-mm-dd') = '1990-01-01'
例子40:找出15号后入职的员工信息?
select id, first_name, to_char(start_date, 'yyyy-mm-dd hh24:mi:ss')
from s_emp
where to_char(start_date, 'dd') > 15;
--转换函数
例子41:
to_char();
to_number();
to_date();
--组函数
例子42:列出提成的平均值?
select avg(commission_pct)
from s_emp;
例子43:列出提成的最大值?
select max(commission_pct)
from s_emp;
例子44:求出有提成的员工个数?
select count(commission_pct)
from s_emp;
count():组函数对非空值进行统计。
select count(*)
from s_emp
where commission_pct is not null;
例子45:求出42部门的平均工资?(只显示平均工资)
select avg(salary)
from s_emp
where dept_id = 42;
--group by
例子46:求出42部门的平均工资?(显示部门号、平均工资)
select max(dept_id), avg(salary)
from s_emp
where dept_id = 42;
select dept_id, avg(salary)
from s_emp
where dept_id = 42
group by dept_id;
例子47:求出各部门的平均工资?
select dept_id,avg(salary)
from s_emp
group by dept_id;
select dept_id , sum(salary)||'/'||count(*)||'='||sum(salary)/count(*) as avg
from s_emp
group by dept_id
order by dept_id;
例子48:求出各职位的平均工资?(要求:列出职位名称和平均工资)
select title, avg(salary)
from s_emp
group by title;
例子49:求出各部门不同职位的平均工资?
select dept_id,title, avg(salary)
from s_emp
group by dept_id, title
order by dept_id;
--having
例子50:求出平均工资高于2000的员工?
select first_name, max(salary)
from s_emp
--where avg(salary) > 2000;
group by first_name
having avg(salary) > 2000;
求出部门平均工资高于2000的员工信息?
select id, first_name,dept_id
from s_emp
where dept_id in ( select dept_id
from s_emp
group by dept_id
having avg(salary) >= 2000
);
测试:
select id, first_name,dept_id
from s_emp
where dept_id in (
select dept_id,avg(salary)
from s_emp
where salary >= 1000
group by dept_id
having avg(salary) >= 1500
order by dept_id asc
);
例子51:求出各部门的平均工资? (要求显示:区域名称、部门编号、部门名称、平均工资)???
select d.id, max(r.name)||'_'||min(d.name) as dept, avg(salary)
from s_emp e, s_dept d, s_region r
where e.dept_id = d.id
and d.region_id = r.id
group by d.id
order by d.id;
相关文章推荐
- 查看及修改Oracle编码格式方法
- 甲骨文说,我们还会继续发展 Java EE,当然,还有云
- 修改Oracle序列(sequence)的初始值(start with)
- oracleJet-子路由
- oracleJet-router
- OracleJet总结(1)
- Oracle 表空间数据文件移动的方法
- PowerDesigner15 逆向工程(Oracle数据库)
- ORACLE INDEX
- Oracle RAC的五大优势及其劣势
- Oracle RAC的五大优势及其劣势
- 【转】oracle自带视图和表
- oracle dblink-数据同步(使用trigger)
- 【Oracle】GoldenGate 12.2 OGG-06591 OGG-01031
- Oracle SQL 1 : Oracle MERGE INTO Statement
- Centos7 安装Oracle 11g R2完整手册及问题解决方法
- 在oracle 9 发送email包
- openssl升级,解决Padding Oracle漏洞
- 利用DB Link两步搞定Oracle两个数据库间的表同步
- oracle System Schedule(系统任务)