jion 语句有三种,inner join, left outer join 和 right outer join 都可以简写,分别为jion,left join,right jion。
jion语句可以用来组合两个表中的记录,只要在公共字段之中有相符的值即可,该语句联合两个表查询得到的结果是可以添加新的数据,可以把它看成将两个具有相关内容的表联接在一起新生成的表,而一般的select 语句没有这个功能。
1) 内连接,inner join ... on
语句格式:
FROM (((表1 INNER JOIN 表2 ON 表1.字段号=表2.字段号)
INNER JOIN 表3 ON 表1.字段号=表3.字段号)
INNER JOIN 表4 ON Member.字段号=表4.字段号)
INNER JOIN 表X ON Member.字段号=表X.字段号
例:
SELECT * FROM (((Member INNER JOIN MemberSort ON Member.MemberSort=MemberSort.MemberSort) INNER JOIN MemberLevel ON Member.MemberLevel=MemberLevel.MemberLevel) INNER JOIN MemberIdentity ON Member.MemberIdentity=MemberIdentity.MemberIdentity) NNER JOIN Wedlock ON Member.Wedlock=Wedlock.Wedlock ORDER BY MemberDate DESC
内连接的功能是,把两个表相关联的记录列出来,必须是相关联的记录。
2)左外连接,left outer join ... on
语句格式:
FROM [表名1] LEFT JOIN [表名2] ON [表名1.字段A] 〈关系运算符〉[表名2.字段B]
其实LEFT JOIN 的功能就是将LEFT左边的表名1中的所有记录全部保留,而将右边的表名2中的字段B与表名1.字段A相对应的记录显示出来(当使用SELECT * 时)。而RIGHT JOIN 和LEFT JOIN 相反。
外连接的功能是,把LEFT左边的表中的所有记录保留,而右边表只保留相关联的记录,也就是先执行一次INNER JOIN,然后把LEFT左边的表中的与右边表没有任何关联的记录也保留,而右边表的字段为null.
3)右外连接,right outer join ... on
与 left join左右相反。
4)全连接,full join ... on(不常使用,只能用于outer)
功能结合了以上三种联军,先执行一次inner join,然后把两个表的多余字段都保留,但连接的对应字段为null.
如果想将几个表联接起来,在JOIN操作中我们可以进行嵌套操作,有三个表:表1、表2、表3,现在将三个表联接起来:
FROM (表1 INNER JOIN 表2 ON 表1.序号=表2.序号)
INNER JOIN 表3 ON 表1.序号=表3.序号
通俗的讲:
A left join B 的连接的记录数与A表的记录数同
A right join B 的连接的记录数与B表的记录数同
A left join B 等价B right join A
table A: Field_K, Field_A 1 a 3 b 4 c table B: Field_K, Field_B 1 x 2 y 4 z select a.Field_K, a.Field_A, b.Field_K, b.Field_B from a left join b on a.Field_K=b.Field_K Field_K Field_A Field_K Field_B ---------- ---------- -------- ---------- 1 a 1 x 3 b NULL NULL 4 c 4 z select a.Field_K, a.Field_A, b.Field_K, b.Field_B from a right join b on a.Field_K=b.Field_K Field_K Field_A Field_K Field_B ---------- ---------- ---------- ---------- 1 a 1 x NULL NULL 2 y 4 c 4 z 举个例子: 假设a表和b表的数据是这样的。 a b id name id stock 1 a 1 15 2 b 2 50 3 c select * from a inner join b on a.id=b.id 这个语法是连接查询中的内连接,它产生的结果是 两个表相匹配的记录出现在结果列表中。 根据上面的表,出现的结果是这样的 a.id name b.id stock 1 a 1 15 2 b 2 50 ---------------------------- select * from a,b where a.id=b.id 这个语法是内连接的另外一种写法,其执行结果与inner join 一样 -------------------------------- select * from a left/right join b on a.id=b.id 这个是外连接语法中的左外连接或右外连接 如果是左外连接的话,它将显示a表的所有记录, select a.*,b.* from a left join b on a.id=b.id 查询的结果是这样的: a.id name b.id stock 1 a 1 15 2 b 2 50 3 c null null -------------------------------------------- 如果是右外连接的话,它将显示b表的所有记录, select a.*,b.* from a right join b on a.id=b.id 查询的结果是这样的: a.id name b.id stock 1 a 1 15 2 b 2 50 -- select a.*,b.* from a left join b on a.k = b.k select a.*,b.* from a left outer join b on a.k =b.k ----------上面两种一样left join是left outer join的简写 select a.*,b.* from a left inner join b on a.k = b.k 没有这种写法,错误的语句.