mysql创建表关联_MySQL创建高级联表教程

#MYSQL#这是我第七篇MySQL教程,本篇主要介绍的是如何创建高级联表查询,主要包括使用表的别名,和自连接,外连接,和使用聚合函数连接,已经如何创建链接的条件。希望对你有所帮助。

7c1542589bcdb93282fd07fdda9498ca.png

在MySQL中除了可以给计算字段起别名之外还可以给表取别名,这样做主要目的有两个,第一可以缩短SQL语句,第二允许在单条的SELECT语句中多次使用相同的表。就是说你想使用表里面的某一个字段是,你使用一个别名和使用数据库表的全民来说要方便很多,也要简洁很多。看下面的例子。

70a93f67fcaa054b6e1a4b24e227df8e.png

可以看出来的是,customers去了别名之后在下一次使用的时候你就不需要去customers点出他的属性了而是直接使用别名C点出数据库表的属性。需要注意的是表的别名和列的别名不一样,表的别名是不会返回到客户机的。

上一篇文章介绍了如何使用等值连接,现在来介绍其他几种连接,先介绍一个应用场景,假如一个物品表,你发现存在一定的问题,你现在想知道这个供应商的其他物品是否也存在问题,这个场景你就先需要根据有问题的产品找到其供应商,然后根据供应商查询出其他物品,这个可以根据子查询很轻松的完成。

84ba33d2fd1a3783d0b8ab573c65f682.png

这只是一种解决办法,我们还可以使用连接相同的查询,此查询语句实际上使用了同一张表,虽然是完全合法可行的,但是对表products进行了二次定义,使用MySQL不知道你是引用的实例是哪一个。为了解决这个问题就使用了别名p1和p2.通过WHERE连接两个相同的表,进行过滤数据,这个及时自连接的用法,即自己连接自己。

153bbb4cb0432941c61adf15ec94b1c8.png

接下来就是自然连接的用法了,无论何时对表进行连接,应该至少有一个列出现不止在一个表中。自然连接的一个功能就是排除多次出现的结果,使每一个列只返回一次。自然连接就是对表使用通配符(SELECT *),对所有其他的列使用明确的子集来完成的,下面就一个例子。

548f9a699cd0b4ae2d5717661bebf8f2.png

在这个例子里面,通配符只对第一个表使用,所有其他列明确列出所以没有重复的列被检索出来。事实上,迄今为止我们建立的每个内部联结都是自然连接,很可能 我们永远都不会用到不是自然连接的内部联结。

外部链接,在许多的连接里面,一个表中的行与另外一个表中的行是相关联的,但是有时候会需要包含没有关联行的数据,例如,对于一个订单表来说,对每个客户下单的数量进行统计,包括一些至今还没有下订单的客户,比如列出所以产品以及订购数量,包括至今没有人订购的产品。

在这些例子里面,连接就包括了那些在相关表中没有关联的行,这种类型就叫做外部链接。

5f2786276d33c70928d56ec523a06607.png

类似于上一章中所看到的内部联结,这条SELECT语句使用了关 键字OUTER JOIN来指定联结的类型(而不是在WHERE子句中指 定)。但是,与内部联结关联两个表中的行不同的是,外部联结还包括没 有关联行的行。在使用OUTER JOIN语法时,必须使用RIGHT或LEFT关键字 指定包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT 指出的是OUTER JOIN左边的表)。上面的例子使用LEFT OUTER JOIN从FROM 子句的左边表(customers表)中选择所有行。

c58f29814036d935313717d48651d93f.png

外连接存在两种基本的形式,左外连接和右外连接,他们之间的区别就是所连接的表的顺序不一样。具体要使用哪一种连接就是根据需求去定了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值