目录
1、什么是连接查询?
从一张表中单独查询,称为单表查询。emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。这种跨表查询,多张表联合起来查询数据,被称为连接查询。
2、连接查询的分类?
根据语法的年代分类:
SQL92:1992年的时候出现的语法
SQL99:1999年的时候出现的语法
根据表连接的方式分类:
内连接:等值连接非等值连接自连接
外连接:左外连接(左连接)
右外连接(右连接)
全连接
3、笛卡尔积现象
当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是两张表条数的乘积,这种现象被称为:笛卡尔积现象。(笛卡尔发现的,这是一个数学现象。)
怎么避免笛卡尔积现象?连接时加条件,满足这个条件的记录被筛选出来!
select
e.ename, d.dname
from
emp e, dept d
where
e.deptno = d.deptno;
注意:通过笛卡尔积现象得出,表的连接次数越多效率越低,尽量避免表的连接次数。
4、内连接之等值连接
案例:查询每个员工所在部门名称,显示员工名和部门名。
emp e和dept d表进行连接。条件是:e.deptno = d.deptno
SQL92语法:
select
e.ename,d.dname
from
emp e, dept d
where
e.deptno=d.deptno and 后面加条件;
sql92的缺点:结构不清晰,表的连接条件,和后期进一步筛选的条件,都放到了where后面。
SQL99语法:
select
e.ename,d.dname
from
emp e
join
dept d
on
e. deptno = d. deptno
where
…;
sql99优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where
SQL99语法:select ... from a join b on a和b的连接条件 where 筛选条件
5、内连接之非等值连接
selecte
ename, e.sal, s.grade
from
emp e
inner join //inner可以省略
salgrade s
on
e.sal between s.losal and s.hisal;|
条件不是一个等量关系,称为非等值连接。
6、内连接之自连接
案例:查询员工的上级领导,要求显示员工名和对应的领导名?
将一张表看成两张表
select
a.ename as'员工名',b.ename as'领导名'
from
emp a
join
emp b
on
a.mgr = b.empno;
以上就是内连接中的:自连接,技巧:一张表看做两张表。
7、外连接
外连接(右外连接):
select
e.ename,d.dname
from
emp e
right outer join //outer可以省略,带着可读性强
dept d
on
e.deptno T d.deptno;
right表示将join关键字右边的这张表看成主表,主要是为了将这张表的数据全部查询出来,捎带着关联查训表。在外连接当中,两张表连接,产生了主次关系。内连接两张表没有主次关系。
带有right的是右外连接,又叫做右连接。带有left的是左外连接,又叫做左连接。任何一个右连接都有左连接的写法。任何一个左连接都有右连接的写法。
8、多张表连接
语法:
select
...
from
a
join
b
on
a和b的连接条件
join
c
on
a和c的连接条件
join
d
on
a和d的连接条件
案例:找出每个员工的部门名称以及工资等级,还有上级领导,要求显示员工名、领导名、部门名、薪资、薪资等级
select
e.ename,e.sal,d.dname,s.grade,l.ename
from
emp e
join
dept d
on
e.deptno = d.deptno
join
salgrade s
on
e.sal between s.losal and s.hisal I
left join
emp l
on
e.mgr = l.empno;