sql多表查询有很多种方法,如有自然连接 INNER JOIN,外边查询LEFT JOIN,交叉查询 JOIN,交叉连接JOIN等join on left on 等多的是哦。
下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:
Select * FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city
又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state) :
Select a.*,p.pub_id,p.pub_name,p.country FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city
外边查询
Select a.*,b.* FROM luntan LEFT JOIN usertable as b ON a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市 :Select a.*,b.* FROM city as a FULL OUTER JOIN user as b ON a.username=b.username
交叉查询 交叉连接不带Where 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
Select type,pub_name FROM titles CROSS JOIN publishers ORDER BY type
使用左外连接将论坛内容和作者信息连接起来:Select a.*,b.* FROM luntan LEFT JOIN usertable as b ON a.username=b.username
下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市 :
Select a.*,b.* FROM city as a FULL OUTER JOIN user as b ON a.username=b.username
交叉连接不带Where 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的 数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记 录数将等 于6*8=48行。
Select type,pub_name FROM titles CROSS JOIN publishers orDER BY type
下面我们来看一个我写的多表查询吧
$sql =
"Select zgy_jobs_faces.*,zgy_jobs_index.*,zgy_jobs_option.*
from zgy_jobs_faces,zgy_jobs_index,zgy_jobs_option
where zgy_jobs_option.mulplace ='$city'
and zgy_jobs_faces.djobskinds ='$parttime'
and zgy_jobs_faces.cid= zgy_jobs_option.cid
and zgy_jobs_option.cid = zgy_jobs_index.cid
group by zgy_jobs_faces.jname
order by zgy_jobs_option.jid desc limit 0,30";
用group by 过滤重复的数据