【MySQL学习笔记】MySQL原理---多表查询

一、union联合查询

要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致时。

特点:
1、要求多条查询语句的查询列数是一致的
2、要求多条查询语句查询的每一列的类型和顺序最好一致
3、union关键字默认去重,如果使用union all 可以包含重复项


两张表进行联合查询(逻辑上不正确,仅做示例进行展示以便理解):

SELECT
	age,
	gender 
FROM
	info 
UNION
SELECT
	'name',
	phone 
FROM
	teacher;

请添加图片描述



二、inner join

内连接查询

需要有一个公共字段


已有 studnet 表中数据:

请添加图片描述

新建一个 socre 表:

请添加图片描述

插入数据:

请添加图片描述

内连接查询姓名对应成绩:

SELECT 
	name,
	score 
FROM
	student
INNER JOIN score ON 
student.id = score.stuid;

请添加图片描述



三、inner join注意事项

连接字段时一定要指定表

三张表的话再加一个inner join就行,依此类推



四、left join

(左连接)

以左表为基准,右表为辅

将左表指定字段全部取出,

请添加图片描述

对照左表,右表指定字段取出对应值

(未在右表找到对应实体属性时取NULL)

请添加图片描述

SELECT name,score 
FROM
	student LEFT JOIN score ON 
student.id = score.stuid;

请添加图片描述



五、right join

(右连接)

以右表为基准,左表为辅

将右表指定字段全部取出,

请添加图片描述

对照右表,左表指定字段取出对应值

(未在左表找到对应实体属性时取NULL)

请添加图片描述

SELECT name,score 
FROM
	student RIGHT JOIN score ON 
student.id = score.stuid;

请添加图片描述



六、cross join

(交叉连接)

建立两个表:

请添加图片描述

请添加图片描述

笛卡儿积:

SELECT 
*
FROM
	t1 CROSS JOIN t3;

请添加图片描述

内连接:

SELECT 
*
FROM
	t1 CROSS JOIN t3
WHERE
	t1.id=t3.id;

请添加图片描述



七、natural join

(自然连接)

当保证公共字段字段名一致时,

不需要给定公共字段就能进行连接。

SELECT 
*
FROM
	t1 NATURAL JOIN t3;

请添加图片描述

自然左连接:

SELECT 
*
FROM
	t1 NATURAL LEFT JOIN t3;

请添加图片描述

自然右连接:

SELECT 
*
FROM
	t1 NATURAL RIGHT JOIN t3;

请添加图片描述



八、无公共字段的自然连接返回笛卡儿积



九、using

当两张表中有两个公共字段时

使用自然连接:

SELECT 
*
FROM
	t1 NATURAL JOIN t3;

请添加图片描述

使用using进行字段指定:

SELECT * FROM t1 INNER JOIN t3 USING(id);

请添加图片描述



十、实用的连接方式

写全左右两张表的公共字段

例如:student.id = score.stuid

这样可以增强可读性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值