MySQL多表连接查询

本文深入解析SQL中的各种连接查询方式,包括笛卡尔积、等值连接、自然连接、使用子句、ON子句、以及左外连接和右外连接等。通过实例说明每种连接的特点和应用场景。

 

笛卡儿积(交叉连接)

SELECT * FROM 表1名,表2名;

查询出的数据条数=表1中数据条数*表2中数据条数

等值连接

多表联合查询时,添加where等值连接条件

SELECT * FROM emp,dept WHERE emp.deptno = dept,deptno;

自身连接

一个表通过某连接条件和本身进行连接的方式,一般都会给表起一个别名,以防混淆。

SELECT ename, mgrname FROM emp e1,emp e2 WHERE e1.mgr = e2.empno;
也可以用join连接:
SELECT ename, mgrname FROM emp e1 JOIN emp e2 ON e1.mgr = e2.empno;

以下是ANSI(美国国家标准协会) SQL:1999标准的连接语法

交叉连接 等同于笛卡尔积

使用CROSS JOIN子句完成

自然连接

自然连接是对两个表相同名字和数据类型的列进行的等值连接。如果两个表之间相同名称的列的数据类型不同,则会产生错误。

使用NATURAL JOIN来完成。

USING子句

自然连接是使用所有名称和数据类型相匹配的列作为连接条件,而USING子句可以指定用某个或某几个相同名字和数据类型的列作为连接条件。

注意:

  1. 如果有若干个列名称相同但数据类型不同,自然连接子句可以用USING子句来替换,以指定产生等值连接的列。
  2. 如果有多于一个列匹配的情况,使用USING子句只能指定其中的一列。
  3. USING子句中用到的列不能使用表名和别名作为前缀。
  4. NATURAL JOIN子句和USING子句是相互排斥的,不能同时使用。

ON 子句

如果要指定任意连接条件,或指定要连接的列,则可以使用ON子句。用ON将连接条件和其他检索条件分隔开,其他检索条件写在WHERE子句。

SELECT ename 员工姓名,deptname 部门名称,sal 工资,grade 工资级别
FROM emp JOIN dept
ON emp.deptno = dept.deptno
JOIN salgrade
ON sal BETWEEN losal AND hisal
WHERE grade >= 4;

外部连接

外连接分为左外连接和右外连接,左外连接以FROM子句的左边表为基准表,会无条件显示左边表的所有内容;右外连接则显示右面的表。

左外连接  LEFT OUTER JOIN ON或 LEFT JOIN ON 

右外连接 RIGHT OUTER JOIN ON或 RIGHT JOIN ON 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值