oracle--查询练习

查询练习

1.查询工资大于12000的员工姓名和工资

select last_name, salary
from employees
where salary > 12000

2.查询员工号为176的员工的姓名和部门号

select last_name, department_id
from employees
where employee_id = 176

3.选择工资不在5000到12000的员工的姓名和工资

select last_name, salary
from employees
where salary not between 5000 and 12000

4.选择雇用时间在1998-02-01到1998-05-01之间的员工姓名,job_id和雇用时间

select last_name, job_id, hire_date
from employees
where hire_date between '1-2月 -1998' and '1-5月 -1998'

5.选择在20或50号部门工作的员工姓名和部门号

select last_name, department_id
from employees
where department_id in (20, 50)

6.选择在1994年雇用的员工的姓名和雇用时间

select last_name, hire_date
from employees
where hire_date like '% -94'

7.选择公司中没有管理者的员工姓名及job_id

select last_name, job_id
from employees
where manager_id is null

8.选择公司中有奖金的员工姓名,工资和奖金级别

select last_name, salary, commission_pct
from employees
where commission_pct is not null

9.选择员工姓名的第三个字母是a的员工姓名

select last_name 
from employees
where last_name like '__a%'

10.选择姓名中有字母a和e的员工姓名

select last_name
from employees
where last_name like '%a%' and last_name like '%e%'

11.显示系统时间

select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;

12.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)

select employee_id,last_name,salary,salary*1.2 "new salary" from employees;

13.将员工的姓名按首字母排序,并写出姓名的长度(length)

select last_name,length(last_name)
from employees
order by last_name

14.查询各员工的姓名,并显示出各员工在公司工作的月份数(worked_month)。

select last_name,months_between(sysdate,hire_date) worked month from employees

15.查询员工的姓名,以及在公司工作的月份数(worked_month),并按月份数降序排列

select last_name, months_between(sysdate, hire_date) worked_month
from employees
order by worked_month desc

16.做一个查询,产生下面的结果

<last_name> earns <salary> monthly but wants <salary*3>

结果.PNG
select last_name || ' earns ' || salary || ' monthly but wants ' || salary * 3
from employees

17.使用decode函数,按照下面的条件:

decode函数.PNG
select last_name, job_id, decode(job_id, 'AD_PRES', 'A',
                                         'ST_MAN', 'B',
                                         'IT_PROG', 'C',
                                         'SA_REP', 'D',
                                         'ST_CLERK', 'E',
                                         'F') GRADE
from employees

18.将第7题的查询用case函数再写一遍。

select last_name, job_id, case job_id when 'AD_PRES' then 'A'
                                      when 'ST_MAN' then 'B'
                                      when 'IT_PROG' then 'C'
                                      when 'SA_REP' then 'D'
                                      when 'ST_CLERK' then 'E'
                                      else 'F'
                           end            
from employees

19.查询公司员工工资的最大值,最小值,平均值,总和

Select max(salary), min(salary), avg(salary), sum(salary)
From employees

20.查询各job_id的员工工资的最大值,最小值,平均值,总和

Select job_id, max(salary), min(salary), avg(salary), sum(salary)
From employees
Group by job_id

21.选择具有各个job_id的员工人数

Select job_id, count(employee_id)
From employees
Group by job_id;

22.查询员工最高工资和最低工资的差距(DIFFERENCE)

Select max(salary) – min(salary) difference
From employees

23.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

Select manager_id, min(salary)
From employees
Where manager_id is not null
Group by manager_id
Having min(salary) >= 6000

24.查询所有部门的名字,location_id,员工数量和工资平均值

Select department_name, location_id, count(employee_id), avg(salary)
From employees e join departments d
On e.department_id = d.department_id
Group by department_name, location_id

一、找到员工表中工资最高的前三名:

关于行号
1. rownum永远按照默认的顺序生成
2. rownum只能使用 < <=; 不能使用> >=

SQL> select rownum,empno,ename,sal
  2  from (select * from emp order by sal desc)
  3  where rownum<=3;

    ROWNUM      EMPNO ENAME             SAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
         1       7839 KING             5000                                                                                                                                                             
         2       7788 SCOTT            3000                                                                                                                                                             
         3       7902 FORD             3000 

2.rownum只能使用 < <=; 不能使用> >=

SQL>  select *
  2   from  (select rownum r,e1.*
  3      from (select * from emp order by sal) e1
  4      where rownum <=8
  5     )
  6   where r >=5;

临时表:

1. create global temporary table *****
2.自动创建: order by
特点:当事务或者会话结束的时候,表中的数据自动删除

所以 oracle中事务提交了 数据不一定保存下来了(临时表),数据不在,但表还在

SQL> create global temporary table test2
  2  (tid number,tname varchar2(20))
  3  on commit delete rows;

表已创建。

SQL> insert into test2 values(1,'Tom');

已创建 1 行。

SQL> select * from test2;

       TID TNAME                                                                                                                                                                                        
---------- --------------------                                                                                                                                                                         
         1 Tom                                                                                                                                                                                          

SQL> commit;

提交完成。

SQL> select * from test2;

未选定行

SQL> desc test2
 名称                                                                                                              是否为空? 类型
 ----------------------------------------------------------------------------------------------------------------- -------- ----------------------------------------------------------------------------
 TID                                                                                                                        NUMBER
 TNAME                                                                                                                      VARCHAR2(20)

二、找到员工表中薪水大于本部门平均薪水的员工:

相关子查询:将主查询中的值作为参数传递给子查询:

SQL> select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal
  2  from emp e
  3  where sal > (select avg(sal) from emp where deptno=e.deptno);

     EMPNO ENAME             SAL     AVGSAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
      7499 ALLEN            1600 1566.66667                                                                                                                                                             
      7566 JONES            2975       2175                                                                                                                                                             
      7698 BLAKE            2850 1566.66667                                                                                                                                                             
      7788 SCOTT            3000       2175                                                                                                                                                             
      7839 KING             5000 2916.66667                                                                                                                                                             
      7902 FORD             3000       2175  

解:

SQL> select e.empno,e.ename,e.sal,d.avgsal
  2  from emp e,(select deptno,avg(sal) avgsal from emp group by deptno) d
  3  where e.deptno=d.deptno and e.sal > d.avgsal;

     EMPNO ENAME             SAL     AVGSAL                                                                                                                                                             
---------- ---------- ---------- ----------                                                                                                                                                             
      7698 BLAKE            2850 1566.66667                                                                                                                                                             
      7499 ALLEN            1600 1566.66667                                                                                                                                                             
      7902 FORD             3000       2175                                                                                                                                                             
      7788 SCOTT            3000       2175                                                                                                                                                             
      7566 JONES            2975       2175                                                                                                                                                             
      7839 KING             5000 2916.66667  

三、统计每年入职的员工个数

每年入职的员工个数.PNG
SQL> select count(*) Total,
  2         sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) "1980",
  3         sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) "1981",
  4         sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) "1982",
  5         sum(decode(to_char(hiredate,'yyyy'),'1987',1,0)) "1987"
  6  from emp;

     TOTAL       1980       1981       1982       1987                          
---------- ---------- ---------- ---------- ----------                          
        14          1         10          1          2

1.查询和Zlotkey相同部门的员工姓名和雇用日期

select last_name, hire_date
from employees
where department_id = (
      select department_id
      from employees
      where last_name = 'Zlotkey'
)

2.查询工资比公司平均工资高的员工的员工号,姓名和工资。

select employee_id, last_name, salary
from employees
where salary > (
      select avg(salary)
      from employees
)

3.查询各部门中工资比本部门平均工资高的员工的员工号, 姓名和工资

select employee_id, last_name, salary
from employees e
where salary > (
      select avg(salary)
      from employees
      where department_id = e.department_id
)

4.查询和姓名中包含字母u的员工在相同部门的员工的员工号和姓名

select employee_id, last_name
from employees
where department_id in (
      select department_id
      from employees
      where last_name like '%u%'
)

5.查询在部门的location_id为1700的部门工作的员工的员工号,

select employee_id
from employees
where department_id in (
      select department_id
      from departments
      where location_id = 1700
)

6.查询管理者是King的员工姓名和工资

select last_name, salary
from employees
where manager_id in (
      select employee_id
      from employees
      where last_name = 'King'
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 查询是数据的一个重要操作。用户发送查询请求,经编译软件变异成二进制文件供服务器查询,后返回查询结果集给用户,查询会...
    产品小正阅读 1,373评论 0 2
  • SQL语言基础 本章,我们将会重点探讨SQL语言基础,学习用SQL进行数据库的基本数据查询操作。另外请注意本章的S...
    厲铆兄阅读 5,318评论 2 46
  • 渐渐的习惯了坐在图书馆靠窗的位置,习惯了看着窗外晚霞慢慢褪去了颜色,习惯了看着远处的建筑和更远处的高山,渐...
    我家的狗狗叫小黑阅读 290评论 0 0
  • 文章系列《RACSignal 》《RACDisposable》《RACSubject、RACReplaySubje...
    Codepgq阅读 7,373评论 6 18
  • 今天和朋友一起吃饭,突然聊到孩子,朋友说,感觉我对孩子保护有点过于小心了,建议我可以放手让孩子学会更独立一...
    云沐妈妈阅读 142评论 0 0