连接关系数据模型的主要特点,连接查询是关系数据库中最主要的查询,包括内连接、外连接等。
当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行
连接查询,得到存放在多个表中的记录数据。
所谓表中相同意义的字段,是指在多个表中名字不一定相同,但取值的含义相同的字段,这是表之间实现连接查询的前提。
在实现表内连接的实验前需要对mysql的语法进行扎实的掌握,以下有mysql的基础知识可以查看
mysql的增删改查
mysql修改表结构
mysql的约束
select语句详解
mysql表的修改和删除

内连接查询(INNER JOIN)

内连接查询(INNER JOIN):
INNER JOIN使用比较运算符(=)根据每个表共有列的列值匹配两个表中的行,
其查询结果仅包含符合查询条件和连接条件的行。即查询结果为两个表的交集。
注意:多表查询时,为避免混淆,在查询字段前应添加表名称作为前缀!

如何分析连接查询

  • 查询结果包含哪些字段
  • 这些字段来源于哪些表
  • 表之间的连接字段是哪个

SELECT table1.column, table2.column
FROM table1, table2 WHERE table1.column1 = table2.column2;
– 在 WHERE子句中书写连接条件。
– 如果在多个表中出现相同的列名,则需要使用表名作为来自该表的列名的前缀。
– N个表相连时,至少需要N-1个连接条件。

请添加图片描述
如以上两个表,teacher和department表
我们要查询的字段是
teacher.Teacher_id
teacher.Teacher_name
department.Department_name
我们从表结构可以看出两个表的连接字段是teacher_id和department_id
下面我们看sql查询代码

SELECT
teacher.teacher_id,
teacher.teacher_name,
department.department_name
FROM teacher INNER JOIN department
ON teacher.department_id=department.department_id;

其中inner join是内连接关键字,on的后面是连接的条件

teacher.department_id=department.department_id;

这条语句的含义是将教师的部门id和部门的id对应上,在进行输出。
比如刘老师是计算机学院的,计算机学院编号是0012,刘老师的部门编号也是0012,所以将教师表和学院表进行相连,来输出我们想要的结果。

那么我们发现,这些表的名称较长,我们也可以通过给表名起一个简略的名称来减少代码的长度,我们把teacher表命名为A,department为B,代码如下

SELECT
A.teacher_id,
A.teacher_name,
A.department_id,
B.department_name
FROM teacher A INNER JOIN department B
ON A.department_id=B.department_id;

这样的代码简单明了,看的清晰

下面我们来看多个表内连接查询

多个表内连接查询比两个表内连接查询的复杂一点点,不过原理和用法是相同的,下面看图
请添加图片描述
如图我们要查询学生所在班级、年纪和学院,由图可以看到我们需要的连接结构
代码如下

SELECT student.student_id,
student.student_name,
classes.class_name,
classes.year,
department.department_name
FROM student
INNER JOIN classes on student.class_id=classes.class_id
INNER JOIN department on classes.department_id=department.department_id;

通过学生的班级号和class的id相连,classes的id和学院的id相联系,就可以进行查询,比较简单,查询结果后若有重复或者需要筛选的可以用where进行修改。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐