mysql的链接查询join - 前端笔记-连接(join)查询是将两个查询的结果以“横向对接”的方式合并起来的结果。 1.交叉链接 表1的每一项,链接表耳的每一项 ...

学习笔记

点滴记忆
回忆过往
首页>> web后端 >>mysql的链接查询join - 前端笔记
2020-3-8
分类: web后端

mysql的链接查询join

文章作者:痴迷

连接(join)查询是将两个查询的结果以“横向对接”的方式合并起来的结果。     1.交叉链接   表1的每一项,链接表耳的每一项  &......

连接(join)查询是将两个查询的结果以“横向对接”的方式合并起来的结果。

    1.交叉链接   表1的每一项,链接表耳的每一项     
    2.内链接    就是通过 on 做条件判断 筛选出来的部分数据 2个表格相等才筛选出来
    3.左链接    就是通过 on 做条件判断 筛选出来的部分数据 保留左边表格的 未2个表相对的 数据
    4.右链接    就是通过 on 做条件判断 筛选出来的部分数据 保留右边边表格的 未2个表相对的 数据
    5.自连接    就是 自己链接 自己   

一,交叉链接(cross join)

语法形式:

from  1  [cross]  join  2

说明:

1,交叉连接其实可以认为是连接查询的“完全版本”,即所有行都无条件地都连接起来了。

2,关键字cross”可以省略;

3,交叉连接又称为“笛卡尔积”,通常应用价值不大。

SELECT * FROM `product` inner join product_type

二,内链接(inner join)

语法形式:

from  1  [inner]  join  2  on  连接条件

说明:

1,内连接其实是交叉连接的基础上,再通过on条件而筛选出来的部分数据。

2,关键字inner”可以省略,但建议写上。

内连接是应用最广泛的一种连接查询,其本质是根据条件筛选出“有意义的数据”

-- 内连接查询:
SELECT * FROM `product` inner join product_type on product.protype_id = product_type.protype_id;
-- 也可以改写为:
SELECT * FROM product as p inner join product_type as t on p.protype_id = t.protype_id;

课堂练习:
找出所有价格大于5000的家用电器的商品的完整信息(含所属类别);
SELECT * FROM product as p inner join product_type as t on p.protype_id = t.protype_id
where price > 5000 and protype_name = '家用电器';

上述需求稍作修改如下:
找出所有价格大于5000的家用电器的商品的名称,价格和品牌;
SELECT pro_name, price, pinpai 
  FROM product as p inner join product_type as t on p.protype_id = t.protype_id
  where price > 5000 and protype_name = '家用电器';


三,做左链接(left join)

语法形式:

from  1  left [outer] join  2  on  连接条件

说明:

1,左外连接其实是保证左边表的数据都能够取出的一种连接。

2,左外连接其实是在内连接的基础上,再加上左边表中所有不能满足条件的数据

3,关键字“outer”可以省略。

-- 演示左连接:
找出所有类别及各类别中的商品(需列出类别名称,商品名称,价格,品牌和产地)
select protype_name, pro_name, price, pinpai, chandi 
  from product_type as t left join product as p on p.protype_id = t.protype_id


四,右外链接(right join)

语法形式:

from  1  right [outer] join  2  on  连接条件

说明:

1,右外连接其实是保证右边表的数据都能够取出的一种连接。

2,右外连接其实是在内连接的基础上,再加上右边表中所有不能满足条件的数据。

3,关键字“outer”可以省略。

- 演示右连接:
找出所有用户及其订单信息(需列出用户id,用户名,订单号,订单总价,订单地址)
select user_info.user_iduser_name, order_id, order_total, order_addr
  from order_info  right join user_info on user_info.user_id = order_info.user_id;
上述语句,也可以写为如下形式,结果一样:
select user_info.user_iduser_name, order_id, order_total, order_addr
  from user_info  left join order_info on user_info.user_id = order_info.user_id;

五,自连接

语法形式:

from  表名  as  a  [连接形式]  join  表名 as  b  on  a.xx字段1=b.xx字段名

说明:

1, 自连接其实还是两个表连接,只是将一个表用不同的别名,当做两个表。

2, 自连接适用于一个表中的某个字段的值“来源于”当前表的另一个字段的情况。

-- 自连接演示:
select  a.area_nameb.area_name  from area as a  join  area as b  on a.parent_id = b.id;

需求稍作调整:
找出所有省份及其下属城市。
select province.area_namecity.area_name  
  from area as province join area as city on province.id = city.parent_id;
-- (如果还要包括不含下属城市的省级);
select province.area_namecity.area_name  
  from area as province left join area as city on province.id = city.parent_id
  where province.parent_id = 0;



×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:前端笔记 » mysql的链接查询join

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)