Mysql 多表连接查询

Mysql 多表连接查询

多表连接类型
• 按连接条件分:
• 等值连接
• 非等值连接
• 按其他连接方法分
• 外连接
• 内连接3.1.4 多表连接写法

连接:是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表之间获取数据。
• 语法为:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
在 WHERE子句中书写连接条件。
如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。(如果不加表名作为前缀编译器无法识别来自哪一张表的列会到时查询失败)
N个表相连时,至少需要N-1个连接条件

例:-- – 写一个查询,显示所有工作在CHICAGO并且奖金不为空的员工姓名,工作地点,奖金

SELECT e.ename,d.loc,e.comm
FROM emp e,dept d
WHERE e.deptno=d.deptno 
AND d.loc='CHICAGO' AND e.comm IS NOT NULL

非等值连

WHERE table1.column1 = table2.column2; 称为等值连接所需要的条件
非等值连接:满足所在范围
– 连接 emp 表和salgrade
SELECT ename 姓名,sal 工资,s.grade 工资等级
from emp e ,salgrade s WHERE e.sal BETWEEN s.losal and s.hisal

多表连接的写法分析
1.分析要查询的列都来自于哪些表,构成FROM子句;
2.分析这些表之间的关联关系,如果表之间没有直接关联关系,而是通过另一个中间表关联,则也要在FROM子句中补充中间关联表;
3.接下来在WHERE子句中补充表之间的关联关系,通常N个表,至少要有N-1个关联关系;
4.分析是否还有其它限制条件,补充到WHERE子句的表关联关系之后,作为限制条件;
5.根据用户想要显示的信息,补充SELECT子句。
6.分析是否有排序要求,如果排序要求中还涉及到其它表,则也要进行第2步补充排序字段所在的表,并且添加表之间的关联关系;

自连接
自身连接,也叫自连接,是一个表通过某种条件和本身进行连接的一种方式,就如同多个表连接一样。

SELECT worker.ename WNAME,manager.ename LNAME
FROM     emp worker, emp manager
WHERE     worker.mgr = manager.empno;

在这里插入图片描述
例:
– 1. 查询所有工作在NEW YORK和CHICAGO的员工姓名,员工编号,以及他们的经理姓名,经理编号。

SELECT worker.ename,worker.empno,manager.ename,manager.empno
FROM emp worker,emp manager,dept d
WHERE worker.mgr=manager.empno AND worker.deptno=d.deptno AND
d.loc IN ('NEW YORK','CHICAGO')

在这里插入图片描述

外部链接
在多表连接时,可以使用外部连接来查看哪些行,按照连接条件没有被匹配上。
左外连接以FROM子句中的左边表为基表,该表所有行数据按照连接条件无论是否与右边表能匹配上,都会被显示出来。
右外连接以FROM子句中的右边表为基表,该表所有行数据按照连接条件无论是否与左边表能匹配上,都会被显示出来

左外连接
查询所有雇员姓名,部门编号,部门名称,包括没有部门的员工也要显示出来

SELECT     e.ename,e.deptno,d.loc 
FROM       emp e 
LEFT OUTER JOIN dept d 
ON         (e.deptno = d.deptno);

右外连接
查询所有雇员姓名,部门编号,部门名称,包括没有员工的部门也要显示出来

SELECT     e.ename,e.deptno,d.loc 
FROM       emp e 
RIGHT  OUTER JOIN dept d 
ON         (e.deptno = d.deptno);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值