连接表也可以叫多表连接
在关系数据库中,数据分布在多个逻辑表中,要获取完整有意义的数据集。需要使用连接来查询这些表中的数据。SQL Server连接包括
内连接、左连接、右连接、全外连接和交叉连接
内连接、左连接、右连接、交叉连接所有的数据库都实用,就全外连接只是SQL Server数据库的写法,不一定所有数据库都实用
内连接:用于查询来自两个或多个相关表的数据 (见图2)
图表 1 内连接的图表 这个图表明两张表能关联上的显示出来,管理不上的则不显示
关键字:inner join on
注意:使用inner join不能少on,少了on语句就报错
图表 2
Inner join后面跟的是第二张表
On作为关键字不能少,on后面跟的是关联条件,也就是用哪个字段去关联两张表。注意:关联的字段也不可以随便去写,一定要使用两张表共用的字段。如果把on
p.brand-id=b.brand-id改成on p.brand_name=b.brand_name则没有数据,因为两张表中间没有相关联的字段(见图片3)
图表 3
左连接:用于查询来自多个表的数据,它返回左表中所有行和右表中匹配的行,如果右表找不到匹配的行,则有null来代替显示(见图片4)
图表 4
关键字:left join on
例子:见图表5
图表 5
在图表5里面加上一个where条件,直接查询出来没有销售给任何客户的产品(见图表6)
图表 6
在图表6我们写了两个关联条件
On后面是一个关联条件,where是关联数据之后的结果集进行一个筛选的关联条件
也可以直接给他定一个值(见图表7)这是用where条件去筛选
图表 7
图表 8
图片8不用where条件去关联,在on关联条件后面给他定一个值,查出的结果有许多null,就五条数据是我们给他定的值,说明我们在后面给他加上order_id给他定了一个值,那on这一段就作为一个关联的条件,它除了要和关联的数据相等之外,它还有等于我们在后面给他定的一个值,只有满足这个条件
图表 9
右连接:把右表的数据显示出来,左表的数据更关联上的显示出来,和左连接是一个相反的操作(见图表11)
关键字:right join
图表 10
图表 11
交叉连接:连接两个或多个不相关的表,交叉连接返回两个表中行的笛卡尔积
笛卡尔积就是两个数像乘,他没有on的条件,与inner join和left join不同,交叉连接不会在连接的表之间建立关系[
注:如果遇上两个大的笛卡尔积那么数据库会被卡死](见图表12)
关键字:cross join
图表 12
不想让两张表格向乘,就加上条件,就不会笛卡尔积了(见图表13)
图表 13
图表 14
两种笛卡尔积的写法效果是一样的,只是一个用cross隔开,一个用“,”逗号隔开
自连接:一个表自己跟自己关联,他对查询分层数据或比较同一个表的行很有用,分层数据就是一个表里面分几个层级,使用内连接或左连接,使用自身连接查询同一个表,但是要给这个表起不同的别名
sql才会生效,同名则会报错
例一:
查询员工‘Houston’的经理叫什么
图表 15 先分开查询出来
图表 16 用到内连接查询数据
全外连接:当左表或右表存在匹配项时,该命令将返回所有行。所有行就是匹配上的,匹配不上的都会显示 [也就是把左连接和右连接组合起来,效果差不多]
关键字:full outer join
图表 17
查询出两张表格的数据,在用全外连接去连接两张表格的数据
图表 18