课堂笔记 - Oarcle - 03 连接查询

--为什么要表连接进行查询?

--查询部门名称为SALES的员工信息

--EMP DEPT 如何进行表的连接查询?

--两种方式:SQL1992 和 SQL1999

--SQL1992 语法:

/*

select table1.collumn,table2.colum

from table1,table2

where table.column1 = table2.column2 ;

 

where后跟表的连接条件

连接类型:

1、笛卡尔积 :表*表

select * from emp,dept;

 

2、等值连接 :列 = 列

select * from emp e,dept d where e.deptno = d.deptno;

 

3、非等值连接 :列 != 列

--查询员工的薪水等级

select e.ename,s.grade from emp e,salgrade s where e.sal between s.losal and s.hisal;

 

4、自连接 :表自己连接自己,用于表中有意义的两个或多个列

--查询员工上司的姓名:以‘XXX’的上司是‘XXX’显示

welect e1.ename || '的上司是' || e2.enamefrom emp e1,emp e2 where e1.mgr = e2.mpo;

 

5、外连接 :在满足一张表的内容都显示的基础上,连接另外一张表,如果连接匹配正常显示,连接不匹配,另外一张表补null

,如果连接匹配则正常显示

select * from emp e, dept d where e.deptno = d.deptno (+)

‘(+)’在左边,称这次查询为‘右外连接查询’

‘(+)’在右边,称这次查询为‘左外连接查询’

‘(+)’在等号的哪一边,哪张表就补null

 

*/

--sql 1992 缺点一:表的连接条件和表的过滤放在了一起

-- 查询员工工资大于2000的部门名称

select e.ename, d.dname from emp e ,dtpt d where e.deptno = d.deptno and e.sal >2000;

--缺点二:不容易识别

 

/*

--SQL1999 语法:

select a.column,b.colum from 表A xxx join 表B on 连接条件

 

连接类型:

1、CROSS JOIN 交叉连接,就是笛卡尔积

select * from rmp cross join dept;

 

2、NATURAL JOIN 自然连接,找到两张表中具有相同名称列,进行等值连接

select * from emp natural join dept;

 

3、 INNER JOIN 内连接(INNER 关键字可以省略)

 

--等值连接

SELECT E.ENAME, D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO where e.sal > 2000;

 

--非等值连接

SELECT E.ENAME, S.GRADE FROM EMP E INNER JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL;

 

--自连接

SELECT EL.ENAME || '的上司是' || E2.ENAME FROM RMP E1 INNER JOIN EMP E2 ON E1.MGR = E2.EMPNO;

 

--外连接:(OUT 关键字可以省略)

4、LEFT OUTER JOIN

SELECT * FROM EMP E LEFT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

 

5、RIGHT OUTER JOIN

SELECT * FROM EMP E RIGHT OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

 

6、FULL OUTER JOIN

SELECT * FROM EMP E FULL OUTER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

 

*/

 

--如何进行多表连接:查询员工的姓名、薪水、部门名称级工资等级

SELECT E.ENAME,E.SAL,D.DNAME,S.GRADE FROM EMP E ,DEPT D, SALGRADE S WHERE E.DEPTNO = B.BEPTNO AND E.SAL BETWEEN S.LOSAL AND S.HISAL;

 

SELECT E.ENAME,E.SAL,D.DNAME ,S.GRDE FROM EMP E JOIN DEPT D ON E.DEPTNO = D.DEPTNO JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL;

转载于:https://my.oschina.net/u/4118325/blog/3038869

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值