--为什么要表连接进行查询?
--查询部门名称为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;