连接查询概念

一、什么是连接查询?
  • 在实际开发中,大部分的情况下都不是从单张表中查询数据,一般都是多张表联合查询最终取出最终结果。
  • 在实际再发中,一般一个业务都会对应多张表,比如学生和班级,最起码两张表。如果只存在一张表中,那么会有较大的冗余,浪费空间。
二、连接查询的分类

根据语法划分:

  • SQL92(一些老DBA可能还在用,DataBase Administrator,数据库管理员)
  • SQL99(比较新的语法)

根据表的连接方式来划分,包括
(a) 内连接

  • 等值连接
  • 非等值连接
  • 自连接

(b) 外连接

  • 左连接
  • 右连接

(c)全连接(这个很少用)

三、在表的连接查询方面有一种现象被称为:笛卡尔现象(笛卡尔乘积现象)
案例:找出每一个员工的部门名称,要求显示员工名和部门名。

**笛卡尔现象:**当两张进行连接查询的时候,如果没有任何条件限制,最终查询的结果条数会是两张表记录条数的乘积。
笛卡尔现象:

select ename,dname from emp,dept;

关于表的别名:
优点:

  1. 执行效率高
  2. 可读性好(多张表的时候)

怎么避免笛卡尔现象,当然是加过滤条件!

思考:避免了笛卡尔现象,会减少记录的匹配次数吗?

  • 不会,次数还是两张表的乘积,但是显示的结果是有效的记录

还是这个案例:找出每一个员工的部门名称,要求显示员工名和部门名。

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.grade,e1.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;

SQL(三)- 连接查询相关推荐

  1. 浅谈sql之连接查询

    SQL之连接查询 一.连接查询的分类 sql中将连接查询分成四类: 内链接 外连接 左外连接 右外连接 自然连接 交叉连接 二.连接查询的分类 数据库表如下: 1.学生表 2.老师表 3.班级表 表用 ...

  2. sql语句连接查询.

    sql语句连接查询. 接触sql语句这么长时间了,牵涉到连接的时候,总是google别人的. 今天好好学学sql 的连接查询 准备工作 : mysql5.6 建表语句 查询语句 select p.id ...

  3. SQL多表查询:SQL JOIN连接查询各种用法总结

    在实际应用中,大多的查询都是需要多表连接查询的,但很多初学SQL的小伙伴总对各种JOIN有些迷糊.回想一下,初期很长一段时间,我常用的似乎也就是等值连接 WHERE 后面加等号,对各种JOIN也是不求 ...

  4. sql三表连接查询 - 使用sqlite 演示

    表: 人员表,职位表,部门表: 现在要做的是:列出所有人员,以及他们所属的部门和职位: 由于要列出tb_user中的每一条记录,需要用左连接查询.这里要连接3个表: 代码如下: SELECT u.sN ...

  5. Sql Server 连接查询

    在操作数据库的时候,经常会使用到inner join,left join,right join,full join.今天用了一个简单的例子记录一下这几个的区别. 1 测试数据 为了方便测试,就不用搞那 ...

  6. SQL 数据库 连接查询 变量、if else、while

    一.连接查询:通过连接运算符可以实现多个表查询. 连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志. 常用的两个链接运算符: 1.join   on(左右连接) 2.uni ...

  7. SQL Server 连接查询(多表连接查询)

    多表连接查询 1.查询的信息来源于多张表,则可以通过两两相连的方式建立多表连接查询 以下是正常多表查询语法,查询三张表的所有数据信息 2.简单多表查询要比多表查询写法更简单,效果是一样的, 简单多表查 ...

  8. SQL server连接查询

    目录 前沿小补充 等值与非等值连接查询 自身连接 外连接 多表连接 前沿小补充 例3.48 查询平均成绩大于等于80分的学生学号和平均成绩 SELECT Sno,AVG(Grade) FROM SC ...

  9. SQL Server 连接查询(内连接查询)

    内连接查询 1.内连接基于连接谓词on,它将两张表的列组合在一起,产生新的结果表 两个表的每一行连接列进行比较,如果满足连接谓词则会组合成一行数据 2.要想进行内连接查询,就必须有连接列,这样才能建立 ...

  10. mysql不同服务器查询_实战操作SQL Server连接查询不同服务器表数据

    今日产品部要导批数据,但是需要连接查询查询的几个表不在同一服务器上.所以我开始是这么干的: 1.查询一台服务器的数据,并导入本地Excel 2.查询另一台服务器的数据,并导入本地Excel 3.Exc ...

最新文章

  1. paddle版fnet_google
  2. python 局域网共享
  3. 把报表的数据导出Excel
  4. LeetCode 464. 我能赢吗(状态压缩+记忆化递归 / 博弈)
  5. mysql+一致性非锁定读_MySQL探秘(六):InnoDB一致性非锁定读
  6. 打造属于自己的Vim神器
  7. web测试和app测试相关
  8. 中级病案信息技术计算机基础知识要点,病案信息技术基础知识考试重点梳理(最新最全).doc...
  9. ESP32 GPIO入门之闪灯
  10. 【net】音乐播放器
  11. 疑难杂症---共享打印机驱动安装失败0x00000bcb错误
  12. 二次开发—Ribbon界面
  13. 传统蓝牙HCI(Bluetooth HCI)的概念介绍
  14. 恶意软件及反病毒学习总结
  15. CentOS7使用mount命令来挂载CDROM
  16. 胡润研究院发布《2018胡润区块链富豪榜》
  17. matplotlib图例中文乱码? 标题部分可以通过设置字体属性解决,但是图例不支持设置字体,该如何解决
  18. ArrayList.add方法底层浅析
  19. java disconnect_Java HttpResponse.disconnect方法代码示例
  20. android程序xy数值设置,如何使用Android中的加速度计在XY平面上测量手机的倾斜度...

热门文章

  1. Android之root手机之后用busybox找到我们需要删除的文件
  2. linux之universal usb installer安装ubuntu
  3. .bash_profile和.bashrc说明
  4. Git之如何解决Error:pathspec ‘/layout/radar_chart.xml‘ did not match any file(s) known to
  5. 企业有了程序员为什么还要用 低代码/无代码
  6. 《看聊天记录都学不会Python到游戏实战?太菜了吧》(7)我用函数写了个特洛伊木马
  7. 重庆大学计算机课程设计,计算机组成原理课程设计报告重庆大学.doc
  8. ios 销毁当前页面重新开启_问:如何强制销毁iOS中的视图控制器?
  9. easyui 修改单元格内容_初学Excel办公软件快速修改文字的方法
  10. php根据分辨率跳转,使用PHP将分辨率转换为Aspect比率