一、多表关系介绍
2、多表查询概述
emp表:
dept部门表:
之所以系统将emp的字段id写成emp.id是因为dept表也有个字段叫id,防止重复。
where条件是为了去除无用的笛卡尔积。
3、内连接
结果:
ps:1、其中 emp e是给emp表起别名。2、inner join中inner关键字可省略。3、隐式与显式内连接语法不同,效果相同。
4、外连接
ps:1、即使陈友谅数据没有dept_id它也可以查出来,这是左外连接与内连接不同之处。2、outer关键字可省略
ps:1、e.*是因为要查对应员工信息即所有字段。2、一般用左外多一点,因为右外也可用左外来写:
5、自连接
实例的表为:
通过自己的managerid连接对应id
6、联合查询
PS:1、or也可以,但不建议。2、联合查询就是简单将两表查询结果合并,故可能有重复,如鹿杖客出现了两次,使用union关键字可去重。3、对红字理解:就不行,因为第二个只有name字段与第一个*的字段个数不同。
7.子查询
标量子查询:
列子查询:
行子查询:
括号内部返回的是一行数据。
表子查询:
也常用作临时表作为查询对象:
8、练习
distinct关键字用于去重。
可以直接后面跟where关键字
此处为隐式内连接,注意链接条件与以往不同。s.losal,s.hisal是为了验证结果的,实际有e.*和s.grade字段就可以
需求6:
此处涉及三张表的联合查询,使用内连接。涉及n张表的联合查询至少有n-1个连接条件。
需求7:
需求8、9是标量子查询,简单,不演示
需求10:
用到了自连接和子查询。但有点看不懂,建议结合a(查询指定部门平均薪资)想想
需求11:
select之后也可以出现子查询
需求12:
总结:多表查询就是通过连接条件消除无效的笛卡尔积!复杂一点会涉及到多张表或联合运用子查询和自连接等方法