Mysql数据库连接查询

原文地址:https://dwz.cn/6EgNf1bd
作者:best.lei
连接是关系数据库模型的主要特点 。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等 。通过连接运算可以实现多个表查询 。当查询数据时,通过连接操作查询出存放在多个表中的不同实体信息 。当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询 。如下将介绍多表之间的内连接查询、外连接查询以及复合条件连接查询 。
内连接查询
内连接(inner join)使用比较运算符进行表间列数据的比较操作,并列出这些表中与连接条件相匹配的数据行,并组合成新的记录 。新建学生表、班级表,在两个表之间实现连接查询 。其中tb_class中的主键id为tb_student的外键,表结构如下:
Mysql数据库连接查询

文章插图
 
表中数据如下:
Mysql数据库连接查询

文章插图
 

Mysql数据库连接查询

文章插图
 
表的连接查询语句为:SELECT tb_student.*,tb_class.name FROM tb_student,tb_class WHERE tb_student.classID=tb_class.id; 或 SELECT tb_student.*,tb_class.name FROM tb_student INNER JOIN tb_class ON tb_student.classID=tb_class.id;
Mysql数据库连接查询

文章插图
 
如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询称为自连接查询,自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表 。如下是对tb_student表的查询,查询和id为1的学生为同一个班的同学:
Mysql数据库连接查询

文章插图
 
【Mysql数据库连接查询】外连接查询
连接查询将查询多个表中相关联的行,内连接时,返回查询结果集合中的仅是符合查询条件和连接条件的行 。但有时需要包含没有关联的行中数据,即返回查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左连接)、右表(右连接)或两个边表中的所有数据行 。外连接分为左外连接和右外连接;
  1. LEFT JOIN(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录
  2. RIGHT JOIN(右连接):返回包括右表中所有记录和左表中连接字段相等的记录
  • LEFT JOIN 左连接
左连接的结果包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行 。如果左表的某行在右表中没有匹配行,则在相关联的结果行中右表的所有选择列表列均为空值 。如下是学生表和班级表,查询所有学生所在班级的名称,包括还没有给分配班级的学生 。
Mysql数据库连接查询

文章插图
 

Mysql数据库连接查询

文章插图
 
左连接语句为:SELECT tb_student.name,tb_class.name FROM tb_student LEFT OUTER JOIN tb_class ON tb_student.classID=tb_class.id;
Mysql数据库连接查询

文章插图
 

Mysql数据库连接查询

文章插图
 
  • RIGHT JOIN 右连接
右连接是左连接的反向连接,将返回右表的所有行,如果右表的某行在左表中没有匹配项,左表将返回空值,如下图所示,tb_student表中没有计算机5班的学生,故计算机5班前学生名为空 。
Mysql数据库连接查询

文章插图
 
子查询
子查询是指一个查询语句嵌套在另一个查询语句内部的查询,在SELECT子句中先计算子查询,子查询结果作为外层另一个查询的过滤条件,查询可以基于一个表或者多个表 。子查询中常用的操作符有ANY(SOME)、ALL、IN、EXISTS 。子查询可以添加到SELECT、UPDATE和DELETE语句中,而且可以进行多层嵌套 。子查询中也可以使用比较运算符,如“<”、“<=”、“>”、“>=”和“!=”等 。本节将介绍如何在SELECT语句中嵌套子查询 。
  • 带ANY、SOME关键字的子查询
ANY和SOME关键字是同义词,表示满足其中任一条件,他们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件 。ANY关键字接在一个比较操作符的后面,表示若与子查询返回的任何值比较为TRUE,则返回TRUE 。如下是是查询比学号为1学生最低成绩(86)高的所有成绩列表:


推荐阅读