【MySQL】连接查询

123 阅读3分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第23天,点击查看活动详情

目录

18FCA746.jpg 今天阿文介绍的内容为:

  • 什么是连接查询
  • 什么是内连接
  • 什么是自连接

连接查询

连接是关系数据库模型的主要特点。而连接查询是关系数据库中最主要的查询,主要包括内连接外连接等。通过连接运算符可以实现多个表查询。

1.内连接查询

内连接使用比较运算符进行表间某(些)列数据的比较操作 ,返回满足条件的记录。

1.1例如

这里已经准备了两张数据表:fruits表和suppliers表

fruits表结构:

image.png

suppliers表结构:

image.png

可以看到,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;
查询结果为:

image.png

这里的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;
查询结果为:

image.png

可以看到与上面的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查询语句执行后查询结果是一样的

查询结果为:

image.png

因为查询的两张表是相同的表,所以对表使用了别名,fruits表第1次出现的别名为f1,第2次出现的别名为f2,列的全名,WHERE连接两个表,并按照第2张表的f_id对数据进行过滤,返回所需数据。

总结

  • 连接查询在两张表有相同的列时可以使用,并且返回满足条件的数据
  • 自连接是一种特殊的内连接查询

好了,今天阿文就介绍到这了... 18FC6367.gif