您的位置:首页 > 博客中心 > 数据库 >

Mysql数据库连接查询

时间:2022-03-16 11:09

    

  • 连接是关系数据库模型的主要特点。连接查询是关系数据库中最主要的查询,主要包括内连接、外连接等。通过连接运算可以实现多个表查询。当查询数据时,通过连接操作查询出存放在多个表中的不同实体信息。当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查询。如下将介绍多表之间的内连接查询、外连接查询以及复合条件连接查询。

表中数据如下:

       技术分享        技术分享

  表的连接查询语句为: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;

技术分享

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

技术分享

  • LEFT JOIN(左连接):返回包括左表中的所有记录和右表中连接字段相等的记录

  • RIGHT JOIN(右连接):返回包括右表中所有记录和左表中连接字段相等的记录

    • LEFT JOIN 左连接

      左连接的结果包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果行中右表的所有选择列表列均为空值。如下是学生表和班级表,查询所有学生所在班级的名称,包括还没有给分配班级的学生。

                              技术分享      技术分享

      左连接语句为:SELECT tb_student.name,tb_class.name FROM tb_student LEFT OUTER JOIN tb_class ON tb_student.classID=tb_class.id;

    技术分享

    技术分享

    • RIGHT JOIN 右连接

      右连接是左连接的反向连接,将返回右表的所有行,如果右表的某行在左表中没有匹配项,左表将返回空值,如下图所示,tb_student表中没有计算机5班的学生,故计算机5班前学生名为空。

    技术分享

  • 带ANY、SOME关键字的子查询

  •   ANY和SOME关键字是同义词,表示满足其中任一条件,他们允许创建一个表达式对子查询的返回值列表进行比较,只要满足内层子查询中的任何一个比较条件,就返回一个结果作为外层查询的条件。ANY关键字接在一个比较操作符的后面,表示若与子查询返回的任何值比较为TRUE,则返回TRUE。如下是是查询比学号为1学生最低成绩(86)高的所有成绩列表:

      SQL查询语句为:SELECT * FROM tb_score WHERE grade> ANY(SELECT grade FROM tb_score WHERE sID=1);

    技术分享  技术分享

    • 带ALL关键字的子查询

      关键字ALL与ANY和SOME不同,使用ALL时需要同时满足内层查询的条件,例如,将如上的例子中的ANY改为ALL,则查询比学号为1的学生成绩(86,90)都高的成绩,则如上可看出查询出结果为空。

    • 带EXISTS关键字的子查询

      EXISTS关键字后面的参数是一个任意的子查询,系统对子查询进行运算以判断它是否返回行,如果至少返回一行,那么EXISTS的结果为TRUE,此时外层查询语句将进行查询;如果子查询没有返回任何行,那么EXISTS返回的结果为FALSE,此时外层语句将不进行查询。

    技术分享

    • 带IN关键字的子查询

      IN关键字进行子查询时,内层查询语句仅仅返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。如下两条语句分别查询学生的语文成绩、查询2班学生的所有成绩:

      查询学生语文成绩:SELECT sID,grade FROM tb_score WHERE cID IN (SELECT id FROM tb_course WHERE name=‘语文‘);

    技术分享

      查询2班学生的所有成绩:SELECT sID,cID,grade FROM tb_score WHERE sID IN (SELECT id FROM tb_student WHERE classID=2);

    技术分享

    技术分享

      其它正则表达式的举例略,大家可以根据自己需求自行设计。


    本类排行

    今日推荐

    热门手游