Join多表连接

内连接、左连接、右连接以及全连接查询

内连接查询 inner join

关键字:inner join on

语句select * from a_table a inner join b_table b on a.a_id = b.b_id;

说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

案例解释:在boy表和girl 表中查出两表 id 字段一致的姓名(gname,bname),boy表和girl 表如下:

采用内连接查询方式:

SELECT * FROM boy INNER JOIN girl ON boy.bid=girl.gid

内连接和等值连接一样

SELECT * FROM boy,girl WHERE boy.bid=girl.gid;

左连接查询 left join

关键字:left join on / left outer join on

语句:SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id;

说明: left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。 左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

采用左连接查询方式:

SELECT * FROM boy LEFT JOIN girl ON boy.bid=girl.gid

右连接 right join

关键字:right join on / right outer join on

语句:SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id;

说明:right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

采用右连接查询方式:

SELECT * FROM boy RIGHT JOIN girl ON boy.bid=girl.gid

####合并结果集-- union

注意:MySQL不支持全连接(full join)

关键字:union /union all

语句:(select colum1,colum2…columN from tableA ) union (select colum1,colum2…columN from tableB )

或 (select colum1,colum2…columN from tableA ) union all (select colum1,colum2…columN from tableB );

union语句注意事项:

1.通过union连接的SQL它们分别单独取出的列数必须相同;

2.不要求合并的表列名称相同时,以第一个sql 表列名为准;

3.使用union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;

4.被union 连接的sql 子句,单个子句中不用写order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;

(select id,name from A order by id) union all (select id,name from B order by id); //没有排序效果

(select id,name from A ) union all (select id,name from B ) order by id; //有排序效果

采用 union 合并结果集:

SELECT * FROM boy UNION SELECT * FROM girl

union会自动将完全重复的数据去除掉,union all不会。

连接查询可以使用INNER JOIN关键字来实现。在查询语句中,需要连接多个,并确定连接条件。连接条件通常是两个之间的主键和外键的对应关系。同时,可以在WHERE子句中添加其他查询条件来筛选结果。 例如,如果我们有三个A、B和C,需要连接它们并查询学号为"张一"的记录,可以使用以下语法: SELECT 字段 FROM A INNER JOIN B ON A.学号 = B.学号 INNER JOIN C ON B.课程号 = C.课程号 WHERE A.姓名 = "张一"; 在这个例子中,我们使用INNER JOIN关键字连接了三个A、B和C,分别通过学号和课程号进行连接。然后,在WHERE子句中添加了一个条件,筛选出姓名为"张一"的记录。 需要注意的是,INNER JOIN可以简写为JOIN,它们是等价的。内连接查询可以帮助我们从多个中获取相关的数据。 #### 引用[.reference_title] - *1* *2* [SQL数据库语言基础之SqlServer连接查询与INNER JOIN连接查询](https://blog.youkuaiyun.com/Viewinfinitely/article/details/121451783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [017 INNER JOIN ON 连接查询语句](https://blog.youkuaiyun.com/test253506088/article/details/116504330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值