多表查询包括,等值连接,不等值连接,自然连接。
限制重复的列名
在多表中使用表前缀限制列名
使用表前缀可以提高效率
使用表别别名代替全表名前缀
表别名提供一个较短的名称使sql的代码量更少,使用较少的内存
在表不同的表中具有相同的列名的列可以用别名加以区分。
select e.ename,e.deptno,d.deptno,d.dname
from emp e,dept d
where e.deptno=d.deptno;
1.自然连接
natural join句子会以两个表中具有相同的名字的类为条件创建等值连接。
在表中查询满足等值条件的数据
如果只是列名相同而数据类型不同,则会产生错误
表自连接
表里有从属关系
由上图可以看出在empno和mgr列中有相等的编号,说明有人既是员工也是经理,那么这两列就有关系,我们就可以通过自连接来查询某员工的领导或者是某领导下的员工有哪些
例:
我们通过图上的sql语句可以查询出empno的领导编号和姓名,这里重要的是用到员工编号和经理编号的相同。
2 非等值连接
非等值连接:a个表中的某一列的值在b表中的某一区间。
例:
SQL> select e.ename,e.sal,d.grade
2 from emp e,salgrade d
3 where e.sal between d.losal and d.hisal;
ENAME SAL GRADE
---------- ---------- ----------
SMITH 800 1
JAMES 950 1
ADAMS 1100 1
WARD 1250 2
MARTIN 1250 2
MILLER 1300 2
TURNER 1500 3
ALLEN 1600 3
CLARK 2450 4
BLAKE 2850 4
JONES 2975 4
SCOTT 3000 4
FORD 3000 4
KING 5000 5
以上命令就是在emp表中的工资列在salgrade有工资的定级标准,以此来输出emp表中的工资等级。
3.内,外,全连接的区别
•两个表在连接过程中只返回匹配的,被称为内连接
• 两个表在连接过程中除了返回满连接条件的以外,还返回左(或右)表中不满⾜条件的,这种连接称为左(或右)外连接
• 两个表在连接过程中除了返回满足连接条件的以外,还返回两个表中不满条件的,这种连接称为全外连接。
例:
外连接
select e.ename,d.deptno
2 from emp e, dept d
3 where e.deptno(+)=d.deptno;
ENAME DEPTNO
---------- ----------
SMITH 20
ALLEN 30
WARD 30
JONES 20
MARTIN 30
BLAKE 30
CLARK 10
SCOTT 20
KING 10
TURNER 30
ADAMS 20
JAMES 30
FORD 20
MILLER 10
40
15 rows selected.
4 笛卡尔积
笛卡尔积产的条件
1.) 连接条件被遗漏
2. )连接条件不全
3. )所有表中所有的互相连接
• 为了避免笛卡尔积,可以在WHERE加有效的连接条件
个人感悟:
多表查询就是用一个表中有相互关联的两列或者多个表中有关系的列相将他们关联,通过基础的sql语句查询出自己想要的结果