SQL多表查询的注意点,以及 join on 、where 执行的顺序 您所在的位置:网站首页 etc电子发票可以合并开吗 SQL多表查询的注意点,以及 join on 、where 执行的顺序

SQL多表查询的注意点,以及 join on 、where 执行的顺序

#SQL多表查询的注意点,以及 join on 、where 执行的顺序| 来源: 网络整理| 查看: 265

1、多表查询 where 、 join ①where 实现多表查询

select a.ID ,b.Name from Table1 as a , Table2 as b where a.ID=B.ID

缺点:在上语句中,实际先查询 表a,b 两个表的cross join 【笛卡儿积】,然后通过正确a.ID=b.ID 过滤正常的数据,这是一种低效利用数据库资源。 为了避免创建笛卡儿积,应该使用inner join ② join

select a.ID ,b.Name from Table1 a inner join Table2 b on a.ID =b.ID

优点:如上面语句,使用inner join 这样数据库就只产生等于ID 的条目标结果。增加了查询效率。

有些数据库系统会识别出 WHERE连接并自动转换为 INNER JOIN。在这些数据库系统中,WHERE 连接与INNER JOIN 就没有性能差异。但是, INNER JOIN 是所有数据库都能识别的,因此DBA会建议在你的环境中使用它。

join on where 执行顺序

left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录。

right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录。

inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行。

full join:外连接,返回两个表中的行:left join + right join。

cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

关键字: on

数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 【举例】 在使用left jion时,on和where条件的区别如下:

1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

假设有两张表: 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 inner join on where 结果是一样的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有