SQL多表查询的注意点,以及 join on 、where 执行的顺序 | 您所在的位置:网站首页 › etc电子发票可以合并开吗 › SQL多表查询的注意点,以及 join on 、where 执行的顺序 |
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的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。 假设有两张表: |
CopyRight 2018-2019 实验室设备网 版权所有 |