数据库-多表查询

1、笛卡尔积现象,即交叉相乘

多表进行联合查询,不使用关联条件的话,就会产生笛卡尔积现象,产生很多重复无用的数据。select * from emp,dept;

2、多表连接

语法:SELECT [DISTINCT] 列名1,列名2... FROM 表1,表2 WHERE 连接条件 AND 过滤条件;

外连接:

找寻两个表中相同的列:SELECT ename,job,d.deptno,dname FROM emp e,dept d WHERE e.deptno = d.deptno AND job='CLERK';

SELECT ename,sal,grade FROM emp,salgrade s WHERE sal BETWEEN s.losal AND s.hisal;多表连接也可以使用除=外的其他符号进行连接

内连接:

SELECT e.ename,e.job,e.mgr,m.ename 上司 FROM emp e,emp m WHERE e.mgr = m.empno;     把同一个表当作几个表来使用,通过赋予别名

例题:查询员工姓名、工资、工资等级、部门名称,以及他的上司姓名和工资等级,工资等级均以汉字显示。

SELECT e.ename,e.sal,

DECODE(s1.grade,1,'第一等级',2,'第二等级',3,'第三等级',4,'第四等级',5,'第五等级') 等级,

dname,m.ename 上司,m.sal 上司sal,

DECODE(s2.grade,1,'第一等级',2,'第二等级',3,'第三等级',4,'第四等级',5,'第五等级') 等级

FROM emp e,emp m,dept d,salgrade s1,salgrade s2 

WHERE e.mgr = m.empno AND d.deptno=e.deptno

AND (e.sal BETWEEN s1.losal AND s1.hisal) AND (m.sal BETWEEN s2.losal AND s2.hisal);

3、DISTINCT

关键字 distinct 用于返回唯一不同的值,只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 语句中使用

distinct是将所有查询的字段进行对比去重,所有字段都完全相同才会去重

distinct 必须放在查询字段开头进行查询,distinct对NULL是不进行过滤的,即返回的结果中是包含NULL值的。


今日练习:

1、查询部门名为’SALES’的员工信息。

SELECT * FROM emp e,dept d 

WHERE (e.deptno=d.deptno) AND (d.dname='SALES');

2、查询在部门所在地为NEW YORK的员工的员工姓名,部门名称和岗位名称。

SELECT e.ename,d.dname,e.job 

FROM emp e,dept d 

WHERE (e.deptno=d.deptno) AND (d.loc='NEW YORK');


作者:kerwin_chyl

文章链接:https://www.jianshu.com/u/66bf7abdc5a8

本文版权归作者和共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的:(数据库-多表查询)