网站设计与开发培训,毕业设计做网站选题,网站开发项目 工作分解图,网站栏目做跳转连接查询概念
一、什么是连接查询#xff1f;
在实际开发中#xff0c;大部分的情况下都不是从单张表中查询数据#xff0c;一般都是多张表联合查询最终取出最终结果。在实际再发中#xff0c;一般一个业务都会对应多张表#xff0c;比如学生和班级#xff0c;最起码两…连接查询概念
一、什么是连接查询
在实际开发中大部分的情况下都不是从单张表中查询数据一般都是多张表联合查询最终取出最终结果。在实际再发中一般一个业务都会对应多张表比如学生和班级最起码两张表。如果只存在一张表中那么会有较大的冗余浪费空间。
二、连接查询的分类
根据语法划分
SQL92一些老DBA可能还在用DataBase Administrator数据库管理员SQL99比较新的语法
根据表的连接方式来划分包括 a 内连接
等值连接非等值连接自连接
b 外连接
左连接右连接
c全连接这个很少用
三、在表的连接查询方面有一种现象被称为笛卡尔现象笛卡尔乘积现象 案例找出每一个员工的部门名称要求显示员工名和部门名。
**笛卡尔现象**当两张进行连接查询的时候如果没有任何条件限制最终查询的结果条数会是两张表记录条数的乘积。 笛卡尔现象
select ename,dname from emp,dept;关于表的别名 优点
执行效率高可读性好多张表的时候
怎么避免笛卡尔现象当然是加过滤条件
思考避免了笛卡尔现象会减少记录的匹配次数吗
不会次数还是两张表的乘积但是显示的结果是有效的记录
还是这个案例找出每一个员工的部门名称要求显示员工名和部门名。
select e.ename,d.dname
from emp e,dept d //as 省略
where e.deptno d.deptno;这是表查询的原理但是属于SQL92以后不用。我们有更高级的
内连接查询
等值连接非等值连接自连接
一、内连接查询等值连接
内连接之等值连接最大特点是条件是等量关系。
还是这个案例找出每一个员工的部门名称要求显示员工名和部门名。
SQL92:太老不用了 select e.ename,d.dnamefromemp e, dept dwheree.deptno d.deptno;SQL99常用的
select e.ename,d.dname
from emp e
inner join //inner可以省略dept d //as 省略
on e.deptno d.deptno;语法
……A
inner join //inner可以省略带着可读性好一些B
on连接条件
where
……SQL99 我们现在用的join on 语法
相比SQL92优点表的连接条件和后来的where条件分离了。
二、内连接查询非等值连接
内连接之非等值连接最大特点是连接条件中的关系是非等量关系。
案例找出每个员工的工资等级要求显示员工名、工资、工资等级
员工表 工资等级表
select e.ename,e.sal,s.grade
fromemp e
inner join //inner 可以省略salgrade s
one.sal between s.losal and s.hisal;三、内连接查询非等值连接
内连接之自连接最大特点是一张表看作两张自己连接自己。
案例找出每个员工的上级领导要求显示员工名和对应的上级领导名 领导表是自己写出来的 筛选出员工表里面是领导的 核心
内连接之自连接最大特点是一张表看作两张自己连接自己。
员工的领导编号 领导的员工编号
select a.ename as 员工名,b.ename as 领导名
fromemp a
inner joinemp b
ona.mgr b.empno;注意KING是大老板没有上级。所以得到的记录只有13条。
外连接使用场景多
左连接右连接
什么是外连接和内连接有什么区别
内连接假设A和B表进行连接使用内连接的话凡是A表和B表能够匹配上的记录查询出来这就是内连接。AB两张表没有主副之分两张表是平等的。外连接假设A和B表进行连接使用外连接的话AB两张表中有一张表是主表一张表是副表主要查询主表中的数据捎带着查询副表当副表中的数据没有和主表中的数据匹配上副表自动模拟出NULL与之匹配。外连接的分类左外连接左连接表示左边的这张表是主表。右外连接右连接表示右边的这张表是主表。左连接有右连接的写法右连接也会有对应的左连接的写法。一、外连接左连接
案例1找出每个员工的上级领导所有员工必须全部查询出来。 领导表是自己写出来的 筛选出员工表里面是领导的 内连接
select a.ename 员工, b.ename 领导
fromemp a
joinemp b
ona.mgr b.empno;注意KING是大老板没有上级。所以得到的记录只有13条。
外连接左外连接/左连接
select a.ename 员工, b.ename 领导
fromemp a
left outer join // outer可以省略。emp b
ona.mgr b.empno;外连接右外连接/右连接
select a.ename 员工, b.ename 领导
fromemp b
right outer join // outer可以省略。emp a
ona.mgr b.empno;外连接最重要的特点是主表的数据无条件的全部查询出来。14条数据全部查询出来。
案例2找出哪个部门没有员工 员工表 部门表 分析用外连接部门表为主表
select d.*
fromemp e
right outer joindept d
one.deptno d.deptno
wheree.empno is null;2.9、三张表怎么连接查询 案例找出每一个员工的部门名称以及工资等级。 员工表 部门表 薪资表 注意解释一下 ....AjoinBjoinCon...表示A表和B表先进行表连接连接之后A表继续和C表进行连接。 或者说A表和B表先进行表连接AB连接的结果再与C连接。
上面案例找出每一个员工的部门名称以及工资等级。
select e.ename,d.dname,s.grade
fromemp e
inner joindept d
one.deptno d.deptno
inner joinsalgrade s
one.sal between s.losal and s.hisal;案例升级找出每一个员工的部门名称以及工资等级外加上级领导。
select e.ename,d.dname as 员工,s.gradee1.ename as 领导
fromemp e
inner joindept d
one.deptno d.deptno
inner joinsalgrade s
one.sal between s.losal and s.hisal
left outer joinemp e1
on e.mgr e1.empno;