多表连接查询中,“on”和“where”有什么区别吗?

黄知涛 2019-12-21 23:56:00

推荐回答

数据库中表与查询的区别如下:1、操作权限。表:操作权限是依存关系,数据表是可以进行操作的。查询:查询视图的操作权限是来源于数据表的,当交叉数据表的时候无法进行操作查询。2、存储功能的区别。表:数据表有存储功能,可以写存储过程。查询:查询视图只能分析,无法存储数据。3、整理分析功能区别。表:数据表无法与其他数据表通信,独立的,只有ACCESS里面可以建立子数据表,依赖关系依据存储过程做触发器。查询:查询视图就可以直接把多个表通过网络访问或者跨库访问联系起来,做整理分析,比数据表快捷方便。4、对象区别。表:表是内容,是数据源,表是存储数据的,是以表中数据为对象。查询:查询的数据源可以是表,也可以是查询,查询是数据库操作,查询是以查询数据库中所有“表”和“查询”对象。
辛国省2019-12-22 00:54:45

提示您:回答为网友贡献,仅供参考。

其他回答

  • 主要分为三种:内连接、外连接、交叉连接。一、内连接使用比较运算符进行表间的比较操作,查询与连接条件相匹配的数据。根据所使用的比较方式不同,内连接分为等值连接、自然连接和自连接三种。1。等值连接/相等连接 使用”=”关系将表连接起来的查询,其查询结果中列出被连接表中的所有列,包括其中的重复列。2.自然连接 等值连接中去掉重复的列,形成的连接。3.自连接 如果在一个连接查询中,设计到的两个表都是同一个表,这种查询称为自连接查询。二、外连接分为左外连接、右外链接、全外连接三种。三、交叉连接/笛卡尔积两个表做笛卡尔积,得到的结果集的行数是两个表的行数的乘积。
    黄石全2019-12-22 00:36:46
  • 1、子查询就如递归函数一样,有时侯使用起来能达到事半功倍之效,只是其执行效率同样较低,有时用自身连接可代替某些子查询,另外,某些相关子查询也可改写成非相关子查询。2、表连接都可以用子查询,但不是所有子查询都能用表连接替换,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件,而表连接更适合与查看多表的数据。3、子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。4、子查询是本质上就是一个完整的SELECT语句,它可以使一个SELECT、SELECT...INTO语句、INSERT...INTO语句、DELETE语句、或UPDATE语句或嵌套在另一子查询中。子查询的输出可以包括一个单独的值单行子查询、几行值多行子查询、或者多列数据多列子查询。5、连接查询是关系数据库中最主要的查询,主要包括内连接、外连接和交叉连接等。通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
    齐晓曼2019-12-22 00:19:01
  • sql="select.UID"第一种是普通的多表查询,内部还是笛卡尔积的逐行的搜索机制,如果查询的几张表数据量大的话会降低性能;第二种是内连接。两种方式得到的结果是一致的。两者没什么区别,在执行方式和效率上都是一样的,只是书写的方式不同,基本上innerjoin是为了区别leftjoin,rightjoin等的一个写法,而另外那种不是join的写法,只能等同于innerjoin。
    龙层花2019-12-22 00:06:46

相关问答

本文主要分析了in和exists的区别与执行效率的问题:in可以分为三类:1、形如select*fromt1wheref1in''a'',''b'',应该和以下两种比较效率。select*fromt1wheref1=''a''orf1=''b''或者select*fromt1wheref1=''a''unionallselect*fromt1f1=''b''你可能指的不是这一类,这里不做讨论。2、形如select*fromt1wheref1inselectf1fromt2wheret2.fx=''x'',其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。3、形如select*fromt1wheref1inselectf1fromt2wheret2.fx=t1.fx,其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists。除了第一类in语句都是可以转化成exists语句的,一般编程习惯应该是用exists而不用in.A,B两个表,1当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快:select*fromAwhereidinselectidfromB2当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就不方便了,可以使用EXISTS:select*fromAwhereexistsselect1fromBwhereid=A.idandcol1=A.col13当只显示两个表的数据时,使用IN,EXISTS都不合适,要使用连接:select*fromAleftjoinBonid=A.id所以使用何种方式,要根据要求来定。这是一般情况下做的测试:测试结果:setstatisticsioonselect*fromsysobjectswhereexistsselect1fromsyscolumnswhereid=syscolumns.idselect*fromsysobjectswhereidinselectidfromsyscolumnssetstatisticsiooff47行受影响表''syscolpars''。扫描计数1,逻辑读取3次,物理读取0次,预读2次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响44行受影响表''syscolpars''。扫描计数47,逻辑读取97次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响setstatisticsioonselect*fromsyscolumnswhereexistsselect1fromsysobjectswhereid=syscolumns.idselect*fromsyscolumnswhereidinselectidfromsysobjectssetstatisticsiooff419行受影响表''syscolpars''。扫描计数1,逻辑读取10次,物理读取0次,预读15次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响419行受影响表''syscolpars''。扫描计数1,逻辑读取10次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响测试结果总体来讲exists比in的效率高:效率:条件因素的索引是非常关键的把syscolumns作为条件:syscolumns数据大于sysobjects用in扫描计数47,逻辑读取97次,用exists扫描计数1,逻辑读取3次把sysobjects作为条件:sysobjects的数据少于syscolumnsexists比in多预读15次。