连接(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_id, user_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_id, user_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_name, b.area_name from area as a join area as b on a.parent_id = b.id;
需求稍作调整:
找出所有省份及其下属城市。
select province.area_name, city.area_name
from area as province join area as city on province.id = city.parent_id;
-- (如果还要包括不含下属城市的省级);
select province.area_name, city.area_name
from area as province left join area as city on province.id = city.parent_id
where province.parent_id = 0;
用心去记录前端旅途上的点点滴滴,用每一滴汗水换回所有付出所得的喜悦!
发表评论