精华内容
下载资源
问答
  • 今日的内容是之前内容的延伸,在前面的讲解中我讲了利用INNER连接两个数据源都是字段值与值的条件匹配,如果字段不是唯一值时数据会报错。如何理解这个问题呢?所谓连接,目的是查询,找出条件相同值的匹配,对于...

    186ab358fb1dbf57e2b085b8b6f874cd.png

    大家好,今日继续讲解VBA数据库解决方案,今日的内容是第67讲:内连接INNER如何在两个不同的SQL中建立连接。今日的内容是之前内容的延伸,在前面的讲解中我讲了利用INNER连接的两个数据源都是字段值与值的条件匹配,如果字段不是唯一值时数据会报错。如何理解这个问题呢?所谓连接,目的是查询,找出条件相同值的匹配,对于一对多,或者多对一的匹配,在内连接中是无法建立起对应关系的,多对一,或者一对多如何连接,不是我们关心的,我们关心的是如何把多值查询变成值的唯一查询,也就是说在连接前,要建立一个值的排重处理,这个排重处理我们在工作表中可以用数据透视表来完成,在此我们采用的方案是SQL语句。

    我们还是以实例来详细讲解,实例,某策划公司团队中有两个负责部门对于策划项目的报价,在外联部门报价是:

    3d0f124cb772b3cbdc2c2d700fba5ca1.png

    在每个项目中由若干个类别组成,每个类别需要的人数和价格如上,同时后勤部门的报价如下:

    29cfd6c804588392a57583443bbf6e6a.png

    报价中含有对每个项目组成类别的占用车辆及需要的工具套数和单价。

    当收到上述两个部门报价后,我们要根据内容整理出总的报价,总报价中不必关心其中小类别的报价,只要汇总即可。我们要得出的只是项目,总人数,总价格,出动车辆,工具总套数,工具总价格等字段汇总,这个时候该如何处理呢?

    思路:对于两个数据表先分别进行数据的汇总,然后再用内连接同时连接这两个汇总的数据,就可以得到我们的最终结果了。当然,思路很好建立,如何实现呢?

    我们先看下面我给出的代码:

    Sub mynzRecords_67() '第67讲 内连接Inner join 连接两个SQL

    Dim cnADO, rsADO As Object

    Dim strPath, strSQL As String

    Worksheets("67").Select

    Cells.ClearContents

    Set cnADO = CreateObject("ADODB.Connection")

    Set rsADO = CreateObject("ADODB.Recordset")

    strPath = ThisWorkbook.FullName

    cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath

    strSQL1 = "select 项目,SUM(人数) AS 总人数,SUM(价格) AS 总价格 from [数据4$] group by 项目"

    strSQL2 = "select 项目,SUM(车辆) AS 出动车辆,SUM(工具套数) AS 工具总套数,SUM(工具套数*工具单价) AS " _

    & "工具总价格 from [数据5$] group by 项目"

    strSQL = "Select a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格 From (" _

    & strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _

    & "ON a.项目=b.项目 GROUP BY a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格"

    rsADO.Open strSQL, cnADO, 1, 3

    For i = 1 To rsADO.Fields.Count

    Cells(1, i) = rsADO.Fields(i - 1).Name

    Next

    Range("a2").CopyFromRecordset rsADO

    rsADO.Close

    cnADO.Close

    Set rsADO = Nothing

    Set cnADO = Nothing

    End Sub

    代码截图:

    e72a7da8abbbbe0b03dffb78488f6f94.png

    代码解读:

    1 上述代码先用SQL1 和SQL2 对“数据4” 工作表和“数据5”工作表进行数据的汇总。建立项目的汇总数据。

    2 strSQL1 = "select 项目,SUM(人数) AS 总人数,SUM(价格) AS 总价格 from [数据4$] group by 项目"

    上述SQL语句实现的的是对工作表4的汇总,上面有新的字段的设置。

    3 strSQL2 = "select 项目,SUM(车辆) AS 出动车辆,SUM(工具套数) AS 工具总套数,SUM(工具套数*工具单价) AS " _

    & "工具总价格 from [数据5$] group by 项目"

    上述SQL语句实现的的是对工作表5的汇总,上面也有新的字段的设置。

    4 strSQL = "Select a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格 From (" _

    & strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _

    & "ON a.项目=b.项目 GROUP BY a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格"

    利用上述的SQL语句,实现了对SQL1和SQL2的内连接,条件是a.项目=b.项目。

    上述语句应用非常的方便,但我仍是反复的提醒大家注意,尽可能不要自己去写代码,我提倡的是搭积木的思想,建立起自己的代码库,用的时候,可以方便的利用即可。

    下面看本实例的运行情况:

    be9c9e7c0ed6388501bcd773e23fa8d7.png

    这样就给出了,三个项目的报价清单。

    今日内容回向:

    1 如何建立连接于两个SQL的内间接查询?

    2 应用于连接于两个SQL的内间接查询是什么样的实际场景?

    展开全文
  • 今日的内容是之前内容的延伸,在前面的讲解中我讲了利用INNER连接两个数据源都是字段值与值的条件匹配,如果字段不是唯一值时数据会报错。如何理解这个问题呢?所谓连接,目的是查询,找出条件相同值的匹配,对于...

    大家好,今日继续讲解VBA数据库解决方案,今日的内容是第67讲:内连接INNER如何在两个不同的SQL中建立连接。今日的内容是之前内容的延伸,在前面的讲解中我讲了利用INNER连接的两个数据源都是字段值与值的条件匹配,如果字段不是唯一值时数据会报错。如何理解这个问题呢?所谓连接,目的是查询,找出条件相同值的匹配,对于一对多,或者多对一的匹配,在内连接中是无法建立起对应关系的,多对一,或者一对多如何连接,不是我们关心的,我们关心的是如何把多值查询变成值的唯一查询,也就是说在连接前,要建立一个值的排重处理,这个排重处理我们在工作表中可以用数据透视表来完成,在此我们采用的方案是SQL语句。

    我们还是以实例来详细讲解,实例,某策划公司团队中有两个负责部门对于策划项目的报价,在外联部门报价是:

    92eecc421064150d4973c79f1395cca4.png

    在每个项目中由若干个类别组成,每个类别需要的人数和价格如上,同时后勤部门的报价如下:

    a4c8d3b85c97937a101ede15fee91fc8.png

    报价中含有对每个项目组成类别的占用车辆及需要的工具套数和单价。

    当收到上述两个部门报价后,我们要根据内容整理出总的报价,总报价中不必关心其中小类别的报价,只要汇总即可。我们要得出的只是项目,总人数,总价格,出动车辆,工具总套数,工具总价格等字段汇总,这个时候该如何处理呢?

    思路:对于两个数据表先分别进行数据的汇总,然后再用内连接同时连接这两个汇总的数据,就可以得到我们的最终结果了。当然,思路很好建立,如何实现呢?

    我们先看下面我给出的代码:

    Sub mynzRecords_67() '第67讲 内连接Inner join 连接两个SQL

    Dim cnADO, rsADO As Object

    Dim strPath, strSQL As String

    Worksheets("67").Select

    Cells.ClearContents

    Set cnADO = CreateObject("ADODB.Connection")

    Set rsADO = CreateObject("ADODB.Recordset")

    strPath = ThisWorkbook.FullName

    cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath

    strSQL1 = "select 项目,SUM(人数) AS 总人数,SUM(价格) AS 总价格 from [数据4$] group by 项目"

    strSQL2 = "select 项目,SUM(车辆) AS 出动车辆,SUM(工具套数) AS 工具总套数,SUM(工具套数*工具单价) AS " _

    & "工具总价格 from [数据5$] group by 项目"

    strSQL = "Select a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格 From (" _

    & strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _

    & "ON a.项目=b.项目 GROUP BY a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格"

    rsADO.Open strSQL, cnADO, 1, 3

    For i = 1 To rsADO.Fields.Count

    Cells(1, i) = rsADO.Fields(i - 1).Name

    Next

    Range("a2").CopyFromRecordset rsADO

    rsADO.Close

    cnADO.Close

    Set rsADO = Nothing

    Set cnADO = Nothing

    End Sub

    代码截图:

    903a7e6c76f1972dc2e579df90a90335.png

    代码解读:

    1 上述代码先用SQL1 和SQL2 对"数据4" 工作表和"数据5"工作表进行数据的汇总。建立项目的汇总数据。

    2 strSQL1 = "select 项目,SUM(人数) AS 总人数,SUM(价格) AS 总价格 from [数据4$] group by 项目"

    上述SQL语句实现的的是对工作表4的汇总,上面有新的字段的设置。

    3 strSQL2 = "select 项目,SUM(车辆) AS 出动车辆,SUM(工具套数) AS 工具总套数,SUM(工具套数*工具单价) AS " _

    & "工具总价格 from [数据5$] group by 项目"

    上述SQL语句实现的的是对工作表5的汇总,上面也有新的字段的设置。

    4 strSQL = "Select a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格 From (" _

    & strSQL1 & ") a Inner Join (" & strSQL2 & ") b " _

    & "ON a.项目=b.项目 GROUP BY a.项目,a.总人数,a.总价格,b.出动车辆,b.工具总套数,b.工具总价格"

    利用上述的SQL语句,实现了对SQL1和SQL2的内连接,条件是a.项目=b.项目。

    上述语句应用非常的方便,但我仍是反复的提醒大家注意,尽可能不要自己去写代码,我提倡的是搭积木的思想,建立起自己的代码库,用的时候,可以方便的利用即可。

    下面看本实例的运行情况:

    cb390ba0839638e8ec01e6d70b7e4472.png

    这样就给出了,三个项目的报价清单。

    今日内容回向:

    1 如何建立连接于两个SQL的内间接查询?

    2 应用于连接于两个SQL的内间接查询是什么样的实际场景?

    展开全文
  • 在实际查询中,往往需要从多个表中获取需要数据。当查询涉及到多个表时,可以...两个连接是把两个表在相关列满足连接条件的元组进行拼接后形成新元组而组成的关系对于表中不满足连接条件的元组将被...

    在实际查询中,往往需要从多个表中获取需要的数据。当查询涉及到多个表时,可以利用连接查询来实现。连接主要分为:

    name Value
    内连接 inner join
    外连接 left join / right join
    交叉连接 一般不用

    1. 内连接

    两个表的内连接是把两个表在相关列满足连接条件的元组进行拼接后形成新的元组而组成的新的关系;对于表中不满足连接条件的元组将被舍弃。
    内连接语句格式为:
    FROM <表1> [INNER] JOIN <表2> ON <连接条件>
    内连接

    2. 外连接

    如果需要在连接中保留某个表的不满足连接条件的元组,可以使用外连接(OUTER JOIN)。外连接分为分为:

    • 左外连接(LEFT OUTER JOIN)查询结果为两个表匹配到的数据,左表特有的数据,右表不存在的数据使用null填充
    • 右外连接(RIGHT OUTER JOIN)查询结果为两个表匹配到的数据,右表特有的数据,左表不存在的数据使用null填充
    • 全连接(FULL JOIN)

    外连接的基本格式:
    FROM <表1> [LEFT|RIGHT|FULL] [OUTER] JOIN <表2> ON <连接条件>
    右连接
    左连接

    3. 自然连接

    自然连接将两个关系组中在相同名称的属性上具有相同的值的行记录进行匹配,并且重复的属性列去掉,这样得到的新的一行将出现在查询结果中,而那些没被匹配的行不出现在结果中。因此自然连接的结果会有数据丢失,这些丢失的数据就是那些没有匹配的数据。

    如果关系R与S具有相同的属性组B,且该属性组的值相等时的连接称为自然连接,结果关系的属性集合为R的属性并上S减去属性B的属性集合。
    R和S自然连接可记作:R⋈S={t r⌒ts |tr∈R∧ts∈S∧tr[B]=ts[B]}

    例如:

    举例:

    查询每个读者及其借阅图书的情况,要求即使从未借阅过图书,也要看到读者的信息。

    --左连接
    select Patron.PatronID, Name, Gender, BirthDate, Btype, Department, 
    CallNo, LendTime, ReturnTime
    from Patron left join Lend on Patron.PatronID = Lend.PatronID;
    --右连接
    select Patron.PatronID, Name, Gender, BirthDate, Btype, Department, 
    CallNo, LendTime, ReturnTime
    from Lend right join Patron on Patron.PatronID = Lend.PatronID;
    

    查询结果

    SQL左右连接中的on and和on where的区别

    在使用left join时,on and和on where条件的区别如下:

    1. on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
    2. where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。
    展开全文
  • 所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里一个概念,表示两个表中每一行数据任意组合,下图中两个连接即为笛卡尔积(交叉连接) 内连接查询中限制条件,取到数据就是表中同时满足限制...
  • 1.邻域 邻域分为三类:4邻域、对角邻域和8邻域。...两个像素为连接关系需满足两个条件:1.两个像素相互接触(邻接);2.两个像素满足某个特定相似准则,比如像素灰度值相等或者灰度值处于同一个区间V内,这个是人为

    1.邻域

    邻域分为三类:4邻域、对角邻域和8邻域。
    对于以像素P为中心的九宫格而言,一个“加号”所涵盖的四个像素被称为中心像素的4邻域,记作N4(P);角落的四个像素则是对角邻域,记作ND(P);周围全部8个像素称为中心像素的8邻域,记作N8(P)。
    4邻域、对角邻域、8邻域从左到右分别为 4邻域 对角邻域 8邻域

    2.连接

    两个像素为连接关系需满足两个条件:1.两个像素相互接触(邻接);2.两个像素满足某个特定的相似准则,比如像素灰度值相等或者灰度值处于同一个区间V内,这个是人为设置的。
    这里容易把邻接和连接搞混,邻接就只是两个像素相邻而已,连接则需要满足灰度值的要求。
    连接根据像素所在邻域的不同也分为三类:4连接、8连接和m连接。先给出它们的定义:
    4连接:两个像素P和R都在区间V内,且R属于N4(P);
    8连接:两个像素P和R都在区间V内,且R属于N8(P);
    m连接:两个像素P和R都在区间V内,且R属于N4(P)或者R属于ND(P),且N4(P)与N4(P)交集中的像素不在V中。
    我已经被这堆定义搞晕了,用图片要好理解很多:
    在这里插入图片描述

    从左到右分别为 4连接、8连接、m连接。
    这里假设集合V=1,可以看出8连接和m连接的区别了吧,N4(P)和N4(R)的交集(黄色部分)如果在V中,那就是8连接;不在V中就是m连接。
    除此之外,根据定义我们也可以发现4连接也是包含在m连接里面的,因此可以得到这样的包含关系:
    4连接 ∈ m连接 ∈ 8连接
    既然m连接包含在8连接里面了,还定义这个东西干嘛呢?课本给出的原因是为了消除8连接的“二义性”,在下面像素的连通里会用到。

    3.连通

    连通的定义很简单,就是由一系列连接像素组成的通路。比如这样:
    在这里插入图片描述

    连通的路线必须是唯一的,但8连接有时候会出现多条路都能走的情况,这时候m连接就派上用场了。
    在这里插入图片描述

    比如这种情况,蓝色和红色路线都能走,此时我们规定必须要走m连接,那就只剩蓝色路线了。因此m连接的实质就是:在像素间同时存在4-连接和8-连接时,优先采用4-连接,并屏蔽两个和同一像素间存在4-连接的像素之间的8-连接。
    这样像素之间的这些关系就都搞明白啦~

    参考文章:关于像素邻接,连接和连通
    数字图像处理基础之–像素间的关系(邻接/连通)

    展开全文
  • 这个耗尽层充当电容的两个导电板之间绝缘体。这个W层厚度与施加电场和掺杂浓度呈函数关系。PN结电容分为势垒电容和扩散电容两部分。在反向偏置条件下,不会发生自由载流子注入;因此,扩散电容等于零。对于...
  •  首先要申明,这种快捷方法是有前提,前提就是分解后的关系模式只有两个。其内容为:  设ρ={R1,R2}是R一个分解,F是R上FD集,那么分解ρ相对于F是无损分解充分必要条件是:(R1∩R2)→(R1–R2)或(R1∩...
  •  EXP_FULL_DATABASE, IMP_FULL_DATABASE这两个角色用于数据导入导出工具使用。  自定义角色 Oracle建议我们自定义自己角色,使我们更加灵活方便去管理用户  创建角色 SQL> create role admin;  授权给...
  • 你必须知道495C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    3.18 需要根据条件把一个复杂表达式赋给两个变量中一个。可以用下面这样代码吗?((condition)?a:b)=complicated_expression; 3.19 我有些代码包含这样表达式。a?b=c:d有些编译器可以接受,有些却不能。为...
  • 《你必须知道495C语言问题》

    热门讨论 2010-03-20 16:41:18
    3.18 需要根据条件把一个复杂表达式赋给两个变量中一个。可以用下面这样代码吗?((condition) ? a : b)= complicated_expression; 41  3.19 我有些代码包含这样表达式。a ? b=c : d 有些编译器可以接受...
  • 3.18 需要根据条件把一个复杂表达式赋给两个变量中一个。可以用下面这样代码吗?((condition) ? a : b)= complicated_expression; 41  3.19 我有些代码包含这样表达式。a ? b=c : d 有些编译器可以接受...
  • 在数据库开发中,对两个关系表进行连接查询,能够直接做“逻辑或”查询,而对于逻辑与和逻辑非查询,则稍复杂点,需要编写额外代码来实现。在关系型数据库中,所谓的连接,实际上是集合包含,只要包含一项,...
  • 你必须知道495C语言问题(PDF)

    热门讨论 2009-09-15 10:25:47
    3.12 我需要根据条件把一个复杂表达式赋值给两个变量中一 个。可以用下边这样代码吗? ((condition) ? a : b) = complicated expression; . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 目录iii ...
  • 随着计算机网络技术发展,恶意代码问题也越来越严峻,对于现有恶意代码产生变体(包括在多处修改、增加、删除部分内容),使用模糊哈希均能发现与源文件相似关系,是目前判断相似性,检测恶意代码较好一...
  • mysql高级查询

    2019-03-05 19:46:45
    连接查询:查询结果为两个表匹配到数据,右表特有数据,对于左表中不存在数据用null填充 左连接查询;查询结果为两个表匹配到数据,左表特有数据,对于右表中不存在数据用null填充 on后面跟着连接...
  • 此外,还要考虑开发人员水平,学习了两年jsp开发,对于这个系统编写,我想完整之需要两个月就可以写出程序,再花上几天调试,计划两个月左右就可以完成投入使用了。 我们掌握了数据库及其应用技术、...
  • 9 多目标Pareto最优解搜索算法(胡斐) 多目标优化是指在约束条件下有两个两个以上优化目标,而且这些目标之间相互矛盾,不能同时达 到最优,也就是说,一个目标最优往往是以牺牲其它目标作为代价,因此多...
  • 多于N>1和M>1情况,相邻的两种化学品之间用一“+”来连接。 2) 在每种元素(或者每种根,后面说明)后面出现系数,是角标,表示这元素或者根在这化学品中出现比例(主要和元素最外层和次外层电子...
  • “(2) 数据链路层 数据链路层任务是在两个相邻结点间线路上无差错地传送以帧(frame)为单位数据。……这样,数据链路层就把一条有可能出差错实际链路,转变成为让网络层向下看起来好像是一条不出差错链路。...
  • 多于N>1和M>1情况,相邻的两种化学品之间用一“+”来连接。 2) 在每种元素(或者每种根,后面说明)后面出现系数,是角标,表示这元素或者根在这化学品中出现比例(主要和元素最外层和次外层电子...
  • 多于N>1和M>1情况,相邻的两种化学品之间用一“+”来连接。 2) 在每种元素(或者每种根,后面说明)后面出现系数,是角标,表示这元素或者根在这化学品中出现比例(主要和元素最外层和次外层电子...
  • 多于N>1和M>1情况,相邻的两种化学品之间用一“+”来连接。 2) 在每种元素(或者每种根,后面说明)后面出现系数,是角标,表示这元素或者根在这化学品中出现比例(主要和元素最外层和次外层电子...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 252
精华内容 100
关键字:

对于两个关系的条件连接