博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL 中的JOIN两表或者多表连接问题
阅读量:6428 次
发布时间:2019-06-23

本文共 2854 字,大约阅读时间需要 9 分钟。

SQL数据库中的表连接

含义:连接即是把两个表或者两个以上的表信息放置在一个结果集中

分类:

1.内部连接
2.外部连接
3.完全连接
4.交叉连接

内部连接是连接类型中最普通的一种,与大多数连接一样,内部连接根据一个或几个相同的字段将记录匹配在一起,但是内部连接仅仅返回那些存在的字段匹配的记录。

Use northwindselect products.*,suppliers.supplierid from products inner join suppliers on products.supplierid=suppliers.supplieriduse pubsselect a.au_lname+', '+a.au_fname as author,t.title from authors ajoin titleauthor ta on a.au_id=ta.au_id join titles t on t.title_id=ta.title_id

外部连接时必需跟上左侧连接还是右侧连接。

Use pubsselect discounttype,discount,s.stor_name from discounts d left outer join stores s on d.stor_id=s.stor_idselect discounttype,discount,s.stor_name from discounts d right join stores s on d.stor_id=s.stor_id

完全连接是将join两侧的数据全部匹配,并返回所有记录。

Use pubsselect discounttype,discount,s.stor_name from discounts d full join stores s on d.stor_id=s.stor_id

交叉连接不使用on运算符,而将join左侧的所有记录与另一侧的所有记录连接,返回的是join两侧表记录的笛卡尔积。(总数据条数为左侧表内数据条数乘以右侧表数据条数之积)

Use pubsselect discounttype,discount,s.stor_name from discounts d cross join stores s

上边只是把定义和简单的例子列举,下边用一个通俗简单的例子说明join连接中两表或者两表以上的数据连接获取到的数据集的情况

准备工作,先建立三张数据表,TABLEA,TABLEB,TABLEC,TABLEA表中有B,C表中的ID代码如下

//TABLEA表有B,C表中的两个ID,BID,CID CREATE TABLE [dbo].[TableA](    [id] [int] IDENTITY(1,1) NOT NULL,    [A] [varchar](50) NULL,    [Bid] [varchar](50) NULL,    [Cid] [int] NULL, CONSTRAINT [PK_TableA_1] 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]
//TABLEB表 CREATE TABLE [dbo].[TableB](    [id] [int] IDENTITY(1,1) NOT NULL,    [name] [varchar](50) NULL, CONSTRAINT [PK_TableB] 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]
//TABLEC表 CREATE TABLE [dbo].[TableC](    [id] [int] IDENTITY(1,1) NOT NULL,    [Cname] [varchar](50) NULL, CONSTRAINT [PK_TableC] 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]
//TABLEA表数据添加后1    A    1    12    A    6    2//TABLEB表数据添加后id    name1    B2    B3    B4    B5    B//TABLECid    Cname1    C2    C3    C4    C5    C

两表连接时

一、Inner join on 连接

代码:SELECT * FROM TABLEB B INNER JOIN TABLEA A ON B.ID=A.BID

结果:id name id A Bid Cid

         1   B     1 A  1   1

分析:匹配后的结果只显示符合ON后条件的结果集,不符合则不显示

二、Outer join on (外连接)

1、左连接

代码:SELECT * FROM TABLEB B LEFT OUTER JOIN TABLEA A ON B.ID=A.BID

结果:

id    name    id    A    Bid    Cid1    B    1    A    1    12    B    NULL    NULL    NULL    NULL3    B    NULL    NULL    NULL    NULL4    B    NULL    NULL    NULL    NULL5    B    NULL    NULL    NULL    NULL

分析:外左连接时左侧为需要显示全部信息的表,右侧把没有匹配ON条件的地方全部补为NULL

2、右连接

代码:(待续)

 

转载于:https://www.cnblogs.com/nyzhai/archive/2012/12/24/2831357.html

你可能感兴趣的文章
Eclipse & IDEA 中常用的快捷键
查看>>
javascript ---IPhone滑动解锁
查看>>
table固定行和表头
查看>>
<每天读一点职场心理学>读书笔记
查看>>
Android权限大全代码
查看>>
android 判断SIM卡是哪个运营商
查看>>
删除N天前的M(天)个目录 、删除N天前最后修改的文件 ForFiles, dos command 批处理命令cmd/bat...
查看>>
PostgreSQL 的 语法分析的理解(五)
查看>>
[转载]Visual Studio 2010敏捷利剑:详解Scrum
查看>>
Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector
查看>>
T-SQL查询进阶--流程控制语句
查看>>
备份Toad中保存的数据库连接用户名和密码
查看>>
ASP.NET中 Repeater 的使用前台绑定
查看>>
微信公众平台模拟群发技术
查看>>
C语言学习之指针详解
查看>>
学习使用Bing Maps Silverlight Control(一):准备和新建
查看>>
什么是Scrum
查看>>
nginx负载均衡的5种策略
查看>>
90%人都不知道:SVN 和 Git 的一些误解和真相
查看>>
防火墙配置十大任务之九,验证防火墙的运行
查看>>