show-sales.com

awed

 

oralce学习笔记2

08-4-17下午和晚上
--having 对分组进行限制,
--
查询按部门分组统计平均工资大于2000的部门
select round(avg(sal),2),deptno from emp group by deptno having avg(sal) >2000

--子查询,在一个查询中包含另一个查询

--查询员工工资大于所有员工平均工资的员工
select ename,sal from emp where sal > (select avg(sal) from emp)

--查询各部门中工资最高的员工
select A.ename,A.sal,A.Deptno from emp A
  
join
      (
select max(sal) maxsal,deptno from emp group by deptno) B
  
on (A.Deptno=B.deptno and A.sal=B.maxsal)

--查询各部门中工资最高的员工,和其工资等级
select C.ename,C.sal,D.grade,C.Deptno from salgrade D 
join
  (
select A.ename,A.sal,A.Deptno from emp A
  
join
      (
select max(sal) maxsal,deptno from emp group by deptno) B
  
on (A.Deptno=B.deptno and A.sal=B.maxsal)) C
on (C.sal between D.LOSAL and D.HISAL)

--查询员工的名称,工资及工资等级
select ename,sal, grade from emp A, salgrade B where (A.Sal between B.losal and B.hisal)

--查询所有员工的名称和其经理的名称
select A.empno,A.ename, B.ename as marname from emp A,emp B where A.mgr=B.empno

--查询员工的姓名和其所在部门的名称
select ename,dname from emp a,dept b where a.deptno=b.deptno
select ename,dname from emp a join dept b on a.deptno=b.deptno

--左连接,即当左边表没有与右边表匹配的时候,显示左表的全部数据
select A.empno,A.ename, B.ename as marname from emp A
left join emp B on A.mgr=B.empno

--右连接,即当左边表没有与右边表匹配的时候,显示右表的全部数据
select A.empno,A.ename, B.dname from emp A
right join dept B on A.deptno=B.deptno

--求所有员工的平均薪水等级
select avg(C.grade) from
  (
select A.Empno,A.Ename,A.Sal,A.Deptno,B.grade from emp A
  
join salgrade B on A.Sal between B.losal and B.hisal) C

--查询所有员工中,为经理人的名称
select ename from emp where empno in(select distinct mgr from emp)


--比普通员工薪水还要高的经理人
select ename from emp where empno in (select distinct mgr from emp where mgr is not null)
and sal >
  (
select max(sal) from emp where empno not in 
         (
select distinct mgr from emp where mgr is not null)--所有经理人的编号 
         )      
           
--比较效率  
         
           
           
select * from emp where deptno=10 and ename like '%A%';
          
--第一条高于第二条,当第一个条件不合适的时候就不用去核对第二个条件,而第一个条件较小所以会快些
            
           
select * from emp where ename like '%A%' and deptno=10
           
--创建表语句 create
orcal常用的类型有

非空约束:
NOT NULL
唯一约束:
UNIQUE
主键约束:
PRIMARY KEY
外建约束:
REFERENCES 外键约束被参考字段必须为主键
如:
CREATE TABLE CLASS(ID NUMBER(8PRIMARY KEY,NAME VARCHAR2(20NOT NULL)
CREATE TABLE STUDENT (
    ID 
NUMBER(8PRIMARY KEY,
    CLASS 
NUMBER(8NOT NULL REFERENCES CLASS(ID),--增加了一个外键约束,关链CLASS表的ID
    NAME VARCHAR2(20NOT NULL
)
也可以这样写
CREATE TABLE STUDENT (
    ID 
NUMBER(8NOT NULL,
    CLASS 
NUMBER(8NOT NULL
    NAME 
VARCHAR2(20NOT NULL
    
CONSTRAINT S_ID_PK PRIMARY KEY(ID),
    
CONSTRAINT S_C_RE FOREIGN KEY (CLASS) REFERENCES CLASS(ID)
)

明天需要弄清楚的事:
如何在WEBLOGIC9上建立数据源

在建表时跟在字段后的约束为字段级约束,建完字段后使用CONSTRAINT建立的约束为表
级约束,可以给约束创建约束名。

CONSTRAINT 增加表级约束

如:增加约束,不能同时出现NAME,ADDRESS,AGE相同的数据
    
CREATE TABLE TEST (
        NAME 
VARCHAR2(20NOT NULL,
        ADDRESS 
VARCHAR2(128),
        AGE 
NUMBER(2),
        
CONSTRAINT NAME_ADD_AGE_UNI QNIQUE (NAME,ADDRESS,AGE) 
    )

   

posted on 2008-04-18 10:02 一鸣 阅读(1105) 评论(0)  编辑  收藏 所属分类: SQL


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

公告


常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜