MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

表连接(JOIN)是在多个表之间通过一定的连接条件,使表之间发生关联,进而能从多个表直接获取数据。


在介绍表连接之前,首先介绍一下外键

1. 外键(foreign key)

外键(foreign key) 为某个表中的一列,它包含另一个表的主键。

下面是一个简单的例子,比如一个学生表studen中,存储学生的信息(学号、姓名、年龄等),另一张成绩表中,记载着学生的成绩(学号、科目、成绩),其中成绩表的学号可以声明为一个外键。
创建表时,SQL语句如下:

CREATE TABLE stu_score(
	id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	student_no INT NOT NULL,
	course VARCHAR(30) NOT NULL,
	grade INT NOT NULL,
	foreign key(student_no) references student(id)	# 声明为外键
);

2. 内连接与外连接

各种表连接的区别如下表所示:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)
交叉连接:没有 WHERE 子句的交叉连接将产生 笛卡尔积 第一个表的行数乘以第二个表的行数等于笛卡尔积和结果集的大小。

下面的列举一个内连接和左连接的示例(右连接左右颠倒就是左连接),MySQL不支持全连接。

下面是学生表 student 中的内容:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)
下面是成绩表 score 中的内容:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)
内连接 查询语句:

SELECT A.id, A.name, B.course, B.grade 
	FROM student A 
	JOIN score B 
	ON A.id = B.student_no;

结果如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)
左连接 查询语句:

SELECT A.id, A.name, B.course, B.grade 
	FROM student A 
	LEFT JOIN score B 
	ON A.id = B.student_no;

这里我们仅仅是把 JOIN 换成可 LEFT JOIN ,其结果如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)
可以明显的看出,左连接是将A的全部+A和B相交的部分的集合。

3. 自连接

自连接是一种特殊的表连接,它是指相互连接的表在物理上是同一张表,但是在逻辑上是多张表。自连接通常用于表中的数据有层次结构,如区域表、菜单表、商品分类表等。

比如这里是一张区域表 china_area ,表中的内容如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)
这里的 嫩江县黑河市哈尔滨 他们的pid 都为1,都是属于黑龙江省的
昌平区海淀区 他们的pid都为2,都是属于北京的
可见这个表达到了我们的要求物理上是一张表,逻辑上为多张表

下面是自连接的SQL语句:

SELECT A.id, A.name, B.name 
	FROM china_area A, china_area B
	WHERE A.pid = B.id AND A.pid != 0;

查询结果如下:
MySQL数据库学习笔记(9)- DQL之表连接(内连接、外连接、自连接)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值