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空格后面跟着的别名

 

posted @ 2012-06-13 22:26  只会HelloWorld  阅读(103)  评论(0编辑  收藏  举报