MySQL(四):联接与集合操作

但需要注意的是,不同联接类型执行的步骤不同,对于CROSS JOIN,只应用第一个阶段的笛卡尔积(单纯进行笛卡尔积),INNER JOIN应用第一和第二个步骤(进行笛卡尔积之后进行去重,去重的是ON过滤器进行过滤),OUTER JOIN应用所有的前三个步骤(进行笛卡尔积然后进行去重,去重的是ON过滤器进行过滤,然后进行保留表数据的插入)。新旧查询语法MySQL数据库支持两种不同的内联接操作语法。//新,称为(ANSI 89语法)SELECT … FROM a,b WHERE a.x = b.x;/
摘要由CSDN通过智能技术生成

但需要注意的是,不同联接类型执行的步骤不同,对于CROSS JOIN,只应用第一个阶段的笛卡尔积(单纯进行笛卡尔积),INNER JOIN应用第一和第二个步骤(进行笛卡尔积之后进行去重,去重的是ON过滤器进行过滤),OUTER JOIN应用所有的前三个步骤(进行笛卡尔积然后进行去重,去重的是ON过滤器进行过滤,然后进行保留表数据的插入)。

新旧查询语法

MySQL数据库支持两种不同的内联接操作语法。

//新,称为(ANSI 89语法)

SELECT … FROM a,b WHERE a.x = b.x;

//旧 ANSI 92

SELECT … FROM a INNER JOIN b ON a.x = b.x

CROSS JOIN

CROSS JOIN是对两个表执行笛卡尔积,返回两个表中所有列的组合,若左表有m行数据,右表有n行数据,则CROSS JOIN将返回m*n行的表(笛卡尔积)

交叉联接也有两种不同的SQL语法,结果也是一样的

SELECT … FROM t1 CROSS JOIN t2;

SELECT … FROM t1,t2; //不进行过滤的内联接

注意

如果是同一张表进行交叉联接,是要使用别名的,否则会报错

在这里插入图片描述

举个栗子

//会报错

SELECT * FROM t3,t3;

SELECT * FROM t3 CROSS JOIN t3;

//正确写法

SELECT * FROM t3 as a,t3 as b;

SELECT * FROM t3 as a CROSS JOIN t3 as b;

INNER JOIN

通过INNER JOIN用户可以根据一些过滤条件来匹配表之间的数据,在逻辑查询的三个步骤中前两个(形成笛卡尔积表,ON过滤器过滤数据),INNER JOIN没有第三步操作,也就是不会添加保留表的外部行,这是和OUTER JOIN最大的区别之一,也正因为不会添加外部行,所以过滤条件用在ON或者WHERE子句中产生的结果是没有区别的。

//找出部门为d001的经理的用户编号、姓名

//INNER是可以省略的

SELECT a.emp_no,first_name.last_name FROM employees a

[INNER] JOIN dept_manager b ON a.emp_no = b.emp_no

WHERE dept_no = ‘d001’;

//将WHERE的过滤交给ON实现也可以

SELECT a.emp_no,first_name,last_name FROM employees a

[INNER] JOIN dept_manager b ON a.emp_no = b.emp_no

AND dept_no = ‘d001’;

//另一种版本(ANSI 89)

//使用ANSI 89的话,只能使用WHERE进行过滤,如果忘记给条件的话,是很危险的,可能会返回大面积的笛卡尔积

SELECT a.emp_no,first_name,last_name FROM employees a,dept_manager b

WHERE a.emp_no = b.emp_no AND dept_no = ‘d001’;

需要注意的是,在MySQL中使用INNER JOIN是可以没有ON的,所以同样没有给过滤条件的话,也是会返回大面积的笛卡尔积,在MySQL数据库中,CROSS JOI

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值