多表联合查询

Join
JOIN连接组合两个表中的字段记录,包括三种:
INNER JOIN运算式:连接组合两个表中的字段记录。
LEFT JOIN运算式:连接组合两个表中的字段记录,并将包含了LEFT JOIN左边表中的全部记录。
RIGHT JOIN运算式:连接组合两个表中的字段记录,并将包含了RIGHT JOIN右边表中的全部记录。
INNER JOIN设定两个表相关连的运算式,以连接组合两个表中的字段记录。
INNER JOIN语法如下:
FROM 表1 INNER JOIN 表2 ON 表1.字段1 比较运算子 表2.字段2
两个表连接的字段,譬如 [表1.字段1=表2.字段2],必须具有相同的字段类型,但是字段名称不需要相同。
例如,自动编号字段类型可以连接Long 的字段类型,但是单精整数字段类型不能连接双精整数的字段类型。
比较运算子可为=、<、>、<=、>=、或<>。
JOIN连接的字段,不可以包含MEMO字段类型或OLE对象类型,否则会发生错误。
在一个JOIN表达式中,可以连结多个ON子句:
SELECT fields
FROM 表1 INNER JOIN 表2
ON 表1.字段1 比较运算子 表2.字段1 AND
ON 表1.字段2 比较运算子 表2.字段2) OR
ON 表1.字段3 比较运算子 表2.字段3)
JOIN表达式中,可以为巢状式:
SELECT fields
FROM 表1 INNER JOIN
(表2 INNER JOIN [( ]表3
[INNER JOIN [( ] 表x [INNER JOIN ...)]
ON 表3.字段3 比较运算子 表x.字段x)]
ON 表2.字段2 比较运算子 表3.字段3)
ON 表1.字段1 比较运算子 表2.字段2
在一个INNER JOIN中,可以包括巢状式的LEFT JOIN或RIGHT JOIN,但是在一个LEFT JOIN或RIGHT JOIN中不能包括巢状式的INNER JOIN。

 

mysql中,多表间查询:
表A记录如下:
aID            aNum
1                 a20050111
2                 a20050112
3                 a20050113
4                 a20050114
5                 a20050115

表B记录如下:
bID            bName
1                  2006032401
2                 2006032402
3                 2006032403
4                 2006032404
8                 2006032408


实验如下:
1.left join
sql语句如下:  select * from A left join B on A.aID = B.bID
结果如下:
aID            aNum                             bID                 bName
1                  a20050111              1                       2006032401
2                  a20050112              2                     2006032402
3                  a20050113              3                     2006032403
4                  a20050114              4                     2006032404
5                  a20050115              NULL           NULL
(所影响的行数为 5 行)

结果说明:
            left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.

2.right join

sql语句如下:  select * from A right join B on A.aID = B.bID
结果如下:
aID            aNum                             bID                 bName
1                  a20050111              1                       2006032401
2                  a20050112              2                     2006032402
3                  a20050113              3                     2006032403
4                  a20050114              4                     2006032404
NULL      NULL                             8                     2006032408
(所影响的行数为 5 行)

结果说明:
            仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.

3.inner join

sql语句如下:  select * from A innerjoin B on A.aID = B.bID
结果如下:
aID            aNum                             bID                 bName
1                  a20050111              1                       2006032401
2                  a20050112              2                     2006032402
3                  a20050113              3                     2006032403
4                  a20050114              4                     2006032404

结果说明:

        很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录. 

 

 

 

本文出自 “狼性法则” 博客,谢绝转载!

你可能感兴趣的:(职场,多表查询,休闲)