今天和朋友谈谈,谈谈他们
公司的小问题:
表设备表,存储MAC
地址,省,市,区。
表B软件表,存储MAC地址,以及软件的名称。
其
功能是根据各省、市或地区
查询软件列表。
猜猜现在是怎么做的
它通过一个省、一个城市或一个
区域获取MAC地址,然后查询B表。
这显然是不合理的。为了
处理这种多对多的关系,我们为什么不使用多表
连接呢
链表有3种常用的
方法:(内部)连接内部等效连接、左连接左连接和右连接右连接。
有差别吗怎么用它以下是一篇文章:
左联接(左连接)返回一个包含左表中所有记录和右表中的连接字段的记录。
右联接(右连接)返回一个包含右表中所有记录和左表中的连接字段的记录。
内部连接(等效连接)只返回两个表中相等连接字段的行。
例子如下:
表A的记录如下:
复制代码代码如下所示:
该援助
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
复制代码代码如下所示:
投标bname
一百二十亿零六百零三万二千四百零一
二百二十亿零六百零三万二千四百零二
三百二十亿零六百零三万二千四百零三
四百二十亿零六百零三万二千四百零四
八百二十亿零六百零三万二千四百零八
1.left加入
SQL语句如下所示:
复制代码代码如下所示:
SELECT * FROM加入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 =家示。这表明内部连接不是基于谁的,它只显示符合的记录。
注:
左连接
操作用于将源表中的所有子句的记录组合在一起。使用左连接操作来
创建一个左外部连接。左边的外部连接将包含从第一(左)开始的两个表中的所有记录,即使第二个(右)表中没有相应的值的记录。
语法:选择从表1左连接表上table1.field1 compopr table2.field2
解释uff1a
表1、附表2
参数用于指定名称的表的记录相结合。
field1,field2参数指定的字段的名称加入,这些字段必须具有相同的数据
类型,包含相同的数据类型,但他们并不需要相同的
名字。
关系比较
运算符指定compopr参数:或<>。
如果在内部连接操作中加入包含备忘数据类型或OLE对象数据类型数据的字段,则会出现
错误。
因此,在我的理解中,sql应该编写这个:
选择从软件表内软件加入软件表设备表。MAC =设备表。MAC设备表。亲= 'xxx'and设备表。市城市= =;