Oracle查询案例.txt

来源:互联网 发布:域名cname 编辑:程序博客网 时间:2024/05/17 23:45

scott用户是Oracle提供的练习用户密码为tiger,在Oracle 10G中Soctt用户是被默认锁定的

conn scott/tiger;

用户解锁
alter user <用户名> account unlock;
当解锁时需要在sys用户下dba权限里面进行解锁

conn sys/oracle as sysdba;

select table_name from user_tables;

设置行的宽度 默认80
set linesize 150;
---------------------------------------------------------------------------------------
查询emp表中所有的员工与职务
select ename,job form emp;
查询emp表中名为CLARK员工的职务和工资
select job,sal from emp where ename='CLARK';
注意:在Oracle中语法与关键字时不区分大小写的但是数据库中的记录是区分大小写的

查询所用工资大于3000的员工姓名
select ename from emp where sal>3000;

查询所有工资小于1500 或有奖金的所有员工姓名
select ename from emp where sal<1500 or comm>=0;
注意:0不代表没有,空字符串不代表null, is null 是空。

select ename,sal from emp where (sal>500 and sal<1000) or (sal>1500 and sal<2500);
错误写法
select * from emp where empno=7369 or empno=7521 or empno=7566 or empno=1235 or empno=4568;
正确写法
select * from emp where empno in (7369,7521,7566,1235,4568);

查询所有员工的姓名与年薪
select ename as 员工姓名,(sal+nvl(comm,0))*12 as 员工年薪 from emp;
注意:nvl是检查指定的字段是否为空,如果为空将替换成指定内容

查询所有员工的姓名与年薪 按年薪升序排序
select ename as 员工姓名,(sal+nvl(comm,0))*12 as 员工年薪 from emp order by 员工年薪;

查询所有员工的姓名与年薪 按年薪降序排序
select ename as 员工姓名,(sal+nvl(comm,0))*12 as 员工年薪 from emp order by 员工年薪 desc;

注:order by 排序默认采用升序排序,降序desc


查询所有姓名以s开头的用户员工
select ename from emp where ename like'S%';
注:like 模糊查询%通配符 代表任意长度。   _通配符代表一个字符长度。


查询所有没有奖金的员工姓名
select ename from emp where comm is null;

 

 

查询工资最高的员工姓名与工资
select ename,sal from emp where sal=(select max(sal) from emp);

select max(sal) from emp;  //条件


查询所有员工的工资和奖金总和 一个月的
select sum(sal+nvl(comm,0)) as 工资与奖金总和 from emp;


查询工资最低的是多少钱
select min(sal) from emp;

查询员工平均工资是多少 avg
select avg(sal) from emp;

统计emp表中有多少员工 count
select count(ename) from emp;
保证统计准确
select count(*) from emp;   统计所有列


统计部门编号为10的员工数
select count(*) from emp where deptno='10';


查询每个部门平均工资和最高工资
select max(sal) as 最高工资,avg(sal) as 平均工资,deptno as 部门编号 from emp group by deptno;
注:如果要分组查询的话,分组的字段一定要出现在查询列表中

查询每个部门的每种岗位的平均工资和最低工资
select avg(sal),min(sal),job,deptno from emp group by deptno,job;

查询平均工资低于2000的部门编号和该部门的平均工资是多少
select avg(sal),deptno from emp  group by deptno having avg(sal)<2000;
注:分组后不能使用where 需要使用having 添加分组后的查询条件

============================================================================================
多表查询


查询出员工编号为7566的员工姓名 工资 工作地点
select ename,sal,loc from emp,dept where empno=7566 and dept.deptno=emp.deptno;
注:多表查询时条件必须得有表个数-1个条件

查询部门编号为10的部门名、员工名和工资
select dname,ename,sal from dept,emp where dept.deptno=10 and emp.deptno=dept.deptno;