oracle_day07
1.使用like查询(模糊查询)
% 表示0到多个字符
_ 表示1个任意字符
例:如何显示第三个字符为大写O的所有员工姓名和工资
select ename,sal from emp where ename like'_O%';
2.where条件中,使用in(以下两个语句等价)
(1)select * from emp where id=123 or id=456 or id=789
(2)select * from emp where id in(123,456,789)
3.使用逻辑运算符号
例:查询工资高于500或是岗位为MANAGER的雇员,同时还要满足
他们的姓名首写字母为大写的J
select * from emp where (sal>500 or job='MANAGER')and(ename like'J%');
4.order by 子句使用
用处是对结果进行排序显示
工资从低到高的顺序显示雇员的信息
select * from emp order by sal asc; //在默认情况下,order by后面的字段是升序asc
工资从高到低的顺序显示雇员的信息
select * from emp order by sal desc;
--------------------------------------
数据分组函数 max min avg sum count
1.显示员工最高工资:select max(sal) from emp;
2.显示员工最低工资:select min(sal) from emp;
也可以 select max(sal),min(sal) from emp;
3.显示员工平均工资:select avg(sal) from emp;
注意:
avg(sal)不会把sal为null的行进行统计,如果希望为空值也考虑进去,则
应该-> select sum(sal)/count(*) from emp;
4.count(*) 可以对一个字段进行统计
例:显示工资最多的员工
select ename from emp where sal=(select max(sal) from emp) //执行顺序从右往左
---------------------------------------
5.group by & having
显示部门平均工资低于 2000 的部门号和它的平均工资
select avg(sal),deptno from emp group by deptno having avg(sal)<2000;
多表查询
select * from emp,dpet
1.执行过程:从部门表dpet表中选出第一条记录,然后与emp的每一条记录进行匹配并输出
2.在多表查询的时候,如果不带任何条件则会出现笛卡尔基。
多表查询的条件是 至少不能少于‘表的个数-1’
3.在多表查询的时候,如果两个表的列同名,则需要加表名区分,否则可以不加
例-显示雇员名,雇员工资以及所在部门的名字
select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno //deptno是部门编号
自连接
比如显示‘FORD’的上级
1.查询出 FORD 这个人对应的上级编号
select mgr from emp where ename='FORD';
2.根据编号显示上级的信息
select * from emp where empno=( select mgr from emp where ename='FORD' )
显示各员工的姓名和他的上级领导姓名
!! 因为员工姓名和老板姓名都在同一张表里,此时可以把emp表看作两张表(worker,boss)
select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno;//自连接 ; emp空格后面跟着的别名