sql多表连接查询实现语句
1。理论只要两个表的公共字段具有匹配的值,两个表中的记录就组合在一起。
个人理解:在具有公共字段的两个表中找到一个一致的交集,并合并每个表满足公共字段要求的记录。
语法
SELECT * FROM表内加入表在表1。田compopr表。2
内部连接操作包含以下部分:
部分
解释
表1,表2
要合并的记录表的名称。
field1,field2
要连接的字段的名称。如果它们不是数字,则这些字段的数据类型必须是相同的,并且包含相同类型的数据,但它们不必具有相同的名称。
compopr
任何关系比较运算符:=、< = >或。
解释
内部连接操作可用于任何from子句。这是最常见的连接类型。只要两个表的公共字段上有匹配值,内部连接将合并这些表中的记录。
内部连接可用于部门和雇员表,以选择每个部门的所有员工。选择所有部分(即使某些部门没有分配员工)或所有员工(即使某些员工没有分配给任何部门),您可以通过左连接或右连接操作创建外部连接。
如果尝试加入包含Notes或OLE对象数据的字段,则会出现错误。
您可以加入任何两种相似类型的数字字段。例如,自动编号和长整型字段可以连接,因为它们都是类似的类型。但是,不能连接单精度和双精度字段。
下面的示例演示如何通过加入的CategoryID字段的类别和产品表:
选择分类,产品名称
从类别内部连接产品
在categories.categoryid = products.categoryid;
在前面的例子中,是一种加入CategoryID字段,但它是不包括在查询输出中,因为它不包括在SELECT语句,包括加入域,请包括字段名在SELECT语句,在这种情况下,Categories.CategoryID。
还可以在联接语句中链接多个子句,并使用以下语法:
选择字段
从表1内部联接表
在table1.field1 compopr table2.field1和
在table1.field2 compopr table2.field2或
在table1.field3 compopr table2.field3;
还可以通过以下语法嵌套连接语句:
选择字段
从表1内加入
(表内和表3 { }
{内加入{(} { }内加入附表X…)
在table3.field3 compopr附表X。fieldx)}
在table2.field2 compopr表3 3)。
在table1.field1 compopr table2.field2;
左连接或右连接可以嵌套在内部连接中,但内部连接不能嵌套在左连接或右连接中。
2。操作实例
表A的记录如下:
该援助
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
投标bname
一百二十亿零六百零三万二千四百零一
二百二十亿零六百零三万二千四百零二
三百二十亿零六百零三万二千四百零三
四百二十亿零六百零三万二千四百零四
八百二十亿零六百零三万二千四百零八
实验如下:
1.left加入
SQL语句如下所示:
从中选择*
左连接B
在a.aid =家
结果如下:
援助该投标bname
1 a20050111 12006032401
2 a20050112 22006032402
3 a20050113 32006032403
4 a20050114 42006032404
5 a20050115零
(受影响的行数为5行)
结果如下:
左连接是基于一个表的记录,A可以被看作是一个左表,B可以被认为是正确的表,左连接是基于左表。
换句话说,在左表的记录(一)将所有的代表,和右表(B)只会显示符合搜索条件的记录(在例如:a.aid =家)。
缺少B表记录是空的。
2.right加入
SQL语句如下所示:
从中选择*
右连接B
在a.aid =家
结果如下:
援助该投标bname
1 a20050111 12006032401
2 a20050112 22006032402
3 a20050113 32006032403
4 a20050114 42006032404
空值82006032408
(受影响的行数为5行)
结果如下:
仔细查看后,您会发现左连接的结果正好相反。这一次是基于正确的表(b),如果表不够,则填充为null。
3.inner加入
SQL语句如下所示:
从中选择*
innerjoin B
在a.aid =家
结果如下:
援助该投标bname
1 a20050111 12006032401
2 a20050112 22006032402
3 a20050113 32006032403
4 a20050114 42006032404
结果如下:
显然,它只显示a.aid =家记录。这表明内部连接不是谁的基础,它只显示记录。有一种内在的加入可以结合在声明中使用如:选择一个innerjoin B * a.aid =家里b.bname = '2006032401'that只会把返回的数据
个人总结:将多个表连接到上述三条规则以形成表