oracle表的查询(一)

本博文内容来源个人自学oracle笔记。表结构来源oracle11G自带实例。比如emp表,dept表等。

 

Set timing on;开启执行时间记录

Select count(*) from users;

Insert into users(userid,username,userpss) select * from users;把自己的数据插入自己的表中。

查看表结构:

Desc dept;

查询所有列:

Select * from dept;

查询指定列:

Select ename,sal,job,deptno from emp;

如何取消重复行:

Select distinct deptno,job from emp;

查询smith的薪水,工作,所在部门

Select deptno,job,sal from emp where ename=’SMITH’;

使用算数表达式:

怎么显示每个雇员的年工资?

使用列的别名

Select ename “姓名sal*12 as “年收入” from emp;

如何处理null值?

使用nvl函数来处理

Select sal*13+nvl(comm,0)*13 “年工资ename from emp;

如何连接字符串(||

Select ename ||’is a’||job from emp;

使用where子句:

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

Select ename,sal from emp where sal>3000

如何查找1982.1.1后入职的员工?

Select ename,hiredate from emp where hiredate>’1-1-1982’

如何显示工资在20002500的员工情况?

Select ename,sal from emp where sal >= 2000 and sal<=2500

如何使用like操作符?

%:表示任意0到多个字符

_:表示任意单个字符

如何显示首字符为S的员工姓名和工资?

Select ename,sal from emp whereename like ‘S’;

如何显示第三个字符为大写O的所有员工的姓名和工资?

Select ename,sal from emp where ename like ‘__O%’;

where条件中使用in

如何显示empno123234的雇员情况?

Select * from emp where empno in(123,234);

使用is null的操作符:

如何显示没有上级的雇员的情况

Select * from emp where mgr is null;

使用逻辑操作符号:

如何查询工资高于500或是岗位为manager的雇员,同时还要满足他们的姓名首字母为大写的J

Select * from emp where (sal>500 or job=’manager’) and ename like ‘J%’

使用order by子句:

如何按照工资从低到高的顺序显示雇员的信息?

Select * from emp order by sal;(从高到低desc,从低到高asc

如何按照部门升序而雇员的工资降序排列?

Select * from emp order by deptno asc,sal desc;

使用列的别名排序:

Select ename,(sal+nvl(comm,0)*12 “年薪” from emp order by “年薪”asc;

注:别名需要使用“号圈中

分页查询:

按雇员的ID号升序取出

数据分组---max,min,avg,sum,count

如何显示所有员工中最高工资和最低工资?

Select max(sal),min(sal) from emp;

如何显示所有员工的平均工资和工资总和?

Select avg(sal),sum(sal) from emp;

如何计算一共有多少员工?

如何查询工资最高的员工姓名和工资?

Select ename,sal from emp where sal=(selectmax(sal) from emp);

Select * from emp where sal<(select avg(sal) from emp);

Group by having子句:

Group by用于对查询的结果分组统计,

Having子句用于限制分组显示结果。

如何显示每个部门的平均工资和最高工资?

Select avg(sal),max(sal),deptnofromemp group by deptno;

如何显示每个部门每种位的平均工资和最低工资?

Select min(sal),avg(sal),max(sal),deptno,job from emp group by deptno;

如何显示平均工资低于2000的部门号和它的平均工资?

Select avg(sal),max(sal),deptno from emp group by deptno having avg(sal)<2000;

对数据分组的总结:

1.分组函数只能出现在选择列表,having,order by子句中。

2.如果在select语句中同时包含有group by,having,order by那么他们的顺序是group by,having,order by

3.在选择列中如果有列,表达式,和分组函数,那么这些列和表达式必须有一个出现在goup by子句中,否则就会出错

select deptno,avg(sal),max(sal) from emp group by deptno having avg(sal)<2000;

这里deptno就一定要出现在group by

多表查询是指基于两个和两个以上的表或是视图的查询。在实际应用中,查询单个表可能不能满足你的需求,(如显示sales部门位置和其员工的姓名),这种情况下需要使用到(dept表和emp表)

如何显示雇员的姓名,雇员的工资及所在部门的名字?(笛卡尔集)

Select a1.ename,a1.sal,a2.dname from emp a1,dept a2 where a1.deptno=a2.deptno; 

 

你可能感兴趣的:(oracle,table,select)