您的位置:首页 > 数据库

【数据库】 sql的一些基本语法(三)

2015-02-11 09:13 302 查看

(一)from 表1 join 表2 on(连接限制条件)

select ename, sal from emp

join (select max(sal),  deptno from emp group by deptno ) t

on (emp.sal = t.max(sal) and emp.deptno = t.deptno); //显示每个部门工资最高的人的姓名和工资

注: 两个表不一定要有相同的属性才能连接

例:select ename, dname, sal, salgrade from emp e

join dept d on (e.deptno = d.deptno)             //雇员与部员连接 通过 deptno

join salgrade s on(e.sal between s.losal and s.hisal) ;           //工资等级表与雇员表的连接,通过雇员的工资在等级表中比较

遇到了一个问题:


sql:ORA-00918: 未明确定义列的错误。(连接的两个表中属性名重复,而又需要查询此属性。要指定是哪个表里的属性)

上面语句

select ename, sal from emp

join (select max(sal),  deptno from emp group by deptno ) t

on (emp.sal = t.max(sal) and emp.deptno = t.deptno); //显示每个部门工资最高的人的姓名和工资

当我在select 中想要添加查找 deptno 属性时报错,最后检查原因发现在后面的两张表里都有deptno属性,
虽然这个属性在两张表里的内容相同,但在select中必须指定是哪个表里的deptno

修改后:

select ename, sal , e.deptno from emp

join (select max(sal),  deptno from emp group by deptno ) t

on (emp.sal = t.max(sal) and emp.deptno = t.deptno); //显示每个部门工资最高的人的姓名和工资

(二) 自连接

在一个表里两个相关属性的连接,比如emp表里 雇员属性对应的上司属性本身也是一个雇员属性
实现一:  (where)
select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;  //显示每个员工及其对应的经理人的姓名
实现二: (join,on)
select e1.ename, e2.ename from emp e1 join emp e2 on (e1.mgr = e2.empno);

(三) 外连接

左外连接 : left join
右外连接: right join
全外连接: full join
显示连接的两张表中没有对应属性的属性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: