SQL联合查询(内联、左联、右联、全联)语法

SQL联合查询(内联、左联、右联、全联)语法

概述:

  联合查询效率较高,举例子来说明联合查询:内联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

时间: 2024-10-09 05:02:44

SQL联合查询(内联、左联、右联、全联)语法的相关文章

SQL 联合查询 + XML解析

(select a.EBILLNO, a.EMPNAME, a.APPLYDATE, b.HS_NAME, replace(replace(a.SUMMARY,char(10), ''),char(13),'') as SUMMARY, cast(c.XmlData as XML).value('(/List/item/No/text())[1]','NVARCHAR(300)') as No, cast(c.XmlData as XML).value('(/List/item/zje/text

数据库sql联合查询mid类型的分页数据取不了全部的值错误

USE [Travel]GO/****** Object:  StoredProcedure [dbo].[NoticeGetPagedData]    Script Date: 06/13/2014 20:44:51 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[NoticeGetPagedData]@pageIndex int = 1,--页码@pageSize int =10,--页容量

SQL联合查询:子表任一记录与主表联合查询

今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as b where b.CgId =a.ID)as bid from A as a ) as temp left join B as b2 on temp.bid=b2.Id

SQL联合查询中的关键语法(转)

联合查询效率较高.以下例子来说明联合查询的好处 t1表结构(用户名,密码)    userid int         username   varchar(20)     password       varchar(20) 1                    jack                           jackpwd 2                    owen                        owenpwd t3表结构(用户积分,等级)    u

SQL联合查询中的关键语法

联合查询效率较高.以下例子来说明联合查询的好处 t1表结构(用户名,密码)    userid int         username   varchar(20)     password       varchar(20) 1                    jack                           jackpwd 2                    owen                        owenpwd t3表结构(用户积分,等级)    u

SQL联合查询

[原文链接] http://www.cnblogs.com/aaapeng/archive/2010/01/20/1652151.html#commentform 联合查询效率较高.以下例子来说明联合查询的好处 t1表结构(用户名,密码)    userid int         username   varchar(20)     password       varchar(20) 1                    jack                           ja

hibernate用sql联合查询数据库

@RequestMapping(value = "/FeedPager.cqzk")     @ResponseBody     public String url_sa1(HttpServletRequest request, BootPage page)             throws ServletException, IOException, RuntimeException {         @SuppressWarnings("unchecked"

sql 联合查询速度慢,需要对其进行分组

分组:SELECT   * FROM(SELECT ROW_NUMBER() OVER(ORDER BY  ProjID) as row_number,* FROM ( select ProjApplyDate,projProperty,ProjID,ProjStatusCurrent,ProjGuId,ProjEtpId,ProjRegionId,ProjName,ProjAddress,ProjAreaSize,ProjCost,ProjCreateTime,ProjChargePerson

sql联合查询多个表

SELECT hp_patient.name, hp_ptorders.DrugName, hp_ptorders.Dosage,hp_ptorders.DosageUnitFROM hp_patientLEFT JOIN hp_ptordersON hp_patient.pid=hp_ptorders.PtIdORDER BY hp_patient.name