1.连接查询:
------内连接:
-----------等值连接:
-----------非等值连接:
-----------自连接:
------外连接:
-----------左外连接(左连接):
-----------右外连接(右连接):
表的连接查询-----笛卡尔积。(查询没有限制,查询结果条数是两张表的条数的乘积)。
2.案例:找出每个员工的部门名称,要求显示员工名和部门名:SELECT e.ename,d.dname FROM emp e,dept d;
56条。
2.1表的别名:SELECT e.ename,d.dname FROM emp e,dept d;
好处:执行效率高,可读性好。
2.2避免了笛卡尔积现象(加条件进行过滤),匹配次数依旧不变,效率依旧不变,只是显示出来的少了,显示的有效记录。
案例:找出每个员工的部门名称,要求显示员工名和部门名:
select
----e.ename,d.dname
from
----emp e , dept d
where
----e.deptno = d.deptno;//sql 92 不用
14条记录,避免了笛卡尔积,但是次数依旧是56次。
2.3 内连接之等值连接:最大的特点:连接条件中的关系是等值关系。
案例:找出每个员工的部门名称,要求显示员工名和部门名:
sql99:
select
----e.ename,d.dname
from
----emp e
inner join //inner可省略,带inner可读性好,一看就是内连接。
----dept d
on
----e.deptno = d.deptno;//等值连接
语法:
...
--A
join
--B
on
--连接条件
where
...
表的连接条件和后来的where的条件分离了。
2.4 内连接之非等值连接:最大的特点是连接条件中的关系是非等量关系
案例:找出每个员工的工资等级,要求显示员工名、工资、工资等级:
SELECT
---e.ename,e.sal,s.grade
from
---emp e
join
---salgrade s
on
---e.sal between s.losal and s.hisal;//非等值连接
2.5 *内连接之自连接:最大的特点是:一张表看成两张表,自己连自己。
*案例:找出每个员工的上级领导,要求显示员工名和对应的领导名:
select
---a.ename as '员工名',b.ename as '领导名'
from
---emp a
join
---emp b
on
---a.mgr = b.empno; //
老板也是员工:员工的领导编号= 领导的员工编号