mysql自链接与join关联

mysql自链接

mysql有时在信息查询时须要进行对自身链接(自链接),因此咱们须要为表定义别名。咱们举例说明,下面是商品采购表,咱们须要找到采购价格比惠惠高的全部信息。
mysql

通常状况咱们看到这张表咱们第一时间用语句进行操做:sql

SELECT * FROM shoping WHERE price>27

可想而知,这是有多么简单,假设你并不知道数据库表详细数据或者数据量至关庞大呢?做为一个数据库管理员,咱们就要用别的方式迅速找出所须要的数据。数据库

分步查询

最简单的一种方式,也是最容易想到操做:spa

SELECT price FROM shopping WHERE name='惠惠' //得出price查询结果为27
SELECT * FROM shopping WHERE price>27

与采用自链接的方式相比,这种方法须要对中间结果进行人工干预,显然不利于程序中的自动处理操做。code

自链接方式:

SELECT b.* 
from shopping as a,shopping as b
where a.name='惠惠' 
and a.price<b.price 
order by b.id

咱们能够获取到以下表信息:
blog

注意点:rem

  • 别名 a,b虽然名称不一样,可是同一个表,定义别名的目的是更方便在自身进行删选。it

  • 执行select经过(中间表)所获得的b.*,,就是最终结果。table

子查询

子查询也是经常使用的一种方式,就是在select里嵌套select。实现代码以下:class

SELECT * FROM shopping 
WHERE price>(select price from 'shopping' where name='惠惠')

所得结果以下所示,可见两种方式所得结果相同:

JOIN

INNER JOIN

内关联的主要做用是在表中存在至少一个匹配时,就返回结果集,这里的inner join和join做用相同,因此一块儿介绍。
下面给出两张表,分别为goods和category表:

SELECT * FROM goods INNER JOIN category 
ON goods.id=category.goods_id 
ORDER BY gods.id

结果以下所示:

LEFT JOIN

LEFT JOIN 关键字会从左表 (table_name1) 那里返回全部的行,即便在右表 (table_name2) 中没有匹配的行。作项目时建议使用左关联。可是存在不少表关联的,一个表对a是左链接,但同时对b是右链接,这时加上右链接,写起来可能方便一些。
套用一开始的两张表,进行左关联查询:

SELECT goods.*,category.cate_name 
FROM goods LEFT JOIN category 
ON goods.id=category.goods_id 
ORDER BY goods.id

RIGHT JOIN

RIGHT JOIN 关键字会右表 (table_name2) 那里返回全部的行,即便在左表 (table_name1) 中没有匹配的行。套用一开始的两张表进行右关联查询:

SELECT a.goods_name,a.price,b.*
FROM goods as a
RIGHT JOIN category as b
ON a.id=b.goods_id
ORDER BY b.id

对于多表关联的状况,就是多加几条关联语句。

相关文章
相关标签/搜索