您的位置:首页 > 数据库 > Oracle

简单查询

2017-10-11 23:21 295 查看
/*
select 字段列表 from 表1,表2,……
[where 条件表达式]
[order by 字段1 desc/asc,字段2 desc/asc]
[group by 字段1, 字段2,……]
[having 表达式]
*/

--一、简单查询
--1、查询所有的行所有的列
select * from emp;
select * from dept;

--2、查询指定的列
select empno,ename from emp;

--3、查询中出现表达式
select empno,ename,(to_date('2013-03-18','yyyy-mm-dd')-hiredate)/365 from emp;

--4、给查询的字段或表达式起别名
select empno as 编号,ename as 姓名,(to_date('2013-03-18','yyyy-mm-dd')-hiredate)/365 as 工作年限
from emp;

select empno 编号,ename 姓名,(to_date('2013-03-18','yyyy-mm-dd')-hiredate)/365 工作年限
from emp;

--5、给表起别名
select e.empno,e.ename from emp e;

--6、查询指定的行——带条件的查询
--工资高于2000的员工信息
select * from emp
where sal>2000;

--显示是销售员工和管理者的工资情况
select ename,job,sal from emp
where job='SALESMAN' OR job ='MANAGER';

--7、模糊查询
/*
like
通配符:
%:任意个字符或汉字
_:一个字符或汉字的位置
*/

--查询姓名以'a'打头的员工信息
select * from emp
where ename like 'a%';

--查询姓名中第二个字母是M的员工信息
select * from emp
where ename like '_M%';

--查询以'a'/'A'打头的员工信息
select * from emp
where ename like 'a%' or ename like 'A%';

--8、使用between and 进行查询
select * from emp
where sal between 2000 and 3000;

select * from emp
where sal >=2000 and sal<= 3000;

--9、查找在*****里边的信息——in
--显示是销售员工和管理者的工资情况
select ename,job,sal from emp
where job='SALESMAN' OR job ='MANAGER';

--显示是销售员工和管理者的工资情况
select ename,job,sal from emp
where job in('SALESMAN' ,'MANAGER');

--显示不是销售员工和管理者的工资情况
select ename,job,sal from emp
where job not in('SALESMAN' ,'MANAGER');

--10、显示字段为空的信息
--显示没有奖金的员工信息
select * from emp
where comm is null;

--显示有奖金的员工信息
select * from emp
where comm is not null;

--11、排序
--DESC倒序从大到小;ASC正序从小到大(默认)
--按照工资降序显示,如果工资有相同,相同的内部按照姓名升序排列
select * from emp
order by sal desc,ename;

--12、聚合函数
/*
max() min() avg() sum() count()
聚合函数对于null值的处理
count(*):对表中行数进行计数,不管是否有NULL
count(字段名):对特定列有数据的行进行计数,忽略NULL值
AVG():求平均值,注意AVE()忽略NULL值,而不是将其作为“0”参与计算
MAX()、MIN():求最大、最小值,都忽略NULL
SUM():可以对单个列求和,也可以对多个列运算后求和,忽略NULL值,
且当对多个列运算求和时,如果运算的列中任意一列的值为NULL,则忽略这行的记录。*/
-- 例如: SUM(A+B+C),A、B、C 为三列,如果某行记录中A列值为NULL,则不统计这行。

select max(sal) as maxSal from emp;
select avg(sal) from emp;

select sum(sal) from emp;

select count(empno) from emp;

select count(*) from emp;

--从emp表中显示部门数
select count(distinct deptno) from emp;-----distinct:去掉重复的数据

--从emp表中显示部门编号
select distinct deptno from emp;

--显示前3行----分页
select empno,ename,rownum from emp
where rownum<4;

/*
13、分组:group by 字段1,字段2,……
1)需要分组
2)按照什么分组
3)分组后能够显示的字段 */

-- 显示每个部门的平均工资
select deptno,avg(sal) from emp
group by deptno;

-- 每个领导所管辖的人数
select mgr,count(empno) from emp
group by mgr;

--14、having子句

select deptno,avg(sal) avgSal from emp
group by deptno
having avg(sal)>2500;

select mgr,count(empno) from emp
group by mgr
having count(empno)>5;

--显示每个部门的工资超过1500的人数超过2人的
select deptno,count(empno) from emp
where sal>1500
group by deptno
having count(empno)>2;

/*
区分where 与having区别
1)where放在分组之前,是对原表的筛选,having放在分组之后,是对分组之后结果的筛选
2)二者可以同时存在 */
-- 显示每个部门所有工资>=1200,并且人数超过2人的部门
select deptno,count(empno) from emp
group by deptno
having count(empno)>2 and min(sal)>=1200;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 oracle