本博文内容来源个人自学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’
如何显示工资在2000到2500的员工情况?
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
如何显示empno为123,234的雇员情况?
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;