本人已参与「新人创作礼」活动,一起开启掘金创作之路。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情
目录
今天阿文介绍的内容为:
- 什么是
连接查询? - 什么是
内连接? - 什么是
自连接?
连接查询
连接是关系数据库模型的主要特点。而连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。通过连接运算符可以实现多个表查询。
1.内连接查询
内连接使用比较运算符进行表间某(些)列数据的比较操作
,返回满足条件的记录。
1.1例如
这里已经准备了两张数据表:fruits表和suppliers表
fruits表结构:

suppliers表结构:

可以看到,fruits表与suppliers表有着相同数据类型的字段s_id,两个表通过s_id字段建立联系。
现在来试着查询一下这两张表:
SQL语句如下:
SELECT suppliers.s_id, s_name, f_name, f_price FROM suppliers, fruits WHERE fruits.s_id=suppliers.s_id;
查询结果为:

这里的SQL查询语句与之前的SQL查询语句最大的区别在于,这次我们是一次查询两张表中数据,并使用WHERE对数据进行过滤,由于两个表中都有s_id字段,所以使用suppliers.s_id标识是suppliers表的s_id字段。返回的结果是由两个表中的不同列值组成的新记录。
提示:
因为fruits表和suppliers表中有相同的字段s_id,因此在比较的时候需要完全限定表名(
格式为“表名.列名”),如果只给出s_id,MySQL将不知道指的是哪一个,并返回错误信息。
使用内连接SQL语句查询,SQL语句如下:
SELECT suppliers.s_id, s_name, f_name, f_price FROM fruits INNER JOIN suppliers ON fruits.s_id = suppliers.s_id;
查询结果为:

可以看到与上面的SQL查询语句执行后查询出的结果是一样的。在这里的SQL查询语句中,两个表之间的关系通过INNER JOIN指定,使用内连接语法,连接的条件使用ON子句而不是WHERE
1.2自连接查询
如果在一个连接查询中,涉及的两个表都是同一个表,这种查询称为自连接查询。自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。
SQL语句如下
- 普通SQL查询语句
SELECT f1.f_id AS f1_f_id,
f2.f_id AS f2_f_id,
f1.s_id AS f1_s_id,
f2.s_id AS f2_s_id,
f1.f_name AS f1_f_name,
f2.f_name AS f2_f_name
FROM fruits AS f1,
fruits AS f2
WHERE f1.s_id = f2.s_id AND f2.f_id = 'a1';
- 内连接SQL查询语句
SELECT f1.f_id AS f1_f_id,
f1.s_id AS f1_s_id,
f2.s_id AS f2_s_id,
f2.f_id AS f2_f_id,
f1.f_name AS f1_f_name,
f2.f_name AS f2_f_name
FROM fruits AS f1 INNER JOIN fruits AS f2
ON f1.s_id = f2.s_id AND f2.f_id = 'a1';
两条SQL查询语句执行后查询结果是一样的
查询结果为:

因为查询的两张表是相同的表,所以对表使用了别名,fruits表第1次出现的别名为f1,第2次出现的别名为f2,列的全名,WHERE连接两个表,并按照第2张表的f_id对数据进行过滤,返回所需数据。
总结
- 连接查询在两张表有相同的列时可以使用,并且返回满足条件的数据
- 自连接是一种特殊的内连接查询
好了,今天阿文就介绍到这了...
