[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
连接表也可以叫多表连接
在关系数据库中,数据分布在多个逻辑表中,要获取完整有意义的数据集。需要使用连接来查询这些表中的数据。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