精华内容
下载资源
问答
  • sql联合查询

    2013-08-14 15:32:17
    sql联合查询的详细讲解 select * from 表A,表A子表 where 表A.FileCode = 表A子表.FileCode and 表A.ID in (select 表A子表.ID from 表A子表 where Vc_Code = '1190' AND Vc_Num ='111300' AND Er_Num ='0101')...
  • SQL联合查询

    千次阅读 2013-04-24 22:25:10
    SQL联合查询  联合查询是根据每个表之间的逻辑关系从两个或多个表中检索数据,而这逻辑关系则是每个表之间共同的列的关联性,这也是关系数据库查询的最主要的特征.   联合查询分为内连接,外连接和自连接查询. 外...

                                       SQL联合查询

           联合查询是根据每个表之间的逻辑关系从两个或多个表中检索数据,而这逻辑关系则是每个表之间共同的列的关联性,这也是关系数据库查询的最主要的特征.  

            联合查询分为内连接,外连接和自连接查询.   外连接又可分为左外连接left outer join 、右外连接right outer join 、全外连接full outer join 查询.

    联合查询效率较高,以下例子来说明联合查询(内联、左联、右联、全联)的好处: 

     

    表T1

    UserId

    Name

    Password

     

    1

    dong

    pdong

     

    2

    hai

    phai

    表T2

    UserId

    SID

    Grade

     

    1

    1

    2

     

    3

    2

    3

     

    内连接(inner  join):仅显示两个连接表中匹配的行

    如果想把用户信息、姓名、年级等都列出来,那么一般会这样写:select * from T1 ,T2 where T1.UserId = T2.UserId(其实这样的结果等同于select * from T1 inner join T2 on T1.UserId=T2.UserId )。 

    把两个表中都存在UserId 的行,将符合条件的行拿出来拼成一行(即内联),但后者的效率会比前者高很多,建议用后者(内联)的写法。

    SQL语句:select * from T1 inner join T2 on T1.UserId=T2.UserId

    运行结果

    T1.UserId   

    Name

    Password    

    T2.UserId  

    SID

    Grade

     

    1

    dong

    pdong

    1

    001

    2

             内连接将不符合连接条件的数据丢弃,只保留满足连接条件的行,连接表出现的顺序是无关紧要的,而在外连接中,连接双方有左右之分,如上边Sql语句"T1"为"左"表,"T2"为"右"表.根据左右表外连接分为左外连接,右外连接和全外连接.

    左外连接(left outer join)列出左表所有行,和右表中符合条件的行

             显示左表T1中的所有行,并把右表T2中符合条件加到左表T1中;右表T2中不符合条件,就不用加入结果表中,并且NULL表示。

    SQL语句:select * from T1 left outer join T2 on T1.UserId=T2.UserId

    运行结果

    T1.UserId

    Name

    Password    

    T2.UserId  

    SID

    Grade

     

    1

    dong

    pdong

    1

    001

    2

     

    2

    hai

    phai

    NULL

    NULL

    NULL

     

    右外连接(right outer join)列出右表中所有行,和左表中符合条件的行

            显示右表T2中的所有行,并把左表T1中符合条件加到右表T2中;左表T1中不符合条件,就不用加入结果表中,并且NULL表示。

    SQL语句:select * from T1 right outer join T2 on T1.UserId=T2.UserId

    运行结果

    T1.UserId

    Name

    Password    

    T2.UserId  

    SID

    Grade

     

    1

    dong

    pdong

    1

    001

    2

     

    NULL

    NULL

    NULL

    3

    002

    3

     

    全外连接(full outer join)左联结果表+右联结果表

    显示左表T1、右表T2两边中的所有行,即把左联结果表+右联结果表组合在一起,然后过滤掉重复的。

    SQL语句:select * from T1 full outer join T2 on T1.UserId=T2.UserId

    运行结果

    T1.UserId

    username

    password    

    T2.UserId   

    SID

    Grade

     

    1

    dong

    pdong

    1

    001

    2

     

    2

    hai

    phai

    NULL

    NULL

    NULL

     

    NULL

    NULL

    NULL

    3

    002

    3

     

             总结,关于联合查询,效率的确比较高.但是这也是有前提条件的,效率比较高也是相对的,适用于两个表联合查询,或者多表小数据量的查询.看下边的例子.

           

             假设我们有三个表,A表,B表,C表.其数据量分别都为200条记录.并且假设每次都是遍历一半也就是100条的记录找到结果(一半情况下有较大的浮动,只是举例说明),并且假设每次查询都查出10个结果.

     

    一般我们的查询语句是这样的:

    select * from A,B,C where A.id=B.id and B.id=C.id

       它相当于先将这三表进行组合,再遍历查询,查询量为100*100*100=100万.也就是从100万条数据中检索10条数据,听到一百万有什么感想,这仅是每个表中只有200条数据,如果每个表中有200万条数据呢?那会是一个多个大的负担(对于计算机).

         那我们要如何来优化呢,上面其实已经说过了,那就是使用联合查询的前提条件,两个表的联合就没这问题,我们将三个表的联合查询拆分成两个两个的表的联合查询这样就大量减少了遍历的次数.

    方式1: 将三表联合分成两个2表联合查询,如:先进行AB联合查询,再将结果与C联合. 这样查询遍历次数为:100*100+10*100 =1.1万.(只是检索10条数据)

          SQL为:

    select * from (select * from A , B where A.id = B.id) as ab, C where ab.id=C.id

    方式2:先对各表进行过滤,再进行三表联合,或者2表联合: 这样查询的遍历次数为:100+100+100+10*10*10=1300.,或者:100+100+100+10*10+10*10=500.

         SQL为:

    select * from (select * from a where ...)as a,(select * from b where ....) as b, (select * from c where ....) as c where a.id=b.aid and b.id=c.bid

          或者:

    select * from (select * from (select * from a where ...)as a ,(select * from b where ....) as b where a.id = b.aid) as ab, (select * from c where ....) as c  where ab.id=c.bid

           这个时候或许数据就有比较的价值了,三个表联合查询和拆分开两个表联合遍历的数据条数100万,1.1万,0.13万,0.05万.我想着数字很值得我们深思考吧

     

    展开全文
  • Sql联合查询

    千次阅读 2006-03-13 19:42:00
    Sql联合查询UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:select_statementUNION [ALL] selectstatement[UNION [ALL] selectstatement]...
    Sql联合查询

    UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

    select_statement

    UNION [ALL] selectstatement

    [UNION [ALL] selectstatement][…n]

    其中selectstatement为待联合的SELECT查询语句。

    ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

    联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

    在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

    在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

    查询1 UNION (查询2 UNION 查询3)



    Sql连接查询

    通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

    在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

    连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

    SQL-92标准所定义的FROM子句的连接语法格式为:

    FROM join_table join_type join_table

    [ON (join_condition)]

    其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

    join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。

    外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

    交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

    连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

    无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

    SELECT p1.pub_id,p2.pub_id,p1.pr_info

    FROM pub_info AS p1 INNER JOIN pub_info AS p2

    ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)


    (一)内连接

    内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:

    1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。

    2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。

    3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。

    例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

    SELECT *

    FROM authors AS a INNER JOIN publishers AS p

    ON a.city=p.city

    又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):

    SELECT a.*,p.pub_id,p.pub_name,p.country

    FROM authors AS a INNER JOIN publishers AS p

    ON a.city=p.city


    (二)外连接

    内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。

    如下面使用左外连接将论坛内容和作者信息连接起来:

    SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b

    ON a.username=b.username

    下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

    SELECT a.*,b.*

    FROM city as a FULL OUTER JOIN user as b

    ON a.username=b.username


    (三)交叉连接

    交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

    例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等

    于6*8=48行。

    SELECT type,pub_name

    FROM titles CROSS JOIN publishers

    ORDER BY type
    展开全文
  • sql 联合查询

    千次阅读 2014-04-14 23:08:00
     联合查询效率较高,举例子来说明联合查询:内联inner join 、左联left outer join 、右联right outer join 、全联full outer join 的好处及用法。  联合查询效率较高,以下例子来说明联合查询(内联、左联、右联...
    概述: 
    

      联合查询效率较高,举例子来说明联合查询:内联inner join 、左联left outer join 、右联right outer join 、全联full outer join 的好处及用法。

      联合查询效率较高,以下例子来说明联合查询(内联、左联、右联、全联)的好处:

    T1表结构
    (用户名,密码)

    userid
    (int)

    username
    varchar(20)

    password
    varchar(20)

     

    1

    jack

    jackpwd

     

    2

    owen

    owenpwd

     

    T2表结构
    (用户名,密码)

    userid
    (int)

    jifen
    varchar(20)

    dengji
    varchar(20)

     

    1

    20

    3

     

    3

    50

    6

      第一:内联(inner join)。

      如果想把用户信息、积分、等级都列出来,那么一般会这样写:select * from T1 ,T3 where T1.userid = T3.userid(其实这样的结果等同于select * from T1 inner join T3 on T1.userid=T3.userid )。

      把两个表中都存在userid的行拼成一行(即内联),但后者的效率会比前者高很多,建议用后者(内联)的写法。

      SQL语句:select * from T1 inner join T2 on T1.userid=T2.userid

    运行结果

    T1.userid

    username

    password

    T2.userid

    jifen

    dengji

     

    1

    jack

    jackpwd

    1

    20

    3

      第二:左联(left outer join)。

      显示左表T1中的所有行,并把右表T2中符合条件加到左表T1中;右表T2中不符合条件,就不用加入结果表中,并且NULL表示。

      SQL语句:select * from T1 left outer join T2 on T1.userid=T2.userid

    运行结果

    T1.userid

    username

    password

    T2.userid

    jifen

    dengji

     

    1

    jack

    jackpwd

    1

    20

    3

     

    2

    owen

    owenpwd

    NULL

    NULL

    NULL

      第三:右联(right outer join)。

      显示右表T2中的所有行,并把左表T1中符合条件加到右表T2中;左表T1中不符合条件,就不用加入结果表中,并且NULL表示。

      SQL语句:select * from T1 right outer join T2 on T1.userid=T2.userid

    运行结果

    T1.userid

    username

    password

    T2.userid

    jifen

    dengji

     

    1

    jack

    jackpwd

    1

    20

    3

     

    NULL

    NULL

    NULL

    3

    50

    6

      第四:全联(full outer join)。

      显示左表T1、右表T2两边中的所有行,即把左联结果表+右联结果表组合在一起,然后过滤掉重复的。

      SQL语句:select * from T1 full outer join T2 on T1.userid=T2.userid

    运行结果

    T1.userid

    username

    password

    T2.userid

    jifen

    dengji

     

    1

    jack

    jackpwd

    1

    20

    3

     

    2

    owen

    owenpwd

    NULL

    NULL

    NULL

     

    NULL

    NULL

    NULL

    3

    50

    6

      总结,关于联合查询,效率的确比较高,4种联合方式如果可以灵活使用,基本上复杂的语句结构也会简单起来。这4种方式是:1)Inner join 2)left outer join 3)right outer join 4)full outer join

    展开全文
  • 主要介绍了SQL 联合查询与XML解析实例详解的相关资料,并附实例代码,需要的朋友可以参考下
  • sql 联合查询 子查询 综合查询 统计数据 case when then 用法
  • 今天小编就为大家分享一篇关于SQL联合查询inner join、outer join和cross join的区别详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 用户表A: 用户编号 姓名 地址 1 王五 北京 2 张三 上海 用户图片表B: 用户编号 图片名 ...能不能用一条查询语句获取出两个表的数据如: 1 王五 北京 a.jp,b.jpg 2 张三 上海 22.jpg,23.jpg,24.png 谢谢
  • 水晶报表+SQL联合查询

    热门讨论 2007-12-16 21:29:42
    水晶报表+SQL联合查询~
  • C#(vs2005)水晶报表+SQL联合查询 全部的源程序与例子
  • SQL 三表联合查询用法 及 如何将日期数据的格式进行转换 SQL三表联合查询 如下三张表 表1–TableName1 NAME AGE amy 18 表B—TableName2 NAME ID amy 123456 ...

    SQL 三表联合查询用法 及 如何将日期数据的格式进行转换

    1.1 SQL三表联合查询
    如下三张表
    表1–TableName1

    NAMEAGE
    amy18

    表B—TableName2

    NAMEID
    amy123456

    表C–TableName3

    NUMBERID
    001123456

    假设需要查询NUMBER=001该用户的年龄
    则对应的SQL语句如下

    select AGE from TableName1 A,TableName2 B,TableName3 C,
    where C.ID=B.ID
    AND A.NAME=B.NAME
    AND C.NUMBER='001';
    

    其中TableName1 A该句的意思为将TableName1这张表的别名设为A(便于后续引用)

    1.2 SQL如何转换Table数据中的数据格式
    TableName

    IDTIME
    00119-NOV-18 10.37.45.258000000 AM

    假设数据库中的数据显示如上,在SQL中可以对数据进行如下转换

    select to_char(TIME,'YYYY-MM-DD') from TableName;
    

    则捞出的数据显示为

    TO_CHART(TIME,‘YYYY-MM-DD’)
    2018-12-11

    同理,假设需要捞出符合条件的数据,则对应的SQL如下
    捞出2018-01-01之后的数据

    SELECT TIME FROM TableName
    WhereTO_CHAR(TIME,'YYYY-MM-DD')>'2018-01-01';
    

    简单整理如上

    展开全文
  • SQL联合查询(内联、左联、右联、全联)的语法 概述:  联合查询效率较高,举例子来说明联合查询:内联inner join 、左联left outer join 、右联right outer join 、全联full outer join 的好处及用法。 ...
  • 定义两个临时表,数据是这样的。 insert into #table1 values (1,22) insert into #table1 ...我想要两个表联合查询,结果如下图: ![图片说明](https://img-ask.csdn.net/upload/201506/30/1435632193_464699.png)
  • SQL联合查询实现统计功能

    千次阅读 2018-06-22 11:32:29
    每一列都是sql统计的各种数据: select b.wait_num,c.pay_num,d.back_num,e.finish_num,f.all_num,g.finish_price from orders as a INNER JOIN (select count(*) as wait_num from orders where trading_status=1...
  • sql联合查询去除重复计算总和

    千次阅读 2016-09-28 15:35:00
    1、首先来个联合查询 SELECT 字段1, 字段2, 字段3, 字段4 FROM 表1 INNER JOIN 表2 ON 表1.字段x = 表2.字段x  x:代表随意的一个,只要在联合查询的两张表都有的字段即可 2、在联合...
  • sql联合查询。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • sql 联合查询的 优劣比较

    千次阅读 2010-01-10 00:49:00
    昨天晚上和网友讨论了一个关于数据库联合查询的效率的问题.说实话,以前我一直没怎么考虑过这个问题,在写SQL时,都没怎么考虑,似乎一切都成了习惯,或者已经懒散贯了,但是,网友和我聊起来了,我也就好好考虑起这个问题了...
  • sql联合查询(内联、左联、右联、全联)

    万次阅读 热门讨论 2016-04-15 14:09:24
     上篇谈到了sql内联查询是联合查询的一种,接下里这篇博客就介绍一下其它的查询方法,分别为左联、右联、全联。  还是用上篇博客提到的例子: select * from Name; ID Name 1 张三 2 李四 3 王五 select * ...
  • 联合查询效率较高.以下例子来说明联合查询的好处 t1表结构(用户名,密码) userid int username varchar(20) password varchar(20)  1 jack 
  • 联合查询 举例:  select (select COUNT(id) from emailcontent where state=1 and hasRead=0) as a,  (select COUNT(id) from emailcontent where state=1 and hasRead=1) as b,  (select COUNT(id) from
  • sql 联合查询子表时间最新的数据

    千次阅读 2015-07-21 16:38:37
    查询结果为: uniqueid name loginTime 1 张三 2015-7-21 2 李四 2015-7-9 sql语句为: select a.uniqueid as uniqueid ,a.name as name ,b.loginTime as loginTime from table1 as...
  • 初学SQL查询时,遇到一个问题,有一些没有创建关联或者查询条件不是关联字段的时候,数据的返回结构会让我们处理起来非常麻烦。当项目中的某一类产品有一些属性相同,但是其他属性有其独立性时,将其各自分表存储,...
  • 有了理论依据后,便动手更改SQL的结构,在确保数据逻辑上不会有重复情况出现后,将2个union都改成了union all,query的反应速度从1.7秒变成了300毫秒左右,耗费时间只有以前的17%。 UNION还有一个用处,我们...
  • select * from (select shengname,id as sid,1 as ord from szshengunion allselect shiname,shengid,2 as ord from szshi) aorder by a.sid asc,ord asc就可以得到以上结果,但是直接用这个语句手工在T-SQL中建立...
  • SQL语言查询基础:连接查询 联合查询 代码
  • sql联合 模糊查询

    2013-06-06 23:26:07
    sql联合 模糊查询 最好的 最新的 最简介的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,739
精华内容 52,695
关键字:

sql联合查询