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

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

缺点:在上语句中,实际先查询 表a,b 两个表的cross join 【笛卡儿积】,然后通过正确a.ID=b.ID 过滤正常的数据,这是一种低效利用数据库资源。
为了避免创建笛卡儿积,应该使用inner join 可以简写 join 但 left [ outer ] join on 和 right [ outer ] join on 、full join on不能省略
sql 执行的顺序 : from where group 、having、select 、order
from 表1,表2 就先cross join 交叉连接(笛卡儿积)

---笛卡儿积select a.ID ,b.Name from Table1 as a, Table2 as b---### 等价select a.ID ,b.Name from Table1 as across join Table2 as b

② join

selecta.ID ,b.Name from Table1 a inner join Table2 bon 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 结果是一样的。