#要多练练
1.连接查询根据连接方式分为
内连接
等值连接
非等值连接
自连接
外连接
左外连接(左连接)
右外连接(右连接)
当多张表进行连接查询,若没有任何条件进行限制,会
发生什么现象?
会出现笛卡尔积,即两张表的记录的条数的乘积
##哪里用as?为什么这里不能用as?
#sql92:内连接中的等值连接
select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;
#SQL99:内连接中的等值连接,优点:对表连接不满意的话,
#可以再追加where进行过滤。
select e.ename,d.dname from emp e join dept d on e.deptno=d.deptno;
#SQL99:内连接中的非等值连接?
#eg:显示薪水等级、部门名、薪水等
select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;
#找出每个员工的上级领导的名称,说明领导也从属于员工表,所以要
#把一张表看成两张表(a、b两张表)。
select a.ename empname,b.ename leadrname from emp a inner join emp b on a.mgr=b.empno; select a.ename empname,b.ename leadername from emp a join emp b on a.mgr=b.empno;
#找出每个员工对应的部门名称,要求显示全部
#部门名全部显示
select e.ename,d.dname from emp e right join dept d on d.deptno=d.deptno;
#什么时候用外连接?什么时候用内连接?
#内连接的记录条数小于等于外连接,内连接
#是会显示相匹配的信息,对于不完整的信息不会显示
#而外连接(无条件的全部显示)是会对全部进行显示的
#左连接是将左边全部显示出来,而右连接是将右边全部
#显示出来,若无记录则用null来匹配
#案例:找出每个员工对应的领导名,要求显示
#所有的员工
select a.ename empname,b.ename leadername
from emp a
left join emp b
on a.mgr=b.empno;
#把一张表看成a、b两张表
#案例:找出每一个员工对应的部门名称,以及
#该员工对应的工资等级。要求显示员工名、部门
#名、工资等级
#多张表进行连接的语法格式:
select
XXX
from
a
join
b
on
条件
join
c
on
条件;
原理:a和b连接,再用a和c连接。
select
e.ename,d.dname,s.grade
from
emp e
join
dept d
on
e.deptno=d.deptno;
join
salgrade s
on
e.sal between s.losal and s.hisal;