table a{
name
no
age
}
table b{
no
card
curse1
curse2
}
no和name为一一对应的,现在我想根据card得到一个查询结果
card
no
name
curse1
curse2
请教我该怎么写这条SQL语句
name
no
age
}
table b{
no
card
curse1
curse2
}
no和name为一一对应的,现在我想根据card得到一个查询结果
card
no
name
curse1
curse2
请教我该怎么写这条SQL语句
select b.card,b.no,a.name,b.curse1,b.curse2
from a inner join b on a.no=b.no
select b.card,b.no,a.name,b.curse1,b.curse2
from a inner join b on a.no=b.no
select b.card,b.no,a.name,b.curse1,b.curse2
from a left join b on a.no=b.noinner join 只要a.b中含有等值就列出,最终行数等于a.b中条件匹配的行
left join 匹配a.b 最终行数等于a的行数
from a inner join b on a.no=b.no
select b.card,b.no,a.name,b.curse1,b.curse2
from a,b where a.no=b.no
不过 inner join 是标准 sql,所有数据库都通用,推荐用 inner join。
select b.card,b.no,a.name,b.curse1,b.curse2
from a inner join b on a.no=b.no
这样写
主表 含有子表A,B,C的外键ID当查询主表每行数据对应的A,B,C是否已经填列时,必须是left join,类似如下:
父表
id aid bid cid此时用left join
select t1.id,t2.aid,t3,bid,t4.cid from t1
left join t2 on t1.aid = t2.id
left join t3 on t1.bid = t3.id
left join t4 on t1.cid = t4.id这样当A,B,C有不存在的数据时,将返回类似结果
1,null,null,x
只讨论 where 和 inner join,left join 本来就不一样。
否则如果查询分析器看到的执行计划和通过 ADO 调用的执行计划不同,就做不到通过查询分析器来确定 SQL 语句的优劣。
复杂的 SQL 往往有多种写法,性能上差1个数量级很正常,这就需要通过查询分析器来选优了。当然也许其它数据库也支持在 where 中连接表,是否有优化也不一定。不过在 SQL Server 中是一样的。