• 用实例展示left Join,right join,inner join,join,cross join,union 的区别


    1.向TI,T2插入数据:

    T1  7

    ID Field2 Field3 Field4
    1 1 3 54
    2 1 3 54
    3 1 3 54
    4 2 3 54
    5 3 3 54
    6 4 3 54
    7 5 3 54

     

    T2  7

    IDField22Field23

    1133

    2133

    3133

    4133

    5233

    6333

    7   9   33

     

    2.测试left join

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 left join dbo.T2 on t1.Field2=t2.Field22

    row_numIDField2Field3Field4IDField22Field23

    1113541133

    2113542133

    3113543133

    4113544133

    5213541133

    6213542133

    7213543133

    8213544133

    9313541133

    10313542133

    11313543133

    12313544133

    13423545233

    14533546333

    1564354NULLNULLNULL

    1675354NULLNULLNULL

     

    3.测试right join

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 right join dbo.T2 on t1.Field2=t2.Field22

    row_numIDField2Field3Field4IDField22Field23

    1NULLNULLNULLNULL8933

    2113541133

    3113542133

    4113543133

    5113544133

    6213541133

    7213542133

    8213543133

    9213544133

    10313541133

    11313542133

    12313543133

    13313544133

    14423545233

    15533546333

     

    4.测试join

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 join dbo.T2 on t1.Field2=t2.Field22

    row_numIDField2Field3Field4IDField22Field23

    1113541133

    2113542133

    3113543133

    4113544133

    5213541133

    6213542133

    7213543133

    8213544133

    9313541133

    10313542133

    11313543133

    12313544133

    13423545233

    14533546333

     

    5.测试inner join

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 inner join dbo.T2 on t1.Field2=t2.Field22

    row_numIDField2Field3Field4IDField22Field23

    1113541133

    2113542133

    3113543133

    4113544133

    5213541133

    6213542133

    7213543133

    8213544133

    9313541133

    10313542133

    11313543133

    12313544133

    13423545233

    14533546333

     

    6.测试cross join

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 cross join dbo.T2 on t1.Field2=t2.Field22

    消息156,级别15,状态1,第

    关键字'on' 附近有语法错误。

     

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 cross join dbo.T2 

    row_numIDField2Field3Field4IDField22Field23

    1113541133

    2113542133

    3113543133

    4113544133

    5113545233

    6113546333

    7113548933

    8213541133

    9213542133

    10213543133

    11213544133

    12213545233

    13213546333

    14213548933

    15313541133

    16313542133

    17313543133

    18313544133

    19313545233

    20313546333

    21313548933

    22423541133

    23423542133

    24423543133

    25423544133

    26423545233

    27423546333

    28423548933

    29533541133

    30533542133

    31533543133

    32533544133

    33533545233

    34533546333

    35533548933

    36643541133

    37643542133

    38643543133

    39643544133

    40643545233

    41643546333

    42643548933

    43753541133

    44753542133

    45753543133

    46753544133

    47753545233

    48753546333

    49753548933

     

    7.测试unoin

    select * from dbo.T1 union all select * from dbo.T2

    消息205,级别16,状态1,第

    使用UNIONINTERSECT EXCEPT 运算符合并的所有查询必须在其目标列表中有相同数目的表达式。

     

    select Field2 from dbo.T1 union all select Field22 from dbo.T2

    Field2

    1

    1

    1

    2

    3

    4

    5

    1

    1

    1

    1

    2

    3

    9

     

    with T3 as

    ( select Field2 from dbo.T1 union all select Field22 from dbo.T2 )

    select ROW_NUMBER() over (order by T3.field2) as row_num,* from T3

     

    row_numField2

    11

    21

    31

    41

    51

    61

    71

    82

    92

    103

    113

    124

    135

    149

     

    8.生成数据库的脚本

    USE [Demo]

    GO

     

    /****** Object:  Table [dbo].[T1]    Script Date: 09/27/2013 23:19:29 ******/

    SET ANSI_NULLS ON

    GO

     

    SET QUOTED_IDENTIFIER ON

    GO

     

    CREATE TABLE [dbo].[T1](

    [ID] [int] IDENTITY(1,1) NOT NULL,

    [Field2] [int] NULL,

    [Field3] [int] NULL,

    [Field4] [int] NULL,

     CONSTRAINT [PK_T1] PRIMARY KEY CLUSTERED 

    (

    [ID] ASC

    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

    ) ON [PRIMARY]

     

    GO

     

    USE [Demo]

    GO

     

    /****** Object:  Table [dbo].[T2]    Script Date: 09/27/2013 23:19:53 ******/

    SET ANSI_NULLS ON

    GO

     

    SET QUOTED_IDENTIFIER ON

    GO

     

    CREATE TABLE [dbo].[T2](

    [ID] [int] IDENTITY(1,1) NOT NULL,

    [Field22] [int] NOT NULL,

    [Field23] [int] NOT NULL,

     CONSTRAINT [PK_T2] PRIMARY KEY CLUSTERED 

    (

    [ID] ASC

    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

    ) ON [PRIMARY]

     

    GO

     

     

    delete from dbo.T1

    truncate table dbo.T2

     

    select * from  T1

    select * from  T2

     

    insert dbo.T1 values (1,3,54)

    insert dbo.T1 values (1,3,54)

    insert dbo.T1 values (1,3,54)

    insert dbo.T1 values (2,3,54)

    insert dbo.T1 values (3,3,54)

    insert dbo.T1 values (4,3,54)

    insert dbo.T1 values (5,3,54)

     

    truncate table dbo.T2

    insert dbo.T2 values (1,33)

    insert dbo.T2 values (1,33)

    insert dbo.T2 values (1,33)

    insert dbo.T2 values (1,33)

    insert dbo.T2 values (2,33)

    insert dbo.T2 values (3,33)

    insert dbo.T2 values (4,33)

    insert dbo.T2 values (9,33)

     

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 left join dbo.T2 on t1.Field2=t2.Field22

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 right join dbo.T2 on t1.Field2=t2.Field22

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 join dbo.T2 on t1.Field2=t2.Field22

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 inner join dbo.T2 on t1.Field2=t2.Field22

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 cross join dbo.T2 on t1.Field2=t2.Field22

    select ROW_NUMBER()over (order by t1.id,t2.id) as row_num,* from dbo.T1 cross join dbo.T2 

     

    select * from dbo.T1 union all select * from dbo.T2

     

    select Field2 from dbo.T1 union all select Field22 from dbo.T2

     

    with T3 as

    ( select Field2 from dbo.T1 union all select Field22 from dbo.T2 )

    select ROW_NUMBER() over (order by T3.field2) as row_num,* from T3

  • 相关阅读:
    java: Runtime和Process调用本机程序
    phalcon: 多模块多表查找,多表sql
    php: 不能嵌套try-catch-fnally,否则执行时间过长
    什么是数据埋点?
    git 上传本地代码到远程仓库
    Chrome调试模式获取App混合应用H5界面元素
    移动端Web开发调试之Chrome远程调试(Remote Debugging)
    java调用执行cmd命令
    maven项目乱码以及项目名出现红叉
    Maven项目settings.xml的配置
  • 原文地址:https://www.cnblogs.com/youchun/p/3339923.html
Copyright © 2020-2023  润新知