oracle 表查询(经典例子)--2017-08-19

来源:互联网 发布:淘宝号为什么被冻结 编辑:程序博客网 时间:2024/06/05 21:55

( 经典的练习题 作为新手也是去练习 和理解思路)

利用scott用户存在的几张表(emp,dept)为大家演示如何使用select语句,select语句在软件编程中非常有用!

部门表(dept)

名称

类型

描述

1

DEPTNO

NUMBER(2)

表示部门编号,由两位数字所组成

2

DNAME

VARCHAR2(14)

部门名称,最多由14个字符所组成

3

LOC

VARCHAR2(13)

部门所在的位置


员工表(emp)

名称

类型

描述

1

EMPNO

NUMBER(4)

雇员的编号,由四位数字所组成

2

ENAME

VARCHAR2(10)

雇员的姓名,由10位字符所组成

3

JOB

VARCHAR2(9)

雇员的职位

4

MGR

NUMBER(4)

雇员对应的领导编号,领导也是雇员

5

HIREDATE

DATE

雇员的雇佣日期

6

SAL

NUMBER(7,2)

基本工资,其中有两位小数,五倍整数,一共是七位

7

COMM

NUMBER(7,2)

奖金,佣金

8

DEPTNO

NUMBER(2)

雇员所在的部门编号

简单的查询语句 

一,查看表结构

desc emp; 
1,查询所有列

select * from emp;
切忌动不动就用select * 
set timing on; 打开显示操作时间的开关,可以在下面显示查询时间。

在数据多的时候 可以查看语句的查询速度(好的查询语句可以更好更快的进行查询) 

2,查询制定列

    select ename, sal, job, deptno from emp;

取消重复行distinct

    select distinct deptno, job from emp; 
查询SMITH所在部门,工作,薪水
    select deptno,job,sal from emp where ename = 'SMITH'; 
注意:oracle对内容的大小写是区分的,所以ename='SMITH'和ename='smith'是不同的


 使用算术表达式 nvl  null

问题:如何显示每个雇员的年工资?

    select  sal*13+nvl(comm, 0)*13 "年薪" , ename, comm from emp;

3,使用列的别名

    select  ename "姓名", sal*12 AS "年收入" from emp;
4,如何处理null值

使用nvl函数来处理

  如何连接字符串(||)

    select ename  || ' is a ' || job from emp;
5,使用where字句

问题:如何显示工资高于3000的 员工?

   SELECT * FROM emp WHERE sal > 3000;
问题:如何查找1982.1.1后入职的员工?

    SELECT ename,hiredate FROM emp WHERE hiredate >'1-1月-1982';

6,如何使用like操作符 
%:表示0到多个字符  _:表示任意单个字符 
问题:如何显示首字符为S的员工姓名和工资? 

    SELECT ename,sal FROM emp WHERE ename like 'S%'; 
如何显示第三个字符为大写O的所有员工的姓名和工资? 
    SELECT ename,sal FROM emp WHERE ename like '__O%'; 


7,在where条件中使用in
问题:如何显示empno为7844, 7839,123,456 的雇员情况?
    SELECT * FROM emp WHERE empno in (7844, 7839,123,456); 
 使用is null的操作符
问题:如何显示没有上级的雇员的情况?
错误写法:

    select * from emp where mgr= ''; 
正确写法:

    SELECT * FROM emp WHERE mgris null;
8,使用逻辑操作符号 问题:查询工资高于500或者是岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J?  
    SELECT * FROM emp WHERE (sal >500 or job = 'MANAGER') and ename LIKE 'J%'; 

 9,使用order by 字句   默认asc
问题:如何按照工资的从低到高的顺序显示雇员的信息?
    SELECT * FROM emp ORDER by sal; ,

问题:按照部门号升序而雇员的工资降序排列

    SELECT * FROM emp ORDER by deptno, sal DESC; 


10,使用列的别名排序

问题:按年薪排序
select ename, (sal+nvl(comm,0))*12 "年薪" from emp order by "年薪" asc; 
(别名需要使用“”号圈中,英文不需要“”号 )


原创粉丝点击